MMOゲームの人気の傾向は誰もが知っています。プレイヤー同士がライブで対峙する場所。ただし、ゲームプレイ中は、以下に示すように、SQL の挿入とクエリの膨大なフローが発生します。
- 12 分または 1 時間あたり 500 プレーヤーごとに平均 / 最小 100 のオンライン トーナメントがあります。
- Game Progress テーブルでは、各プレイヤーの動きを保存しています
- 4 プレーヤーの 12 ラウンド トーナメントには 48 のレコードが存在する可能性があります
- プラス呪文または特別なアイテムのほぼ同じ数
- トーナメントあたり合計 96 または 1 時間あたり 48000 レコード挿入 (500 プレーヤー/時間)
以前の質問 ( MMO ゲームのパフォーマンスを改善する) への回答として、スキーマを変更し、データベースに直接書き込まないようにしました。
代わりに、すべての値を a に累積しますDataTable
。このプロセスはDataTable
、10 万行を超える行 (場合によっては 1 時間以内の場合もあります) があるたびに、csv 形式でテキスト ファイルに書き込みます。フォルダーを頻繁にスキャンして CSV ファイルを探し、利用可能な CSV ファイルを読み取り、その情報をサーバー データベースに保存する別のバックグラウンド アプリケーション。
質問
ゲームアプリケーションに存在するデータテーブルに別のアプリケーションから直接アクセスできますか (データテーブルを読み取り、読み取ったレコードをクリアします)。そのため、ディスクからの書き込みと読み取りの代わりに、メモリから直接読み取りと書き込みを行います。
DataTable よりも高速で、大きなデータを保持でき、並べ替えと更新の操作がかなり高速な方法はありますか。ユーザー ID を頻繁にスキャンする必要があるため、ゲームのステータスを更新します (ほぼ挿入ごとに)。キャッシュ ユーティリティ、高速スキャン/検索アルゴリズム、または CollectionModel の場合もあります。現在、foreach ループを使用して a 内のすべてのレコードを
DataTable
調べ、ユーザーが存在する場合は行を更新します。そうでない場合は、新しい行を作成します。クラスとクラスを使用してみSortedList
ましたが、労力が 2 倍になるだけでなく、メモリ使用量が大幅に増加し、ゲーム全体のパフォーマンスが大幅に低下します。
ありがとう
アービンド