У меня есть данные, которые передаются с диска и обрабатываются в памяти приложением 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, которая делает это, я бы хотел знать об этом.
Я ищу самое быстрое решение. Память не является проблемой.
Спасибо!