300万行のcsvファイルがあり、c#を使用してデータベースに保存したいと考えています。csvファイルは「device;date;value」のようになります。
配列に書き込むか、System.Data.DataTableに直接書き込むか。そして、このDataTableをデータベース(SQL-Serverなど)に格納するための最速の方法は何ですか。
300万のinsertintoステートメントを使用して行を保存しようとしましたが、遅すぎました:)
ありがとう
300万行のcsvファイルがあり、c#を使用してデータベースに保存したいと考えています。csvファイルは「device;date;value」のようになります。
配列に書き込むか、System.Data.DataTableに直接書き込むか。そして、このDataTableをデータベース(SQL-Serverなど)に格納するための最速の方法は何ですか。
300万のinsertintoステートメントを使用して行を保存しようとしましたが、遅すぎました:)
ありがとう
DataTable にデータをロードし、SqlBulkCopyを使用して日付を SQL Server のテーブルにコピーできます。
SqlBulkCopy クラスは、SQL Server テーブルにのみデータを書き込むために使用できます。ただし、データ ソースは SQL Server に限定されません。データを DataTable インスタンスに読み込むか、IDataReader インスタンスで読み取ることができる限り、任意のデータ ソースを使用できます。.
BCPはかなり速いと思います。DataTable にデータを取得したら、試すことができます
using (SqlBulkCopy bcp= new SqlBulkCopy(yourConnectionString))
{
BulkCopy.DestinationTableName = "TargetTable";
BulkCopy.WriteToServer(dataTable);
}
最善の方法は、ストリーム リーダーを開き、1 行ずつ行を作成することだと思います。while ループと分割で ReadLine を使用して、異なる部分を見つけます。
300 万回の挿入ステートメントを送信すると、非常に遅くなります。
トランザクションを使用してバッファリングし、たとえば一度に 200 ~ 1000 行を読み込んで (データが小さいほど、一度に読み込める量が多くなります)、これらの行を読み込んだ後、挿入をデータベースに直接コミットします。