繁体   English   中英

大量数据 - 发送它们的最佳方式是什么?

[英]Large amount of data - what is the best way to send them?

我们有这种情况:

包含这些数据所需的所需数据和客户端组件的服务器。

在服务器上存储了两种类型的数据: - 一些信息 - 基本上只是几个字符串 - 二进制数据

我们在获取二进制数据时遇到问题。 双方都是用Java 5编写的,所以我们有两种方式....

由于速度,内存等原因,Web Service不是最佳解决方案......

那么,你更喜欢什么?

如果可能,我想错过低级插座连接...

提前致谢

维特克

我认为执行大量数据的唯一方法是使用原始套接字访问。

您将使用大多数其他方法在大文件上遇到Out of Memory问题。

套接字处理在Java中非常简单,它可以让您在不将整个文件加载到内存中的情况下流式传输数据(这是在没有自己缓冲的情况下在幕后发生的事情)。

使用这种策略,我设法建立了一个系统,允许传输任意大的文件(我使用7+ GB DVD映像来测试系统),而不会遇到内存问题。

查看W3C标准MTOM,将二进制数据作为SOAP服务的一部分进行传输。 它是高效的,因为它作为二进制发送,也可以作为缓冲块发送。 它还将与其他客户或提供商互操作:

怎么做MTOM Interop

服务器端 - 使用SOAP发送附件

你可能想看一下protobuf ,这是google用来交换数据的库。 它非常有效和可扩展。 在旁注中,永远不要低估装满1TB硬盘的旅行车的带宽!

我已经尝试将二进制数据转换为Base64,然后通过SOAP调用发送它,它对我有用。 我不知道这是否算作一个Web服务,但如果确实如此,那么你几乎都会遇到套接字问题。

一些选择:

  • 您可以使用RMI来隐藏套接字级别的东西,也许gzip数据......但如果连接失败,它将不会为您恢复。 可能也会遇到内存问题。

  • 只使用二进制mime类型HTTP数据(也可能在Web服务器上配置gzip)。 简历上的类似问题。

  • 产生类似wget的东西(我想这可以做简历)

  • 如果客户端已经拥有数据(其先前版本),则rsync将仅复制更改

旧的,经济实惠且强大的FTP怎么样? 例如,您可以轻松地在服务器端组件中嵌入FTP服务器,然后编写FTP客户端代码。 FTP就是为此而生的(文件传输协议,不是吗?),而带有附件的SOAP并没有考虑到那些东西而设计得非常糟糕。 例如,您可以查看:

http://mina.apache.org/ftpserver/

但是还有其他实现,Apache Mina是我能记得的第一个。

祝你好运和问候

sneakernet是一个选择吗? :P

RMI以其易用性和内存泄漏而闻名。 被警告。 根据我们谈论的数据量,sneakernet和套接字都是不错的选择。

GridFTP视为传输层。 另见这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM