2010-12-10 9 views
5

nosqlオプションが典型的なMMORPGのrdbmsの代わりに、またはrdbmsと組み合わせて、どのような利点を持っているのか疑問に思っていました。特に、nosqlの下でデータの整合性がどのように保持されるかについては興味があります。MMORPGのNoSqlオプション

シナリオ1:のは、同時にプレイヤーAとBの攻撃プレイヤーCを言ってみましょう

は、私は、サーバーのロジックが動作する方法についての一種の混乱しているいくつかの例をあげます。プレイヤーC.通常の殺し方のプレーヤー、1は次のようにこのAttackPlayerRequestを扱う可能性があるためplayer_stats.kill_countが更新されます。

は { attacker.health = newAttackerHealth

defender.health = newDefenderHealth

トランザクションを開始します

場合defender.Health == 0 {attacker.stats.kills + = 1 }}

シナリオ2:プレーヤーA SEアイテムをNPCベンダーに渡し、すぐに同じアイテムを在庫から地面に落とそうとします。 (たとえUIがこれを許可していなくても、イベントをワイヤに置くだけです)。

このリストは、明らかにすべてのプレイヤーとプレイヤーのプレイヤーと世界の相互作用に影響します。情報の最後の1つは、他のプレイヤーがゲームで簡単なことをすることを妨げるような、特に長い時間のリクエストを望まないので、サーバーがスレッド化されていることです。

私の大きな質問はここにあると思いますが、私はこの些細な問題では何かを誤解していますか?そうでない場合、これはnosqlのオプションが解決しようとしているものの範囲を超えていますか?典型的なMMOの下で、nosqlオプションを挿入してサーバのパフォーマンスを向上させる場所はどこですか?

+1

あなたの質問はゲーム開発に関連しているので、http://gamedev.stackexchange.com/でより良い回答が得られるかもしれません。 – HoLyVieR

+0

ほとんどのNoSQLシステムはトランザクションをサポートしていません。あなたはそれらを必要としますか? – TTT

+0

データの完全性のための機能を持つNoSQLシステムはないと思います。これは、アプリケーションで行う必要があるものです。もちろん、NoSQLグループは非常に多様なグループなので、おそらくこの一般ルールの例外があります。 – TTT

答えて

2

MMOサーバーは、あなたがメモリにリストアップしたものの多くをすると思います。私はそれらのすべてをデータベースに流すとは思わない。私は、新しいギアを受けたり、ギアのレイアウトを変えたりするような、より厳しいイベントが保存されると思います。

これは大量のデータですが、ほとんどすべての単一の戦闘のやり取りほどではありません。

0

私の理解では、nosqlテクノロジは、バッチ・ジョブ・コンテキストで使用するものであり、リアルタイム・コンテキストでは使用しません。実際、オープンソースのHベースの実装は、主に読み取り専用の状況で使用されるhadoop分散ファイルシステム(hdfs)の上にあります。

アイデアは、ディスク上に(実際には分散ファイルシステム上で)保持しているデータセット全体を反復処理することによってレコードを探し出すことです。ペタスケールのデータセットの場合、メモリ内に物事を保持することは不可能です。したがって、大量のディスク読み取りを利用してデータを「シーク」できるようにします。分散された性質は、これが適時に起こることを確実にする(または促進する)。

原則として、非常に大きなデータベースからデータを引き出し、ネットワーク経由で送信してから、ローカルノードで処理するのではなく、分散データに処理を引き継ぐことです。 Pig(http://pig.apache.org/)とHive(http://hive.apache.org/)は、hdfsの上にあるインターフェイスで、SQLのようなクエリが可能ですが、バックグラウンドではmapreduceジョブ。インタラクションは遅いですが、これはポイントではありません。要点は、膨大なデータセットをまったく処理できることです。

ゲームの場合、これは明らかに行く方法ではありません。したがって、データが分散ファイルシステムからフェッチされ、サーバー上にキャッシュされ、セッション中に使用されることを期待します。ゲームが終了すると、すべてのデータがデータセットにコミットされます。 (少なくとも、それは私がそれが行くと思った方法です)。

Hdfsデータセットは、ほとんどの場合、特定の時点で処理され、その結果が1回のバッチでパブリッシュされます。たとえば、ソーシャルネットワークサイトでは、毎日すべての接続データをコンパイルし、人と人との間の新しい接続をすべて検索し、データセット内のすべての人の操作が完了したら、その結果を標準で公開します'Xは今やYのメッセージに接続されます。これはリアルタイムでは起こりません。

+0

実際にはHadoopとHBaseをバッチ処理に使用しますが、NoSQLは多様なグループです。たとえば、MongoDbはOLTPシステムですが、トランザクションがないのでOLPです。 NoSQLデータベースの使用例のリストは、次のとおりです。http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html – TTT

4

これはゲームの操作方法によって異なります。 Facebookで

のNoSQL

ファームビルは、NoSQLのを使用しています。 Farmvilleは誰もが誇っている1つの巨大なサーバーのように機能します。 Farmvilleがデータベースクラスタに3台のコンピュータを使用しているとしましょう。サンディエゴのコンピュータ1。ニューヨークのコンピューター2。モスクワのコンピュータ3。私はサンディエゴからFacebookにログインしていますので、 ここにデータベースに接続してください。レベルアップしてログアウトします。最終的にコンピュータ1コンピュータ2と3に私がどのように水平になっているかを伝えますが、ロシアの誰かが自分のアカウントへの変更を見るまでには1時間ほどかかることがあります。

NoSQLスケーリングは、クラスタに別のコンピュータを追加し、その地域のWebサイトにそのコンピュータを使用するように指示するだけです。

SQL

ありSQL作業を行うにはいくつかの方法があるが、私は、独自のSQLとそれぞれ、各データ・センターは10台のゲームサーバーを持つことになりますNoSQLの

と、それは似たようにする方法を説明しますデータベース+ 1サブマスターデータベース。 Sub Master Databaseは10台すべてのサーバー間で情報を共有していたので、サーバー1にログインしてJohn Doeを作成してログアウトすると、そのサーバーに次にログインするとServer 10に文字が表示されます。

サブマスターは、HQでマスターサーバーと情報を共有します。マスターサーバーは、John Doeを他のすべてのデータセンターの他のすべてのサブマスターに共有し、それらのサブマスターはそれぞれのゲームサーバーを更新します。この設定では、サンフランシスコのサーバーウィードにログインし、あなたのキャラクターをプレイし、ログアウトし、モスクワのサーバーウォッカにログインし、あなたのキャラクターを見ることができます。

World of WarcraftのようなゲームはSQLを使用しますが、データベースの特定の部分だけが共有されます。これにより、各コンピュータのデータベースサイズが縮小され、ハードウェア要件も削減されます。

現実の状況では、各サブマスターにはバックアップサブマスターがあり、1台のサーバーがダウンした場合にマスターサーバーがいくつかのバックアップサーバーを持つことになり、ネットワーク全体がロックアップしません。

1

待ち時間が心配されているMMORPGは通常、1台のサーバーで実行され、オブジェクトモデル情報以外のすべてをRAMに保存します。戦闘環境のものは待ち時間が心配です。

HDDを使用するものは、RDBMSでもNoSQLでも、バトル環境では悪い考えです。 HHDを使用する任意のメカニズムを介して、単一のサーバー上の10,000人のユーザー間で、オブジェクトのカスタマイズ、位置、移動ベクトル、方向ベクトル、健康状態、電力などを更新して共有することは、待ち時間が心配な場合は愚かです。単純なアリーナで2人の人が戦っている場合でも、待ち時間はまだ問題であり、1台のサーバーで実行し、すべてをメモリ内に保持する必要があります。レンダリングされるすべてのものは、PCまたはPCのメモリに保存されている必要があります。複数のサーバ上で実行することができ、待ち時間とあなたが望む任意のデータベースを心配していない

のMMORPG(などのNoSQLは、MySQL、...)

あなたはファームビルやネオペットのようなゲームを作っている場合は、[はい、 NoSQLまたはMySQLが有効なオプションになります。