2012-09-11 49 views
5

我建立在Node.js的SaaS應用程序,並且希望使用MongoDB的與貓鼬ODM的數據庫。我需要支持多個客戶,數百到數千(有希望),而且每個客戶的數據之間沒有交互。多種數據庫的SaaS

我的想法是要爲每個客戶創建並保持一個全球信息單「主」數據庫的新數據庫。例如,應用程序會有一個登錄頁面,因此我想將所有用戶/密碼信息存儲在「主數據庫」中,但是所有用戶的配置文件信息都存儲在其所屬的客戶數據庫中。我覺得這是一個很好的設計,因爲它可以完全隔離每個客戶的數據,並且可以輕鬆地單獨備份/恢復客戶。

我關心的是關於連接到多個數據庫從node.js中對性能的影響有沒有人知道這將如何影響該應用程序,或一般有關架構的任何意見?

獎金問:你知道這樣的反向並存儲在一個數據庫中的所有客戶數據的任何審計的意義,具有客戶ID分開,SaaS解決方案?

回答

5

不是一個簡單的答案,因爲在很大程度上取決於你的應用程序架構,使用和查詢模式,客戶之間的分配(即:將使用水平不相上下跨客戶端,或者您有客戶端的10%使用90%的資源),你可以花多少錢在代碼和操作管理以及其他一系列問題上。以下是需要考慮的一些事項:

1)擁有一個數據庫將使您的操作管理更容易,所需的計算資源更少,並且可能允許您更好地擴展,但編碼訪問層會更困難,而且您確實由於明顯的原因,很好地構建您的安全層。您還將在客戶端/網絡服務器端消耗更少的資源,因爲會有更少的連接。

有兩種流行的架構選項接近一個整體的數據庫時:

  • 你可以把所有類似的數據在一個集合(即:爲所有帳戶配置文件進入同一個集合),並給每個文件一個clientId鍵來識別哪些數據屬於哪個帳戶。這可以爲您提供最好的選擇(取決於您的架構體系結構),以最少的計算資源進行擴展。
  • 另一種選擇是通過收集客戶數據分離 - 每個客戶端將與客戶端ID前綴標識的數據庫中有自己的集合(即:clientid_userprofiles)。

2)數據庫每個客戶端選項會給你更多的操作管理頭痛和成本更多,因爲你將需要更多的計算資源。另一方面,由於代碼更容易編寫,因此編碼成本應該更低。它還可以讓您更好地在重量級用戶和輕量級用戶之間分配資源。例如,您可以將大量使用客戶端轉移到功能更強大的機器上,並根據每個客戶提供分片。 3)您可以提供兩種選擇的組合 - 專門用於高端用戶(支付更多費用的帳戶)的數據庫,然後是低端客戶端和測試/免費賬戶的共享數據庫,其數據由收集分隔。

請注意,如果您執行了許多數據庫路由,則應該查看--smallfiles啓動選項。這可以幫助你解決很多人設置「測試賬戶」的問題,但是他們對此沒有太多的瞭解。

無論如何,希望上述給你思考。在https://groups.google.com/forum/?fromgroups#!searchin/mongodb-user/multitenant上進行搜索,因爲Mongo論壇已經就此問題進行了多次討論。

至於審計影響,取決於您需要遵守的審計合規性級別。如果您預計財富1000客戶,您的合規要求將遠高於(如果您的客戶是可能從未聽說過SAS70的創業公司,那麼您的合規要求會更高(並且成本更高 - 想想10美元到100美元的數千美元)等。答案還取決於您存儲的數據類型 - 是用戶財務數據,還是僅僅是用戶論壇?基本上,如果將來有必要通過大型公司的安全審計,那麼千萬不要想到共享數據庫方法。