无法将250MB字节数组插入到远程SQL Server上

问题描述:

我正在生成大小约为250MB的字节数组。然后使用Java应用程序中的标准JDBC代码将其插入到远程Microsoft SQL Server中的表中。无法将250MB字节数组插入到远程SQL Server上

我的第一个设置 - 在一个Amazon EC2实例上运行的应用程序,运行在单独的Amazon EC2实例上的Microsoft SQL Server。在这种情况下,INSERT语句有效 - 通过

我的第二个设置 - 在我的笔记本电脑上本地运行的应用程序,托管在Amazon EC2实例上的数据库。这里的连接是正确的,但在线上
pstmt.executeQuery(1,byteArray);
即使在说了半个小时之后程序仍然运行而不终止 - 失败

要检查,我居然能够从我的本地机器*问和数据插入到远程数据库,我写了一个简单的应用程序中插入一个整数到表 -

我怀疑由于我没有真正快速的互联网连接,我的数据上传失败。无论如何加快从JDBC到远程SQL Server数据库的数据传输。

我曾考虑增加SQL Server上的数据包大小 - 但我不确定这是否正确,因为它在使用另一个Amazon EC2实例运行相同的应用程序时起作用 - 仅在从本地应用程序的实例。为团队中的每个开发人员运行Amazon EC2实例都是一个昂贵的建议。

+0

如果您正在远程上传大块数据,我肯定会考虑分块上传并使其可恢复......期待您的会话​​持续不间断很长一段时间,凌乱的互联网连接是乐观的 – 2012-03-23 05:13:25

您的问题是网络延迟,而不是数据库本身。

想一想如何优化将文件传输到EC2实例。以同步方式发送一个250MB文件永远不是一个好方法。这总是会导致问题。上传文件并将其插入数据库是两件不同的事情。不要混合使用它们,

件事你应该做的:

  1. 压缩文件就像你可以,然后将其发送。AND
  2. 使用ftp或http(虽然性能相同)并将文件上传到服务器。然后在服务器上用该文件做任何你想做的事情。 (喜欢它插入到数据库)

OR

  1. 传输大文件在网络上是其他超级真棒方式:分割成块的文件(压缩之后),异步发送他们(例如:在python中的twister或java中的nio)并最终合并服务器端的所有文件(使用校验和来验证文件的完整性)。

首先想到这里。我不建议尝试通过远程连接直接将大量数据推送到SQL Server中。一个快速的建议。

是否有可能将250MB阵列(我怀疑它的文件/图像/视频/某些备份)作为文件(普通文件上传..ajax或普通POST)上载到远程Amazon Instance文件系统上,然后在同一台机器上运行守护进程,然后在本地磁盘上拾取文件并将其推入SQL实例。

优点。

  1. 文件上传肯定会更快。
  2. 不依赖于JDBC适配器来保持活动并可靠地上载文件。

我会试着回来一个更适合您的直接方法的更好的解决方案。

+0

您可以看看用于SQL Server的备用JDBC驱动程序。微软提供的驱动程序绝对不是最好的选择。看看这里http://*.com/questions/6943553/list-of-jdbc-drivers-for-sql-server-2008-comparison – 2012-03-21 06:40:02

+0

这是一个很好的建议 - 将尝试一下。尽管有多个开发人员访问数据库,但这可能是一个开销。 – Suchintya 2012-03-22 06:31:45