2011-11-16 10 views
0

Derby In-Memory DBを使用しています。私は最初にcsvファイルからいくつかのデータ読み込みを実行する必要があります。今のところ、すべてのcsvファイルをテーブルにロードするのに約25秒かかります。私は時間が短縮されることを願っています。データファイルのために実際にはあまり大きくはありません。Derbyを使用してバルクデータロードのパフォーマンスを向上させるにはどうすればよいですか?

私が行ったことは、derbyの組み込みプロシージャを使用していることです。

{CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (?,?,?,',','"','UTF-8',1)} or 
{CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (?,?,?,',','"','UTF-8',0)} 

唯一の特別なことは、あるテーブルのデータが多くの小さなcsvファイルに分割されることがあることです。だから私はそれらを一つずつロードする必要があります。そして私がそれらを一緒に組み合わせることができるかどうかテストしました、それは16秒しかかかりません。ただし、ユーザーが必要とするため、この機能を削除することはできません。

データを読み込む時間を短縮するためにできることはありますか?ログを無効にするか、ユーザ定義の関数/プロシージャを書くか、他の曲を書くことができますか?アドバイスは大丈夫です。

ありがとうございます!

答えて

1

Derbyの代わりにH2を使用し、CSVREAD機能を使用してください。それでも遅すぎる場合は、fast importの最適化を参照するか、CSV toolを直接(データベースを使用せずに)使用してください。免責事項:私はH2のCSVサポートを書いた。

+0

私もそれを考慮しています。 H2は驚くほど速いです。 :) –

+0

1つの質問、H2は、正しい形式に日付型の列をエクスポートするのを世話しますか?それはtoString()を使用してエクスポートすることを覚えています。 –

+0

私は質問が輸出ではなく輸入ではないと思います。 H2の場合は、 'CREATE TABLE ..(columnList)AS SELECT ... FROM CSVREAD'を使用してください。そうすれば、正しいデータ型が得られます。 –

関連する問題