2009-01-02 96 views
4

我们有这种情况:大量数据 - 发送它们的最佳方式是什么?

一个服务器,它包含这些数据需要的所需数据和客户端组件。

在服务器上存储2种类型的数据: - 一些资料 - 只是一对夫妇的字符串基本上 - 二进制数据

我们有越来越二进制数据的问题。双方都用Java编写的5,所以我们有几种方法....

Web服务是不是因为速度,内存等方面的最佳解决方案......

那么,你会选哪个?

我想错过低水平插座连接,如果可能的...

在此先感谢

维特克

+0

我不知道正确的标签应该是什么使用,但“的”肯定不是其中之一...... – hop 2009-01-02 01:35:47

回答

5

我认为做大量数据的唯一方法将是与原始套接字的访问。

您将使用大多数其他方法在大文件上遇到Out of Memory问题。在Java中,套接字处理非常简单,它可以让你在不将整个文件加载到内存的情况下进行数据流处理(这是在没有你自己的缓冲的情况下在幕后发生的)。

使用此策略,我设法构建了一个允许任意大型文件传输(我使用7+ GB DVD映像测试系统)而不会触及内存问题的系统。

1

我已经试过转换二进制数据为Base64,然后通过发送过来SOAP调用,它适用于我。我不知道这是否是一个Web服务,但如果它确实如此,那么你几乎被套接字困住了。

+0

:它还将与其他客户或供应商互操作对于大型数据,base64效率极低。如果需要Web服务,MTOM可能是更好的选择。 – Lamar 2009-01-02 02:12:18

2

您可能想看看protobuf,这是谷歌用来交换数据的图书馆。它非常高效和可扩展。在旁注中,永远不要低估满载1TB硬盘的旅行车的带宽!

+0

非常真实。然而它遭受“最后一公里”的问题:USB连接将永远传输数据 – 2009-01-02 01:35:02

1

一些选项:

  • 你可以使用RMI将隐藏插座层次的东西对你来说,也许gzip压缩的数据...但如果连接失败,也不会恢复为您服务。可能也会遇到内存问题。

  • 只是HTTP数据与二进制MIME类型(也许再配置web服务器上的gzip)。类似的问题在简历上。

  • 产卵像wget的(我认为这是可以做到的简历)

  • 如果客户端已经拥有的数据(它以前的版本),rsync的将只复制变化

0

那么旧的,价格合理又强大的FTP呢?例如,您可以轻松地在服务器端组件中嵌入FTP服务器,然后编写FTP客户端。 FTP正是为此而诞生的(文件传输协议,不是吗?),而带有附件的SOAP并没有设计考虑到这些东西,并且可以执行得非常糟糕。 例如,你可以看看:

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

但也有其他的实现在那里,阿帕奇米娜只是第一个我记得。

好运&问候

0

sneakernet的一个选项? :P

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

相关问题