2011-08-12 8 views
3

私は、次のテクノロジと言語を使用してMMOサーバーを作成しています。 .Net Framework 4、C#、SQL Server 2008 R2、エンティティデータモデル、LINQMMOサーバー - ユーザー状態データ用のデータベースアクセスの最適化

私が持っている質問は、サーバーのパフォーマンスを向上させるために、ユーザー状態データ用の永続ストレージ(SQL Server)にいつ、どのようにアクセスするかに関するものです。

ユーザーは、MMOサーバーにログオンしたときに、ユーザー接続の存続期間中に高速な読み取り/書き込みアクセスができるようにすべてのユーザーデータをRAMにロードすることが前提でした。ユーザーがサーバーからログオフすると、そのデータはデータベースに保存されます。

エンティティデータモデルが出現し、それに関連付けられたキャッシュが存在するため、このメソッドはもう必要ですか? Context.SaveChanges();これが当てはまる場合は呼び出されますか?

私の質問に関しては、どんな指導も頂けます。おかげさまで

詳細情報: 誰もが.NETエンティティモデルのキャッシュ機能に対処しているとは思いません。 .NETエンティティデータベースモデルはキャッシュを行い、クエリは常に実際のデータベースに対して実行されるのではなく、RAMのデータに対して実行されることを理解しています。私の見地からは、RAMデータアクセスとデータベースアクセスを区別する必要はありません。これは正しい仮定ですか?

+0

このデータベースにアクセスする予定のユーザーは何人ですか?キャッシュを実装しながらアプリケーションを構築してから、後の段階で、どのようなクエリが実行されているかを見て、予測を向上させることをお勧めします。 – Jethro

+0

なぜ人々はコメントで質問に答えますか? –

+2

@John人々は、質問が具体的ではない場合、コメントで「回答」しているか、「これを試してみるべきですが、私は100%肯定的ではありません。その場合、コメント*が正しいことです*。 –

答えて

2

私は専門家ではありませんが、私はあなたのオリジナルデザインにこだわると言います。コンテキストを開いたままにしておき、ユーザーの接続の存続期間を通じてすべての変更を追跡しようとすると、より多くのメモリを占有する可能性があります。私はPOCOを使用して、ログインしているユーザーのオブジェクトをロードし、コンテキストを閉じてから、ユーザーがログオフしたときに新しいコンテキストを開き、オブジェクトを戻してから変更を保存することをお勧めします。

+0

私は、オブジェクトのライフサイクルに私自身のメモリ内データ構造を使用することに決めました。これは私に最高のアクセス速度を与えるでしょう。私は納得のいく時間に、これらを永続的な記憶メカニズムに格納します。 –

1

パフォーマンスが必要な場合は、memcachedでサーバープールを使用することができます。

ユーザーが接続すると、彼についてのすべての情報をキャッシュにロードし、デーモンで定期的にデータベースにフラッシュし、memcacheのデータを更新します。

RAM内のデータのパフォーマンスは、DBよりも常に高くなります。

+0

単一データベースの場合。 memcachedは、読み取り/書き込みキャッシングに関してEntityモデルとどのように異なる働きをしますか? –

関連する問題