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

Posted

技术标签:

【中文标题】无法将 250MB 字节数组插入远程 SQL Server【英文标题】:Unable to insert 250MB byte array onto remote SQL Server 【发布时间】:2012-03-21 05:01:36 【问题描述】:

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

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

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

为了检查我是否真的能够从本地机器访问远程数据库并将数据插入到远程数据库中,我编写了一个简单的应用程序来将一个整数插入到表中 - pass

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

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

【问题讨论】:

如果您正在考虑远程上传大块数据,我肯定会考虑对上传进行分块并使其可恢复...希望您的会话在混乱的互联网连接中长时间保持不间断是乐观 【参考方案1】:

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

您是否可以将 250MB 数组(我怀疑它是文件/图像/视频/某些备份)作为文件(普通文件上传 ..ajax 或普通 POST)上传到远程 Amazon 实例文件系统,以及然后在同一台机器上运行一个守护进程,然后在本地磁盘上获取文件并将其推送到 SQL 实例中。

优势。

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

我会尝试提供更适合您直接方法的更好解决方案。

【讨论】:

您可以查看 SQL Server 的备用 JDBC 驱动程序。微软提供的默认驱动程序绝对不是最佳选择。看看这里***.com/questions/6943553/… 这是一个很好的建议 - 将尝试一下。尽管有多个开发人员访问数据库,但这可能是开销。【参考方案2】:

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

考虑如何优化文件到 EC2 实例的传输。以同步方式发送 250mb 文件绝不是一个好方法。这总会引起问题。上传文件和将其插入数据库是两件不同的事情。不要混合它们,

你应该做的事情:

    尽可能压缩文件,然后发送。和 使用 ftp 或 http(但性能相同)并将文件上传到服务器。然后对服务器上的那个文件做任何你想做的事情。 (就像将其插入数据库一样)

    通过网络传输大文件的另一种超级棒的方式是:将文件分成块(压缩后),异步发送(例如:python 中的 twister 或 java 中的 nio),最后将所有文件合并到服务器端(使用校验和来验证文件的完整性)。

【讨论】:

以上是关于无法将 250MB 字节数组插入远程 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

为什么刚买来250G的硬盘插到电脑里只有大约232G?

使用语句在表中插入java字节数组

sql sp2RPT_CES_ObtenerReporteSIE - Se corrige origen dedatossegúnpeticióndeCalidad

Google Cloud Sql 二代 Utf8Mb4 编码

如何通过移位将字节插入数组?

使用 SQL*Plus 生成和插入大型 CLOB (1 MB)