2012-08-22 302 views
1

我正在尋找更清晰的方式來在對源代碼和基礎結構影響最小的情況下水平擴展我的Java應用程序。這裏是我的問題:我目前在本地文件系統中保存資源,所以我需要一致在我所有的新處理處理節點之間共享這些文件。 我知道ehcache和terractora服務器陣列的存在,但本地可重新啓動(持久性保證)僅適用於ehcache企業,我希望儘可能保留商業許可證。 其他替代方案可以是memcached,redis,mongodb(堅持記住),甚至nfs,但我希望那些有經驗使用這些服務作爲存儲服務的人的意見,我還需要澄清一下:需求阻止使用任何聯機雲存儲服務雖然我打開任何可以安裝在我的數據中心當然!文件存儲服務器

+0

您正在複製的資源文件有多大?這些是否需要最終在應用程序的文件系統中進行操作,還是可以使用直接從數據存儲加載的數據? – Stennie

+0

文件通常很小,約1mb。我可以設法直接從數據存儲加載資源,我認爲這不會是一個問題。 –

回答

1

用MongoDB的,你可以利用:

  • replica sets將數據分發到多臺服務器
  • sharding規模寫入(如果適用於數據量並寫入你需要管理)

你有幾個選項來存儲你的二進制文件在MongoDB中:

1)你可以保存fi在MongoDB文檔的一個字段中作爲二進制數據。當前的文檔大小限制(如MongoDB 2.2)爲16Mb,這似乎足以滿足〜1Mb文件的要求。

2)您可以使用GridFS API方便地處理較大的文檔或以較小的塊獲取二進制文件(另請參閱:Java docs for the GridFS class)。

+0

在mongodb中通過選擇gridfs而非二進制文件表示方式會有什麼顯着的性能差異嗎? –

+0

我不知道使用單個二進制字段與GridFS的任何相對性能基準。 [GridFS規範](http://www.mongodb.org/display/DOCS/GridFS+Specification)將文件分割成更小的塊(通常爲256k),這可以在編寫非常大的文件時幫助併發,但確實有一定的開銷重新構建文件。 GridFS實現還負責存儲文件和元數據,因此很容易實現。對於大約1 MB的文件,在單個文檔中處理它們可能會更方便。我會測試兩種方法,看看有什麼合適的。 – Stennie

相關問題