1

現在、タイプがわからない OleDb を使用して、セミコロンで区切られたテキスト ファイルを C# のデータベースにインポートしようとしています (SQL Server、Access、Oracle、MySQL、postgreSQL など)。 Jet テキスト リーダーを使用してデータベースとしてファイルを作成し、準備された挿入ステートメントを作成し、フィールドに入力し、最後にコミットします。それは機能しますが、遅く、数百万行の場合、時間がかかりすぎます。

私の質問: テキスト ファイルを一般的なデータベースにインポートする最善の方法について他に何か考えがある人はいますか? または、より高速なインポートにつながる私のアプローチについてのコメントはありますか?

これはより大きなプロジェクトの一部であるため、サードパーティのライブラリやソフトウェアを使用してこれを行うことはできません

4

5 に答える 5

1

これを試して

http://filehelpers.sourceforge.net

....なぜデータベースをデータセットにロードしたいのですか? 別のデータベースに一意性を追跡させます (そのような単語がある場合)。インポート中に、ログ データベースに存在するかどうかを確認し、存在しない場合は汎用データベースにロードします。

このスレッドへの他の回答を待ってください。より良いアイデアが得られるかもしれません。

于 2008-10-06T20:12:06.820 に答える
1

さて、テキスト ファイルの行をデータベース データセットに取り込むことができました。これまでのところ、この方法の方が速いようです。使った

Dataset.Tables[x].ImportRow(DataRow)

もちろん、今は DataAdapter.Update(Dataset) を機能させるだけです。ネットで調べたら楽しそう…

アップデート

DataAdapter.Update コマンドは行ごとに挿入を行うため、この方法では結果が速くなりません。

于 2008-10-08T18:44:21.083 に答える
1

正確にはエレガントではありませんが、パフォーマンスは向上する可能性があります。

  • ファイル全体を、1 つの列「行」だけを長いテキストとしてテーブルにロードします (現在ローカルで行っていることと同様です)
  • ストアド プロシージャを使用してフィールドを分割し、挿入を作成する
  • サーバー上で挿入を実行する

各行を個別に挿入している間は、それほど多くのネットワーク トラフィックは作成されません。

詳しく説明すると、元の方法ではクライアントでステートメントを生成し、クライアントで実行するため、各回線のネットワーク トラフィックが発生します。私の提案は、サーバー上で (ストアド プロシージャで) ステートメントを生成し、それらをサーバー上で実行することです。その結果、新しいネットワーク トラフィックは発生しません。

「正しい」解決策は、データベース固有のインポート ツール (SQL Loader for Oracle など) を使用することです。パフォーマンスの向上は非常に大きいです。(約 5 分で 2000 万行の巨大なテーブルをロードしています)。しかしもちろん、それはあまり一般的ではありません。

于 2008-10-06T21:07:38.970 に答える
0

一括挿入 dbo.ImportTest FROM 'C:\ImportData.txt' WITH ( FIELDTERMINATOR =',', FIRSTROW = 2 )

于 2009-05-29T12:23:43.830 に答える
-1

あなたの最善の策は、これを行うための既製のアプリケーションを購入することです.

Professional Off The Shelf アプリケーションは、ネイティブ ドライバーを使用し、ヒットするデータソースの種類ごとに微調整します。これは常に隠蔽されているため、彼らがどのように行動するかはわかりません。たとえば、bulkcopy は SQL Server に対して使用されます。Oracle には Data Pump があります。

独自のものを作成する際の問題は、発生する可能性のある各ソース タイプで動作するようにアプリケーションを微調整するためにお金を費やすか、汎用の ODBC / ADO / ドライバーを使用することでパフォーマンスが大幅に低下することです。 .

結局のところ、これを製品から除外するか、必然的に取らざるを得ない遅いアプローチに対処する方がよいでしょう。この場合、すべてに対して単一の挿入ステートメントを使用することを意味します。

では、開発リソースにどれくらいのお金を持っていますか?

于 2008-10-06T20:04:58.393 に答える