1

非常に頻繁に変更されるデータと結合された大きな (静的) テーブルを混在させる必要があるアーキテクチャを使用しています。

要点を強調するために、SO Web サイトのユーザー アクセスがユーザー データベースに結合されていると想像してください)。

SELECT * FROM UserProfile INNER JOIN OnlineUser (on UserProfiles.id = OnlineUser.id)

ここで、UserProfile は大きな SQL テーブルに存在し、OnlineUser は Web サーバー上の動的データです。

Putting everything memory takes up a lot of room and putting everything in the database would really tax the server (shudder to think of it). Is there a better way of doing this?

God Jon Skeet says LINQ can't cope with doing a join between an in-memory collection and a database table. He suggests a contains clause or list, both of which wouldn't be appropriate in this case.

Edit:

An in-memory table (PINTABLE) in SQL Server could do this. Since that feature has been deprecated, is it safe to assume SQL server 2008 will figure out to keep it in memory to reduce IO?

4

1 に答える 1

0

実際の結合操作はどこかで行う必要があります。OnlineUserデータを SQL Server に持ってきてそこで結合を実行するか、データをメモリに持ってきてそこで結合UserProfileを実行します。

通常は、データベース サーバーに必要なデータを整理させ、それをメモリに読み込むだけにする方が適切です。この問題を解決する 1 つの方法は、結合操作に必要なデータ フィールドを配置する SQL Server に一時テーブルを作成することです (例ではOnlineUser.id)。

次に、SQL クエリを実行して、必要なデータをメモリに取得します。フィルタリングを高速化するインデックスがあることを確認してください。メモリに取得したら、2 つのコレクションを照合します (たとえば、同じキーで並べ替えてから linqZip演算子を使用します) 。

于 2012-05-28T19:14:44.930 に答える