あるデータベース テーブルから数千行を抽出し、別のデータベース テーブルに挿入しています。すべてのレコードをメモリにロードしてから、他のデータベースに挿入したくありません。
そのため、BlockingQueue を使用して、あるスレッドを使用してエクストラクタの結果をロードし、別のスレッドを使用して同時に別のデータベースに挿入しようとしています。Spring JdbcTemplate を使用してデータベースにアクセスしています。
これが私の計画です
public void performExtractionInsertion(JdbcTemplate inboundJdbcTemplate, JdbcTemplate outboundJdbcTemplate){
final BlockingQueue queue = new LinkedBlockingQueue<Transaction>(50);
ExecutorService executor = Executors.newFixedThreadPool(2);
final String SELECT_QUERY = "SELECT acc_number, date, type FROM transactions";
final String INSERT_QUERY = "INSERT INTO analysis(col1, col2, col3) VALUES(?,?,?)";
executor.execute(new Runnable() {
@Override
public void run() {
queue.put(/*IMPLEMENTATION OF EXTRACTOR USING inboundJdbcTemplate*/);
}
});
executor.execute(new Runnable() {
@Override
public void run() {
queue.take(/*IMPLEMENTATION OF INSERTER USING outboundJdbcTemplate*/)
}
});
}
同じ BlockingQueue を使用してメモリ内の行数を制限できるように、EXTRACTOR と INSERTER を実装する方法を教えてください。
これは正しいアプローチですか?jdbcTemplate は引き続き使用できますか? これを行うための最もインテリジェントで便利な方法は何ですか?
みんなありがとう
ところで、トランザクションは、挿入される抽出された要素を保持するオブジェクトのクラスです。