我有一些从磁盘流式传输并由Java应用程序在内存中进行处理的数据,最终需要复制到SQL Server中。数据可能相当大(因此需要流媒体),并且可能需要插入多达数十万行。最快的解决方案似乎是使用SQL Server的批量复制功能。但是,我还没有找到任何Java程序可以轻松或几乎快速完成此操作的方法。
以下是我已经调查过的一些方法:
以下是我已经调查过的一些方法:
使用.NET中的SqlBulkCopy类。这非常高效,因为您可以直接从数据源流式传输数据并将其发送到SQL Server。这种方法的问题在于您需要运行.NET。也许可以使用Java到.NET桥来使用此功能。不过,我想知道在运行时之间传递数据的成本。
使用BULK INSERT TSQL语句。问题在于您需要在磁盘上创建格式正确的文件。与JDBC的批量插入相比,我看到了一些小的性能提升。此外,这仅在本地有用。
将文件写入磁盘并使用bcp命令行实用程序。仍然比JDBC批量插入快一点,但并不是那么快。我还失去了使用此方法进行事务的能力。
使用C API。同样,非常高效,但您需要使用C。可以通过JNI使用此功能。如果有一些免费的Java库可以做到这一点,我想知道它们。
我正在寻找最快的解决方案。内存不是问题。
谢谢!