2011-06-28 5 views
1

高速バルク挿入のためにまともな方法を提供するORMはありますか?高速バルク挿入のためにまともな方法を提供するORMはありますか?

私が尋ねる理由は、Entityフレームワークがデータを引き出すのは素晴らしいことですが、1秒あたり10行以上の挿入をしたい場合は完全に失敗します。

更新

私は現在のDataTableとT-SQLを使用して、第2の80,000行に挿入していますが、私は軒並みORMを使用することができれば、それはきれいになるだろう。

+0

どのくらい幅が指定されていないため、行/秒は有効ではありません。私は車が長さ単位がどれくらいの長さであるかを知らずに無意味である「1時間あたり100万長さ」に行くことができると言うことができます。 – JNK

+0

各行には25の列があります。ほとんどのテーブルには約30列以上はありません。私は5行または25列の行を挿入しているかどうかにかかわらず、行/秒の測定値が同じであることを発見しました。 – Contango

答えて

1

EFを使用してバックドアすることはできますが、ORMを使用しない場合の一般的な引数の1つはパフォーマンスです。

ORMは、可読性/コード化性を助け、開発時間を短縮するように設計されています。パフォーマンスについて気にするなら、ネイティブSQLを使用してください。

1

いいえ、これはORMの対象ではありません。 ORMはバルクデータ処理ではなくOLTPをサポートします。ジョブには適切なツールを使用します。

(あなたはORMを使う、という場合は、挿入のためのバッチ・サイズを設定することを見てください。)

+0

ありがとうございました、私はORMがもともとOLTPのような環境のために設計されたことを知らなかった。 – Contango

2

私はあなたがORMの毎秒80K行を行うにはお粗末な選択であることを発見するつもりだ怖いです。 LinqからT-SQLへの変換を迂回し、データベースに対して直接行っていない限り、実行できません。しかし、あなたはORMの目的を破っています。それでも、どのように各行がどれほどの幅であるかを定義していないにもかかわらず、毎秒80Kの行を達成する方法を知るのは難しいでしょう。

ORMのようなEFとLinq to SQLは、更新ごとに1つのInsert文を発行します。これは、80K /秒のスループット・レートには役立ちません。 IMOでは、SSISのような一括挿入ツールを使用する必要があります。これはそれがするために設計されたものです。

+0

かなり単純な一括挿入の場合、パフォーマンスを向上させるEFで一度に50と言うストアドプロシージャを作成し、それをフックすることは可能です。しかし、それを超えてあなたは完全に正しいです、これは仕事のための最良のツールではありません。 – Tridus

2

Blimey、4年前に尋ねられましたか?

まあ....

誰もがまだここに答えを探している場合には、ジョン・ワーグナーのInsight.Database(非常に気の利いたマイクロORM)は、SQLのBULK INSERTのをサポートしています。

私は簡単に次の構文を使用して、第2の20万行を書くことができます -

Database.Connection().BulkCopy("TableName", myListOfItemsToInsert); 

その仕事はあなたのためでしょうか?

関連する問題