多数の挿入のためにdataContext.submitchanges()を呼び出す頻度はどれくらいですか?

StackOverflow https://stackoverflow.com/questions/3154284

質問

幾つか InsertOnSubmit 電話する前に電話する必要があります SubmitChanges? Webサービスからデータを追加して、一度に1つのレコードを1つずつ返すことができます。 Webサービスの周りのラッパークラスはレコードを公開します IEnumberable 手の込んだチャンキングメカニズムを隠すためのコレクション。

提出する前に蓄積する必要があるインサートの数に関するガイドラインはありますか?

役に立ちましたか?

解決

また、挿入する必要があるデータの種類にも依存します。別のテーブルにさらに多くのレコードを挿入するには、IDが必要な多くのレコードを挿入する必要がある場合があります。

データベースに変更を送信するとIDが割り当てられるため、特定の時間にSubmitchangesを呼び出す必要があります。

これが不要な場合は、一度に1000でそれらを提出するだけです(挿入する必要があるレコードの総数に応じて)。

たぶん、あなたに最適ないくつかの速度テストを行うことができます。ハードウェアに応じて、レコードの量など。

他のヒント

まあ、私は問題なく複数のテーブルにまたがる数十万のレコードでそれをやった。実際、そのような場合のすべてのINSERTONSUBMIT()にSubmitchanges()を呼び出すと、最後にSubmitchanges()を呼び出すだけで、その多くのレコードを数分に挿入するのに時間がかかります。

上で説明した場合、私が持っていた配置は、ヘッダーテーブル、詳細テーブル(ヘッダーにリンク)、およびAtomテーブル(詳細にリンク)を含むテーブルを報告するためのものでした。すべてのヘッダーレコードについて、複数の詳細テーブルがあり、再び複数のAtomレコードによってリンクされます。場合によっては、私は数十億のレコードを挿入することになり、最後に単一のサブミッチャンガン()コールに問題はありませんでしたが、それはすべて非常にうまく機能しました。

一度にバッチ1の1000レコードに対して1つのフィールドに変更を加えるには、一度に1つのレコードが0.0711秒/レコードを取る0.1989秒/記録とバッチが必要です。したがって、私のテストではバッチは約3倍です。バッチサイズの効率は異なることに注意してください。

一度にサブミッチング()1レコード
Records Sec Sec/Record
1000 198.95 0.1989

batch submitchanges()
Records Sec Sec/Record%変更
100 12.20 0.1220 133%
200 18.33 0.0916 122%
500 37.59 0.0752 106%
1,000 71.07 0.0711 103%
2,000 138.64 0.0693 102%
10,000 680.36 0.0680

実際には、1回の「ガイドライン」はありません。 IDは、効率のために、10kではなく束を集めたいと言うでしょうが、100と言いますか?これにより、DBクエリが大幅に削減され、トランザクションを構築している間、RAMをローカルでキャッシュしすぎないようにします。

おそらく、いくつかの異なる値でテストし、パフォーマンス(メモリと速度)をプロファイルして、ハードウェアに最適なソリューションを見つける必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top