2012-12-21 22 views
3

我們正在評估我們的替代靜態文件存儲(位於多個地理位置)的選項。有關使用NoSQL DB作爲FileStorage的建議,以及優缺點

  • 我們對Microsoft.NET平臺(C#,ASP.NET,WEB API,SQL SERVER)
  • 我們想用來存儲數字資產,主要是BINARY(AI,PSD,JPG,PNG,PDF, XLS,DOC ...)文件在任何NoSQL DB上。
  • 對於圖像文件,它可能包含縮略圖(小尺寸)到原始圖稿(大文件:範圍從300 MB到大於1 GB)。
  • 縮略圖會出現在網頁上,但原始版本將作爲附件提供,可選擇編輯(用戶可以下載原件並使用相應程序進行編輯並更新版本)。
  • 每個縮略圖和原始需要存儲多個版本。
  • 我們不會在第三方平臺(如Amazon S3,Azure)和CDN上託管這些數字資產。
  • 根據用戶系統配置,此數字資產可託管在不同的地理環境中。 (美國用戶可以存儲美國,歐洲或基於ASIA的服務器/ db)。
  • 需要複製每個存儲。

我們正在研究MongoDB。有沒有人可以建議基於上述假設或任何其他選擇的利弊&?

一些MongoDB的研究揭示了...

  • 磁盤空間消耗比原始數據的大小的3倍
  • 可以通過-oplogSize參數
  • 減少空間佔用如果我們嘗試讀取大塊和流到瀏覽器的速度可能比從靜態文件存儲中讀取速度慢6倍。
  • 複製不是雙向的,它可以用作主站和從站。

我已經嘗試從靜態文件系統讀取數字資產,並將其存儲到MongoDB GridFS的默認塊中。將縮略圖和原件存儲到MongoDB有什麼更好的方法?由於縮略圖總是小於16MB,但原始大小可能不超過16MB,因此默認情況下我應該將所有圖像資源存儲在GridFS上?

我可以設想根據內容類型創建不同的數據庫,例如:一個用於PDF,Excel,Word,另一個用於Image。

  • 我們如何在不同的服務器之間進行復制?
  • 我們如何將它存儲在不同地區的不同MongoDB實例之間?

我真的很感激任何輸入。

謝謝。

+1

你的要求是什麼ACID明智?除了NoSQL解決方案之外,您是否調查過使用SQL Server 2008(及更新版本)FILESTREAM? – Lucero

+0

爲什麼你想將文件本身存儲在數據庫中?爲什麼不在S3上存儲文件並將路徑存儲到數據庫?任何特定的原因?將文件存儲在數據中的問題之一是,它使操作變得困難,即:調整大小,即時壓縮它們。 – DarthVader

+0

@Lucero謝謝你的回覆。我們將使用HttpHandler或Web API將來自MongoDB的縮略圖流式傳輸到基於Web的應用程序。所以它應該始終可用。我們確實使用SQL Server 2008R2,但尚未評估是否將其存儲爲BLOB。它如何擴大我們擁有數千個圖像的地方?另外,我們不會使用與數據庫和數字資產相同的服務器,因此我們必須獲得多個sql server許可證,這可能會增加成本。 – Rajul

回答

0

一些MongoDB研究顯示...

磁盤空間的消耗大於原始數據的大小可能通過 參數-oplogSize減少空間佔用3倍,如果我們嘗試讀取 塊和流式傳輸到瀏覽器的速度可能會比 慢6倍,從靜態閱讀它文件存儲。複製不是雙向的 ,它作爲主站和從站。

您是否嘗試過存儲數據或在某處找到某個信息?如果您正在使用數據庫(不管是哪一種)而不是純文件存儲,則總會有開銷。爲什麼?那麼,你有索引和元信息。

mongodb是一個沒有共享強一致的db。因此,您可以將數據寫入一個節點,然後進行復制。但是您可以使用WriteConcerns(http://docs.mongodb.org/manual/core/write-operations/#write-concern)等待,因此請確保您的數據已寫入複製數據庫中的多數節點。通過複製,您可以在不停機的情況下執行滾動升級,而且使用分片進行擴展也非常容易。並使用分片標籤將文檔「釘」到特定的分片。看到這裏:http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/