2010-02-17 53 views
14

我們的應用程序將通過HTTP提供大量小尺寸縮略圖(大小約6-12KB)。我被要求調查使用NoSQL數據存儲是否是數據存儲的可行解決方案。理想情況下,我們希望我們的數據存儲是錯誤的,並且是分佈式的。將圖像存儲在NoSQL商店

將blob存儲在NoSQL存儲中是一個好主意,哪一個對它有好處?另外,NoSQL對我們的問題來說是一個很好的解決方案,或者我們可以更好地將圖像存儲在文件系統中,並直接從Web服務器提供服務(作爲CDN,目前我們不能選擇)?

回答

9

Mongo DB應該適合你。我還沒有將它用於blob,但這裏是一個來自Mongo DB團隊的漂亮的FLOSS Weekly podcast interview with Michael Dirolf,他在這裏討論了這個用例。

+0

謝謝,我會檢查出 –

+0

你可以跳過該播客的前13分鐘:) –

8

是否將圖像存儲在數據庫或文件系統中有時是「聖戰」類型的辯論之一;每一方都感到他們做事的方式是一個正確的方式。一般來說:

要存儲在數據庫中:

  • 更易於管理的備份/在一次發生在一次複製的一切。
  • 有助於您的數據一致性和完整性。您可以將BLOB字段設置爲不允許NULL,但您無法防止刪除外部文件。 (雖然這不適用於NoSQL,因爲沒有傳統約束)。

要存儲在文件系統中:

  • 一個文件系統是專門設計用於文件。讓它做它的工作。
  • 數據庫通常是應用程序中的瓶頸。無論什麼樣的負載,你都可以脫下它,更好。
  • 更容易在CDN上提供服務(您提到的不適用於您的情況)。

我傾向於在文件系統方面下來,因爲它擴展得更好。但取決於你的項目的規模,任何選擇都可能正常工作。對於NoSQL,差異更不明顯。

+2

問題是關於在分佈式鍵值存儲中存儲blob。文件系統不是容錯或分佈式的,所以沒有真正的比較。 –

+2

根據文件系統的不同,它既可容錯又可分佈 - 請參閱MogileFS,Hadoop DFS和GlusterFS等內容。 –

+1

這些都不是文件系統。 –

3

那麼CDN將是明顯的選擇。既然這樣,我會說你最好的選擇是容錯和負載平衡,這將是你自己的私人數據中心(無論對你來說意味着什麼)在2個或更多的負載平衡器(比如F5)後面。這將是您最簡單的管理系統,您可以獲得儘可能多的硬件預算允許的容錯。您不需要任何新的軟件專業知識,只需XCOPY。

對於真正的容錯性,您將需要地理分散,或者您需要使用反剷挖掘機。

(Gravatars?)

+1

CDN加上一個NoSQL db作爲原點是一個很好的組合。我已經成功地看到了MongoDB(和它的GridFS模塊)幾次完成。 –

2

如果你是一個Python環境,考慮y_serial模塊:​​

在10分鐘內,你將能夠存儲和訪問您的圖片(事實上,任何任意的Python對象,包括網頁) - 壓縮形式; NoSQL的。

3

我正在尋找一個類似的個人項目解決方案,並且遇到了Riak,對我來說,這對於這個問題來說似乎是一個驚人的解決方案。基本上,它將每個文件的指定數量的副本分發給網絡中的服務器。它的設計使得服務器來來去去並不是什麼大不了的事情。離開的服務器上的所有副本分佈在其他服務器中。

使用正確的配置,Riak可以處理整個數據中心崩潰。

哦,它有商業支持。