0

次の状況で質問があります。

各ユーザーの各ゲームの最高スコアを格納するスコア テーブルが既にあります。およそ 1 人のユーザーが、そのユーザーの 10 ゲームのトップ スコアのスコア テーブルに約 10 行あります。リーダーボードの全体的な上位 10 人のユーザーを取得したい場合、理論的にはスコア テーブルを直接クエリできます。しかし、スコア テーブルにあまりにも多くのユーザーがいて、多くのユーザーが同時にトップ 10 をクエリしている場合、サーバーでのクエリに時間がかかりすぎないか心配です。

ゲームごとに上位 10 人のユーザー全体をキャッシュする別のテーブルを作成して、キャッシュ テーブルのサイズを固定し、ユーザー数が増加してもクエリ時間が増加しないようにする価値はありますか? 1時間ごとのようにキャッシュテーブルを更新できました。

これに関して、異なるデータベースが異なる可能性があるかどうかはわかりません。現在、Parse.comd サーバーが提供する MongoDB を使用しています。後で他のデータベース (MySql など) に転送する可能性があります。

4

2 に答える 2

1

スコアボードのキャッシュを検討することを強くお勧めします。

多くのユーザーと多くのゲームで、トップスコアボードを最新かつ正確に保つことは、時間の経過とともにますます費用がかかることをすでに見てきました.

Mongo を使用して結果を前処理し、別のコレクションに保存することもできますが、Couchbase ( http://www.couchbase.com/ ) や Memcached ( http://memcached.org/ )などの使用を検討することもできます。または Redis ( http://redis.io/ ) を使用してデータをキャッシュします。

スコアをキャッシュするための良いアプローチ...

  1. 特定のゲームのすべてのユーザーのトップ 10 リストについては、キャッシュの有効期限を 1 ~ 5 分に設定します。そのため、5 分後に Mongo クエリが実行され、キャッシュが更新されます。そのデータをどれだけ新鮮にするかを決める必要があります。

  2. ユーザー自身のハイスコアボードの場合...数日間キャッシュします。彼らがゲームを終了し、新しいハイスコアを獲得したときに、積極的に失効させることができます。そうして初めて、あなたはそれをリフレッシュします。

この考え方は、積極的に期限切れにする必要があるデータと、独自に期限切れになる可能性があるデータを特定することです。

また、メモとして、すべてが自然に期限切れになるようにできる限り努力することをお勧めします。管理がはるかに簡単です。

于 2013-05-30T17:28:48.123 に答える
0

それはまさに、作成中のゲームで行うことです。複数のゲーム レベル (簡単、中、難しい) があるため、各レベルの上位 10 を保存する必要があります。parse.com への API 呼び出しの数を減らすために、5 分ごとに実行される解析でクラウド バックグラウンド ジョブを作成して、各レベルの上位 10 のキャッシュ テーブルを作成します。クライアント アプリでは、このキャッシュ テーブル全体を次のように選択します。 1 回の API 呼び出しで 30 レコード。

于 2014-11-05T14:17:39.517 に答える