Какой самый эффективный способ массового копирования на SQL Server с Java ?

У меня есть данные, которые передаются с диска и обрабатываются в памяти приложением Java, и их, наконец, нужно скопировать в SQL Server. Данные могут быть довольно большими (отсюда и потоковая передача), и для их вставки может потребоваться до нескольких 100 000 строк. Кажется, что самым быстрым решением является использование функции массового копирования SQL Server. Однако я не нашел способа, чтобы программы Java могли делать это легко или почти достаточно быстро.

Вот несколько способов, которые я уже исследовал:

  • Использование класса SqlBulkCopy в .NET. Это очень эффективно, поскольку вы можете передавать данные прямо из источника данных прямо на SQL Server. Проблема с этим подходом в том, что вам нужно запустить .NET. Возможно, это можно было бы использовать, используя мост между Java и .NET. Хотя меня интересует стоимость маршалинга данных между средами выполнения.

  • Использование оператора BULK INSERT TSQL. Проблема в том, что вам нужно создать на диске правильно отформатированный файл. Я' мы видели небольшое увеличение производительности по сравнению с пакетной вставкой JDBC с использованием этого. Кроме того, это полезно только локально.

  • Запишите файлы на диск и используйте утилиту командной строки bcp. Все еще немного быстрее, чем пакетная вставка JDBC, но не намного. Я также теряю возможность использовать транзакцию с этим методом.

  • Используйте C API . Опять же, очень эффективно, но вам нужно использовать C. Есть способ использовать это через JNI. Если есть какая-нибудь бесплатная библиотека Java, которая делает это, я бы хотел знать об этом.

Я ищу самое быстрое решение. Память не является проблемой.

Спасибо!

8
задан Tristan St-Cyr 20 September 2010 в 01:18
поделиться