2009-01-02 151 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和套接字都是不錯的選擇。

相關問題