2017-05-12 49 views
1

私はJava、Spring、PostgreSQLでアプリケーションを開発しています。私はデータベース層としてSpring-JDBCを使用しています。アプリケーション(Java)から一時テーブルにデータをインポートする最も速い方法は何ですか?

私のJavaアプリケーションでは、約10.000行が一時テーブルに挿入する必要があります。それらをインポートする最も速い方法は何ですか?

は、私はすでに試した:

create temporary table my_table on commit drop; 

with data as (values (...), (...), ...) -- all 10.000 rows enumerated 
insert into my_table select * from data; 

しかし、クエリが解析には大きすぎるとなるため、これは失敗します。

小さいバッチを送信するだけでいいですか、データをデータベースにストリーミングするより賢明な方法がありますか?私がやっている何

更新

をデータベースでは、との表は、 '外部エンティティ'、のは言わせ、そこにあります。数時間ごとに、ActiveMQブローカを介して最新のエンティティを更新します。このセットは私のデータベースにある必要があります。私は、次の操作を行います。

  • 挿入一時テーブルに実際のテーブルに
  • 更新変更されたエンティティを
  • は、実際のテーブルに一時テーブルから新しいエンティティをコピー
  • は、実際のテーブルから古いエンティティを削除

私は実際のテーブルを単純に切り捨てて、実際のテーブルに直接挿入することはできません。なぜなら、そのテーブルの外部制約とそのテーブルのトリガのためです。言い換えれば、私は実際の変化を反映しているだけです。

+0

@Marvinを置くための最速の方法だろう、私は私の記述に以下を追加します。 – Kwarteeuw

+0

一方、これはおそらく役立ちます:https://stackoverflow.com/questions/15311042/different-ways-of-performing-bulk-insert-into-database-from-a-java-application?rq=1 – Marvin

+0

メモリ内の「外部エンティティ」、例えば新しいエントリを実際のテーブルに直接追加するだけですか? – Marvin

答えて

関連する問題