1

2 人用のゲームの場合、更新されたデータを 30 秒ごとにプレーヤーに送信する必要があります。

データを選択する必要があるテーブル(理想的には4つのテーブル)があり、ログインするとユーザーに送信されます。マルチプレーヤーの対話型ゲームであるため、データは 30 ~ 60 秒ごとに同期する必要があります。

私の問題は、30〜60秒ごとに実行する非常に重いクエリがあることです。したがって、理想的には、同期中に更新された新しい行のみをプレーヤーに送信する必要があります (これは、iPhone/Android ゲームのフロントエンド要件でもあり、アプリはすべての同期操作中にデータ全体を必要としません)。

私はMySQLを調べました:2つの結果セットの違いで、 SQLを介して更新された/新しいレコードのみを取得することを望んでいますが、問題は、最後のクエリの結果をどのように保存するかです。

最初の結果をセッションに保存しても (おそらく推奨されません)、新しい行が挿入または更新されるとすぐに、そのレコードは役に立たなくなります。セッション レコードを再度更新すると、サーバーに大きな負荷がかかることは間違いありません。

誰かがこの要件を達成するための最良の方法を提案できますか; 詳細な解決策ではありません。ヒント/リンクだけで十分です。

4

2 に答える 2

2

すべてにタイムスタンプを付けることはできませんか?

テーブルのすべての行に「last_updated」のようなタイムスタンプを付けます

クエリで、クエリが最後に実行されたときより前のlast_updated(または、クライアントがサーバーを最後に呼び出したときに取得した最新のlast_updated)を含むすべてのエントリを除外します。

于 2012-11-05T13:37:15.603 に答える
2

基本的に、これはそれほど難しいことではありません。ステッププランをご紹介します。

  1. これを行う各テーブルに日時フィールドを追加します
  2. 各更新クエリで、このフィールドをNOW()
  3. アプリケーションがすべてのリクエストに最終更新時刻を追加していることを確認してください
  4. サーバーに更新の時間を追加して、アプリに送信します(更新された行も送信します)
于 2012-11-05T13:38:44.527 に答える