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