2010-12-10 4 views
5

nosql 옵션이 일반적인 MMORPG 대신 rdbms와 함께 또는 어떤 MMORPG 옵션과 함께 제공되는지 궁금합니다. 특히, nosql에서 데이터 무결성을 유지하는 방법에 대해 궁금합니다.MMORPG를위한 NoSql 옵션

시나리오 1 :의 동시에 플레이어 A와 B 공격 플레이어 C를 가정 해 봅시다

는 내가 서버 논리가 작동 할 방법으로 가지 혼란 스러워요 몇 가지 예를들 수 있습니다.

이 거래 { attacker.health = newAttackerHealth

defender.health = newDefenderHealth

를 시작하십시오 player_stats.kill_count이 선수 C. 일반적으로 사망 중 플레이어 업데이트됩니다, 하나는 다음과 같은 방법으로이 AttackPlayerRequest을 처리 할 수

경우 defender.Health == 0 { attacker.stats.kills + = 1}}

시나리오 2 : 플레이어 A SE 아이템을 NPC 벤더에 보내고 같은 아이템을 인벤토리에서지면으로 신속하게 떨어 뜨립니다. (UI가 이것을 허용하지 않는다고해도, 그들은 단지 이벤트를 유선에 넣을 수 있습니다.)

이 목록은 분명히 모든 플레이어와 플레이어의 플레이어와 세계의 상호 작용에 영향을줍니다. 정보의 마지막 부분은 다른 플레이어가 게임에서 간단한 일을 할 수 없도록 특별히 긴 요청을 보내지 않기를 바라는 것처럼 서버가 스레드라는 것입니다.

여기 내 큰 질문이있는 것 같아요.이게 사소한 문제가있는 nosql에 대한 오해입니다. 그렇지 않은 경우, nosql 옵션이 해결할 도메인의 범위를 벗어나는 것입니까? 일반적인 MMO에서 nosql 옵션을 사용하여 서버 성능을 향상시킬 수있는 곳은 어디입니까?

+1

게임 개발과 관련된 질문이므로 http://gamedev.stackexchange.com/에서 더 나은 답변을 얻을 수 있습니다. – HoLyVieR

+0

대부분의 NoSQL 시스템은 트랜잭션을 지원하지 않습니다. 당신이 그들을 필요로합니까? – TTT

+0

데이터 무결성을위한 기능이있는 NoSQL 시스템이 있다고 나는 생각하지 않습니다. 이것은 응용 프로그램에서 수행해야하는 작업입니다. 물론 NoSQL 그룹은 매우 다양한 그룹이므로이 일반적인 규칙에 예외가있을 수 있습니다. – TTT

답변

2

MMO 서버는 당신이 메모리에 나열한 많은 것들을 할 것이라고 생각합니다. 나는 그들 모두가 데이터베이스에 플러시한다고 생각하지 않는다. 새로운 장비를받는 것과 기어 배치를 변경하는 것과 같은 더 어려운 이벤트는 저장 될 것이라고 생각합니다.

많은 데이터가 있지만 모든 단일 전투 상호 작용만큼 비슷하지는 않습니다.

0

제 생각에 nosql 기술은 일괄 컨텍스트에서 사용하는 것이지 실시간 컨텍스트에서는 사용하지 않을 것입니다. 사실, 오픈 소스 H- 기반 구현은 hadoop 분산 파일 시스템 (hdfs) 위에 위치하며, 이는 주로 읽기 전용 상황에 사용됩니다.

아이디어는 디스크에 보관중인 전체 데이터 세트 (실제로는 분산 파일 시스템)를 반복하여 레코드를 구하는 것입니다. Petascale 데이터 세트의 경우, 물건을 메모리에 보관하는 것은 불가능합니다. 따라서 데이터를 '찾기'위해 대량의 디스크 읽기를 활용하십시오. 분산 된 특성은 적절한시기에 발생한다는 것을 확신합니다 (또는 용이하게 함).

원칙은 매우 큰 데이터베이스에서 데이터를 가져 와서 네트워크를 통해 전송 한 다음 로컬 노드에서 처리하는 대신 처리를 분산 데이터로 가져 오는 것입니다. Pig (http://pig.apache.org/)와 Hive (http://hive.apache.org/)는 hdfs 위에있는 인터페이스로, SQL과 비슷한 쿼리를 허용하지만 배경에서는 mapreduce 직업. 상호 작용은 느리지 만 이것이 중요한 것은 아닙니다. 요점은 엄청난 데이터 세트가 전혀 처리 될 수 있다는 것입니다.

게임의 경우 분명히 갈 길이 없습니다.따라서 분산 파일 시스템에서 데이터를 가져 와서 서버에 캐시하고 세션 중에 사용할 것으로 예상 할 수 있습니다. 게임이 끝나면 모든 데이터가 다시 데이터 세트로 커밋됩니다. (적어도, 그것은 내가 그것이 갈 것 인 것을 상상한다).

Hdfs 데이터 세트는 대개 특정 시점에서 처리되고 그 후에 결과가 한 배치로 게시됩니다. 예를 들어, 소셜 네트워크 사이트에서는 매일 모든 연결 데이터를 컴파일하고 사람들 간의 모든 새로운 연결을 검색하며 데이터 세트의 모든 사용자에 대해 작업이 완료되면 결과가 일반적인 방식으로 게시됩니다 'X는 이제 Y'메시지에 연결됩니다. 이것은 실시간으로 발생하지 않습니다.

+0

실제로 Hadoop과 HBase를 일괄 처리에 사용하지만 NoSQL은 다양한 그룹입니다. 예를 들어, MongoDb는 OLTP 시스템이지만 트랜잭션이 없기 때문에 OLP입니다. NoSQL DB의 사용 사례 목록은 다음과 같습니다. http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html – TTT

4

이 모든 것은 게임 작동 방식에 따라 다릅니다. 페이스 북에

NoSQL에

팜빌이되는 NoSQL을 사용합니다. Farmville은 모두가있는 거대한 서버처럼 작동합니다. Farmville이 데이터베이스 클러스터에 3 대의 컴퓨터를 사용한다고 가정 해 보겠습니다. 컴퓨터 1 샌디에고. 뉴욕의 컴퓨터 2. 모스크바에서 컴퓨터 3입니다. 샌디에고에서 페이스 북에 로그인하므로 여기 데이터베이스에 연결하십시오. 나는 레벨 업하고 로그 아웃했다. 결국 컴퓨터 1 컴퓨터 2와 3에 내가 수평을 어떻게 잡았는지 알리 겠지만, 러시아에있는 누군가가 내 계정에 대한 변경 사항을 보게 될 때까지 최대 1 시간이 걸릴 수 있습니다.

NoSQL 스케일링은 다른 컴퓨터를 클러스터에 추가하고 해당 지역의 웹 사이트에서 해당 컴퓨터를 사용하는 것처럼 간단합니다.

SQL

이 SQL 작업을 만드는 여러 가지 방법이 있지만 내가

각 데이터 센터는 자체 SQL 10 개 게임 서버, 각있을 것이다 NoSQL에

에이 유사 할 수있는 방법을 설명합니다 데이터베이스 + 1 서브 마스터 데이터베이스. Sub Master Database는 10 대의 모든 서버 사이에서 정보를 공유하므로 서버 1에 로그인하여 John Doe 문자를 만든 다음 로그 아웃하면 그 서버에 다음에 로그인하면 Server 10에 문자가 생깁니다.

Sub Master는 귀하의 본사에서 마스터 서버와 정보를 공유합니다. 그러면 마스터 서버는 John Doe를 다른 모든 데이터 센터의 다른 모든 하위 마스터와 공유하게되며 해당 하위 마스터는 게임 서버를 업데이트합니다. 이 구성은 당신이 샌프란시스코의 서버 위드에 로그인하고, 캐릭터를 플레이하고, 로그 아웃하고, 모스크바의 서버 보드카에 로그인하고, 여전히 당신의 캐릭터를 볼 수있게 해줍니다.

World of Warcraft와 같은 게임은 SQL을 사용하지만 데이터베이스의 특정 부분 만 공유됩니다. 이를 통해 각 컴퓨터의 데이터베이스 크기를 줄이고 하드웨어 요구 사항을 줄일 수 있습니다.

실제 상황에서 각 서브 마스터는 백업 서브 마스터를 가지며 한 서버가 다운되는 경우 마스터 서버가 몇 대의 백업 서버를 갖게되어 전체 네트워크가 잠기지 않습니다.

1

대기 시간이 걱정되는 MMORPG는 일반적으로 단일 서버에서 실행되며 개체 모델 정보를 제외한 모든 것을 RAM에 저장합니다. 전투 환경을 가진 어떤 것도 대기 시간에 대해 걱정하고 있습니다.

HDD를 사용하는 모든 것이 RDBMS 또는 NoSQL이든간에 전투 환경에서는 좋지 않습니다. HHD를 사용하는 메커니즘을 통해 단일 서버에서 10,000 명의 사용자 사이에있는 개체 사용자 지정, 위치, 이동 벡터, 방향 벡터, 상태, 전원 등을 업데이트하고 공유하면 대기 시간이 걱정되는 경우 바보입니다. 단순한 경기장에서 2 명이 싸우는 경우에도 대기 시간은 여전히 ​​문제이며 단일 서버에서 실행하고 모든 것을 메모리에 보관해야합니다.렌더링 될 모든 것은 PC 또는 PC의 메모리에 있어야합니다. 여러 서버에서 실행할 수있는 대기 시간과 당신이 원하는 모든 데이터베이스에 대해 걱정하지

있는 MMORPG (등 NoSQL에, MySQL은, ...)

당신은 팜빌이나 네오 펫 같은 게임을하는 경우, 다음 네, NoSQL 또는 MySQL이 유효한 옵션이됩니다.