プレイヤーが建物を建てられるブラウザゲームを目指しています。
各建物にはいくつかのモジュール(エンジン、オフィス、生産ラインなど)があります。各モジュールでは、材料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人のプレーヤー:)
ありがとうございました