2010-12-14 2 views
2

Мы должны вставить 2 миллиона записей на несколько таблиц, и прямо сейчас мы записываем файл CSV и используем импорт db2 для загрузки в базу данных.Spring JDBCTemplate vs Plain JDBC для вставки большого количества записей

Мы хотели изменить эту логику на какой-то JDBC. Рассматривая несколько вариантов, меня путают с шаблоном Spring JDBC и простым JDBC.

Скажем, я хотел вставить 1 миллион записей в 10 таблиц, каждый из которых будет иметь 100 тысяч, и все это простые заявления JDBC (не подготовленные заявления, потому что я не знаю, с какой таблицей я столкнулся в во время выполнения).

Независимо от того, какую систему мы выбрали, вам потребуется обработать вложение до 15 миллионов записей для запроса пика.

Какая структура будет лучше?

+1

Как это изменилось для вас? –

ответ

2

Если вы уже используете Spring, вы также можете использовать JdbcTemplate. Это упрощает работу, и в некоторых простых случаях вам не нужно напрямую использовать API JDBC. По сути, JdbcTemplate - очень тонкая обертка вокруг JDBC, которая удаляет часть вашего раздражающего кода котельной.

+0

Но после изучения этого http://forum.springsource.org/archive/index.php/t-59970.html Мне кажется, что весна jdbc медленная ... – sanumala

+1

@sanumala: Я не могу сказать, что когда-либо показало, что это особенно медленно, но почему бы не попробовать его и посмотреть, подходит ли он вам с точки зрения производительности? Преждевременная оптимизация - это зло, и все такое. – GaryF

+1

@sanumala: Вы чувствуете, что это медленно, основываясь на 2-летнем стороннем мнении? – skaffman

2

Как сказал скаффман, если вы уже используете Spring, то ваш выбор, вероятно, JdbcTemplate. В частности, вы можете посмотреть на метод batchUpdate(). Here is a pretty good example of how it works. Я использовал его, чтобы вставить пару сотен тысяч строк с большим успехом.

+0

I использовали пакетное обновление в моих приложениях, но это своего рода differnt requiremnet, я пишу весеннюю логику, посмотрим, как это работает ... – sanumala

5

Если вы хотите переместить много данных, то использование JDBC (или любого здания библиотеки поверх JDBC) может быть плохим выбором по сравнению с использованием инструментов массового копирования (например, db2import). JDBC будет порядков медленнее, потому что

  • JDBC очень болтливый протокола и

  • обычно объемные инструменты копирования расслабить ограничения в процессе копирования.

Разница во времени может быть предельной: то, что берет инструмент массовой копии 10 минут, может занять часы, используя JDBC. Вы захотите создать прототип и сделать некоторые тайминги и быть уверенными в том, какую производительность вы получите, прежде чем совершить что-то подобное.

0

Рассмотрите JdbcSession от jcabi-jdbc. Это так просто, как JDBC должно быть, например, (вставив миллион записей):

JdbcSession session = new JdbcSession(source); 
for (int i = 0; i < 1000000; ++i) { 
    session.sql("INSERT INTO foo (number) VALUES (?)") 
    .set(i) 
    .insert(new VoidHandler()); 
} 

Вот и все.

Смежные вопросы