2010-04-19 95 views
2

我正在編寫基本的多租戶SaaS ECM解決方案的一半。每個客戶端都有自己的數據庫/數據存儲實例,但.Net應用程序是單個實例。這些文檔幾乎是只讀的(即tiff或PDF的圖像存檔)用於基於.Net文檔的數據庫(ECM)的NoSQL DB

到目前爲止,我已經使用MSSQL,但後來開始認爲這可能在NoSQL DB(例如MongoDB,CouchDB)中可行。基本前提是它存儲文件,每個文件都有自己的特定索引。每個租戶可以有多種文檔類型。

例如一個承租人可能有一個發票類型,其中包含客戶ID,發票號碼和發票日期。另一個租戶可能有一個申請表,其中有會員編號,申請編號,會員名稱和申請日期。

到目前爲止,我已經使用了Sharepoint(used?)使用的舊方法,並創建了具有int_field_1,int_field_2,date_field_1,date_field_2等的文檔表格。然後,我有一個「映射」表它存儲客戶特定的索引名稱以及將映射到的數據庫字段。由於文檔數量的限制,我避免了數據庫中的鍵值對模型。

通過這種方式,我們可以在一個表中支持多種文檔類型,並獲得相當高的性能,並允許自定義文檔類型搜索(即用戶選擇文檔類型,然後將其呈現爲列表搜索字段)。

但是,NoSQL數據庫可能會使這變得更簡單,因爲我不需要擔心文檔的非規範化。但是,我剛剛對文檔中的其餘數據感到擔憂。我們在文件中存儲「行動歷史」。這跟蹤視圖,是否有人通過電子郵件發送系統內的文檔以及其他「未來」功能(例如傳真)。

我們可以控制文檔加載過程,所以我們可以操作數據,但它需要將其存入文檔存儲區(例如分配唯一的ID)。用戶不會添加他們自己的文檔,所以我們不應該擔心ACID的合規性,因爲這些文檔是相對靜態的。

所以,我的問題,我想:

  • 是一個的NoSQL數據庫般配
  • 是MongoDB的最好的Asp.Net(我看見烏鴉和速度,但他們仍然有點試用版)
  • 我可以爲每個文檔存儲一個密鑰,然後使用此密鑰將操作歷史存儲在MSSQL DB中?我不需要進行連接,如果一個人點擊文檔上的「查看歷史記錄」就會出現這種情況。
  • 將如何表現兩者之間的比較(NoSQL的DB VS非規範化的「文檔」表)

卷將月產量可達20萬頁新的文件單個租戶。我目前使用SQL DB的擴展計劃涉及在達到某些閾值時將SQL DB移入羣集,然後查看分區和索引結構。

+0

幾乎所有人都告訴我,一旦你開始在數據庫中動態生成字段,你應該轉移到NoSQL數據庫。另外,請注意,你不必爲任何事情使用NoSQL,你總是可以做一個混合解決方案。 – Earlz 2010-04-19 22:56:31

+0

他們的混合解決方案是我的計劃。 我只是對人們對性能,維護以及如何將混合解決方案連接在一起感興趣(例如,在文檔加載時分配一個任意文檔ID字段,然後在SQL表中使用此ID字段?或者如果我應該依賴一個NOSQL生成的密鑰 – Dane 2010-04-19 23:55:22

+0

我不明白這個要求你是說「基本前提是它存儲文件,每個文件都有自己的特定索引」是什麼意思?我們在談論自由文本索引或索引元數據?或者當你說「索引」時,你的意思是「元數據」? – Theo 2010-04-20 11:01:49

回答

1

答:

  1. 對於面向文檔的部分,並有可能對整個事情,一個NoSQL的解決方案應該很好地工作。
  2. 我玩過並且聽說過關於mongodb的好東西,並且可能會首先推薦它用於.net項目。
  3. 對於面向文檔的部分,與sql數據庫相比,性能應該很好。對於規模較小的企業來說,它應該是等價的,但是稍後向外擴展的能力將會是一個巨大的收益。