5

プレイヤーが建物を建てられるブラウザゲームを目指しています。

各建物にはいくつかのモジュール(エンジン、オフィス、生産ラインなど)があります。各モジュールでは、材料Y、Zを使用した200'アイテムX'の作成など、1つ以上のアクションが実行されます。

ゲームサーバーはerlangでセットアップされます:サーバー自体としてOTPアプリケーション、そしてWebフロントとして窒素。データの永続性が必要です。私は次のことを考えていました:

誰かまたは何かが建物と対話するか、生産ラインを表すタイマーが終了すると、スーパーバイザーがgen_serverを生成し(まだ生成されていない場合)、データベースから建物の状態をロードします。これにより、gen_serverは'addなどのメッセージに応答できます。このモジュール'、'このアクションを開始します'、'このプロダクションをウェアハウスに保存します'、'ダイ'など(

しかし、建物がX秒または数分間メッセージを受信しない場合、建物は終了し(gen_serverタイムアウト機能のおかげで)、現在の状態をデータベースに戻します。

したがって、(ソフト)リアルタイムゲームになるため、gen_serverは非常に高速に設定する必要があります。membaseは応答時間が非常に長いことが知られているため、データベースとして考えていました。

私の質問は、genサーバーが稼働しているとき、彼の状態はメモリをいっぱいにし、この状態はmembaseによって処理されるメモリにも存在するため、状態はメモリ内の彼のサイズの2倍を使用します。それは悪いデザインですか?

私の場合、membaseは永続性を処理するための優れたソリューションですか?mnesiaをより良い選択、または何か他のものを使用するでしょうか?

現時点では、gen_servers(この例では建物だけでなく、プレーヤー、生産ラインなど)の平均状態サイズがわからないため、mnesia 2 Go(または4?)テーブルサイズの制限を恐れています。 1人のプレーヤー:)

ありがとうございました

4

2 に答える 2

2

Hynek-Pichi-Vychodilに同意します。Riakはkey-valyeストレージに最適です。

あなたが説明したのと同じことに対して、Riakをほぼ95%使用しています。これまでのところ、すべてが問題なく機能しています。Riakのパフォーマンス制限に達する場合は、ノードを追加してください。

Riakのもう1つの優れた点は、時間の経過に伴うパフォーマンスの低下が非常に少ないことです。Riakのベンチマークに関する詳細については、http://joyeur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/を参照してください

あなたがそれと一緒に行く場合:

membaseとメモリ使用量について:membaseも試しましたが、自分のタスクには適していないことがわかりました-(membaseはフォールトトレランスを宣言していますが、membaseの担当者の助けを借りても、フォールトで動作するように設定できませんでした私は成功しませんでした)。したがって、現時点では、次のアーキテクチャを使用しています。オンラインでゲームをプレイするすべてのプレーヤーは、プレーヤープロセス(gen_server)として表示されます。各プレーヤーのすべてのデータデータとビジネスロジックは、そのプレーヤープロセスにあります。時々、各プレイヤープロセスはその状態をriakに保存することを決定します。

これまでのところ、非常に高速で効率的なアプローチのようです。

更新:これでPostgreSQLを使用します。すばらしい!

于 2011-10-22T10:16:23.543 に答える
0

データを保存するためにビットキャスクまたは他のRiakバックエンドを探すことができます。IPCを避けることは間違いなく良い考えなので、Erlang内に保管してください。

于 2011-10-20T12:04:36.667 に答える