3

iPhone用のソーシャルゲームのバックエンドをRubyonRails/postgresサーバーでホストしています。

すべてのゲームには、データベースのリレーションテーブルを介して接続された54の質問があります。現在、約200万の進行中のゲームがあるため、リレーションテーブルには約1億の行が含まれています。これは多くのメモリを消費します。現在、game_idによってシードされた疑似ランダムシーケンスを使用して54の質問IDを生成するアルゴリズムの構築を検討しています。アイデアは、明示的なゲームの質問の関係をデータベースに保存せずに、一見ランダムな質問のコレクションを作成することです。このようにして、データベースからアプリケーションサーバーに負荷を移動できます。これは良い考えですか?

擬似コード:

r = Random.new(game_id)
q1_id = r.rand(n_questions)
q2_id = r.rand(n_questions)
... 
4

1 に答える 1

2

ええ、必要なのはゲームIDを取得してシーケンスを生成する決定論的関数だけです。gameIdにソルトを追加して結果をハッシュするのと同じくらい簡単なことでうまくいくはずです。そうすれば、結果の値を質問IDにマッピングするだけです。(そのようなものの組み合わせ論を見てください。)

ゲーム識別子でキー設定された質問識別子のリストのようなものを扱っていて、回答の永続性サポートが必要な場合は、RDBMSよりも優れたオプションがあります。手始めに、Redisを見てください。

于 2012-11-08T15:09:02.100 に答える