私はC#で書いた解決策を使用して、SQL ServerからMongoDBに大量のデータを転送したい(約8000万レコード)。 一度に200,000レコードを転送したいのですが、私の問題は既に転送されているものを追跡しています。次のように通常、私はそれを行うだろう:大きなデータを新しいデータベースに移行する
Gather IDs from destination to exclude from source scope
Read from source (Excluding IDs already in destination)
Write to destination
Repeat
問題は、私はソース選択、例えばからそれらを排除するために、先に存在するすべてのIDを含むC#で文字列を構築することです。
select * from source_table where id not in (<My large list of IDs>)
今、あなたは、私はすでに600件の000+レコードを挿入し、すべてのIDを持つ文字列を作成したときに、ここで何が起こるか想像することができ、それが大きくなり、さらに物事を遅くするので、私は探していますカーソルのように一度に200 000個のレコードを繰り返し処理する方法ですが、私はこのようなことは一度もしていないので、ここに来てアドバイスを探しています。
ただ、参考として、私は一度にすべてのデータを選択する、またはフィルタリングすることなく、大量のデータを反復処理する方法を知りたい、だから、基本的に
SqlConnection conn = new SqlConnection(myConnStr);
conn.Open();
SqlCommand cmd = new SqlCommand("select * from mytable where id not in ("+bigListOfIDs+")", conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
//Populate objects for insertion into MongoDB
}
}
を次のように私は読みくださいデータは大きな文字列を使用します。どんな助けもありがとう。
カーソルのような方法や非同期の方法を使ってN個のレコードを一度に繰り返し処理する方法があることを期待していましたが、多くのグーグルが手を出した後、空の手で出てきました。最後に使用したIDを別のテーブルに格納する方法を解決する必要があります。ご協力いただきありがとうございます。 – Anomaly