2011-01-19 5 views
1

リモートデータベースでIEnumerableに存在しないGUIDのセットを取得する必要があります(コンテキストの場合、これはLuceneインデックスからのものです)。潜在的に何百万ものこれらのガイドがあります。.netの2つの大きなセットの違いを取得するには

私は現在、データベースにIEnumerableを挿入して、そこに差があると(挿入がデータベースをハンマーにする)非常に高価になると思っていますが、私は間違っていると証明する準備ができています!

両方のセットをメモリに読み込むことは、データ量のために不可能です。既存のソリューションではこれが行われ、非常に大きなセットでは失敗します。

私は一定のメモリフットプリントを持つように、一度にデータの小さなサブセットで動作できるソリューションを希望します。独自の実装をロールバックする方法について考えていますが、それは自明ではないので、存在する場合は既存のものを使用することは明らかです。

誰かが既存のソリューションの推奨事項を持っている場合は、私はそれらを聞いて感謝します!

+0

SQL Serverで一括挿入を使用できます。また、2つのデータセットを別々にソートし、カーソルのようなシステムを使ってそれらを実行するのは実行不可能ですか? –

+0

結果はリモートテーブルとIEnumerableのサイズと比較して小さくなりますか?言い換えれば、大部分のGUIDは両方のセットに入っていますか? – finnw

+0

finnw - 結果は通常小さいですが、ienumerableが空でデータベースに数百万のエントリが含まれていることがあります。 Lasse - データベースセットをソートするのは簡単ですが、セット全体をメモリーにロードすることなく、ienumerableをソートすることはありません。私たちは現在、ディスクにバッファリングされたコレクションにienumerableをマージソートするソリューションを模索しています。両方のコレクションがソートされると、アプリケーションサーバー上の小さなバッチの違いを一度に実行できます。 –

答えて

0

SqlBulkCopyを使用して、GUID very fast(SQL Serverの場合)をデータベースにロードできます。

関連する問題