我們有這種情況:大量數據 - 發送它們的最佳方式是什麼?
一個服務器,它包含這些數據需要的所需數據和客戶端組件。
在服務器上存儲2種類型的數據: - 一些資料 - 只是一對夫婦的字符串基本上 - 二進制數據
我們有越來越二進制數據的問題。雙方都用Java編寫的5,所以我們有幾種方法....
Web服務是不是因爲速度,內存等方面的最佳解決方案......
那麼,你會選哪個?
我想錯過低水平插座連接,如果可能的...
在此先感謝
維特克
我們有這種情況:大量數據 - 發送它們的最佳方式是什麼?
一個服務器,它包含這些數據需要的所需數據和客戶端組件。
在服務器上存儲2種類型的數據: - 一些資料 - 只是一對夫婦的字符串基本上 - 二進制數據
我們有越來越二進制數據的問題。雙方都用Java編寫的5,所以我們有幾種方法....
Web服務是不是因爲速度,內存等方面的最佳解決方案......
那麼,你會選哪個?
我想錯過低水平插座連接,如果可能的...
在此先感謝
維特克
我認爲做大量數據的唯一方法將是與原始套接字的訪問。
您將使用大多數其他方法在大文件上遇到Out of Memory問題。在Java中,套接字處理非常簡單,它可以讓你在不將整個文件加載到內存的情況下進行數據流處理(這是在沒有你自己的緩衝的情況下在幕後發生的)。
使用此策略,我設法構建了一個允許任意大型文件傳輸(我使用7+ GB DVD映像測試系統)而不會觸及內存問題的系統。
我已經試過轉換二進制數據爲Base64,然後通過發送過來SOAP調用,它適用於我。我不知道這是否是一個Web服務,但如果它確實如此,那麼你幾乎被套接字困住了。
:它還將與其他客戶或供應商互操作對於大型數據,base64效率極低。如果需要Web服務,MTOM可能是更好的選擇。 – Lamar 2009-01-02 02:12:18
您可能想看看protobuf,這是谷歌用來交換數據的圖書館。它非常高效和可擴展。在旁註中,永遠不要低估滿載1TB硬盤的旅行車的帶寬!
非常真實。然而它遭受「最後一公里」的問題:USB連接將永遠傳輸數據 – 2009-01-02 01:35:02
一些選項:
你可以使用RMI將隱藏插座層次的東西對你來說,也許gzip壓縮的數據...但如果連接失敗,也不會恢復爲您服務。可能也會遇到內存問題。
只是HTTP數據與二進制MIME類型(也許再配置web服務器上的gzip)。類似的問題在簡歷上。
產卵像wget的(我認爲這是可以做到的簡歷)
如果客戶端已經擁有的數據(它以前的版本),rsync的將只複製變化
那麼舊的,價格合理又強大的FTP呢?例如,您可以輕鬆地在服務器端組件中嵌入FTP服務器,然後編寫FTP客戶端。 FTP正是爲此而誕生的(文件傳輸協議,不是嗎?),而帶有附件的SOAP並沒有設計考慮到這些東西,並且可以執行得非常糟糕。 例如,你可以看看:
http://mina.apache.org/ftpserver/
但也有其他的實現在那裏,阿帕奇米娜只是第一個我記得。
好運&問候
是sneakernet的一個選項? :P
RMI以其易用性和內存泄漏而聞名。被警告。根據我們所談論的數據量,sneakernet和套接字都是不錯的選擇。
考慮將GridFTP作爲您的傳輸層。另見this question。
看看W3C標準MTOM將二進制數據作爲SOAP服務的一部分進行傳輸。它作爲一個二進制文件發送並且也可以作爲緩衝區塊發送是有效的。
我不知道正確的標籤應該是什麼使用,但「的」肯定不是其中之一...... – hop 2009-01-02 01:35:47