18

我見過以許多不同方式託管的SaaS應用程序。跨多個數據庫分割功能和模塊是一個好主意嗎?例如,將諸如User表之類的東西放在一個數據庫中,並在另一個數據庫中放置特定於/應用程序的特定表格,或者在另一個數據庫中放置其他共享表格?SaaS數據庫設計 - 多個數據庫?分裂?

+0

可能重複[爲每個客戶端使用單個數據庫有什麼優點?](http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single-數據庫爲每個客戶端) – givanse 2014-02-06 08:42:29

回答

29

從一個數據庫開始。當項目需要時分割數據/功能。

這裏是我們可以從LinkedIn學習:

  • 單個數據庫無法正常工作
  • 參照完整性將是不可能的
  • 任何數據丟失是一個問題
  • 緩存是就算不錯了當它適度有效
  • 千萬不要低估增長軌跡

來源:

LinkedIn architecture

LinkedIn communication architecture

0

問問自己:通過將所有內容移動到不同的數據庫中,你會獲得什麼?

管理方面的很多痛苦是我的猜測。我個人更熱衷於將所有內容都放在單個數據庫中,並且如果遇到以後單個數據庫無法解決的問題,請將數據遷移到多個數據庫中。

+3

性能和可伸縮性呢? – Vyrotek 2008-09-16 03:26:44

3

擁有單個數據庫最適合數據完整性,因爲這樣您就可以使用外鍵。如果將數據分成多個數據庫,則不能擁有此內置數據完整性。如果您的數據不相關,這不是問題,但如果它是相關的,則您的一個數據庫可能包含與另一個數據庫不一致的數據。在這種情況下,您需要編寫一些代碼來定期掃描數據庫中的不一致數據,以便適當地處理它。

但是,如果您的站點/應用程序需要高度可擴展性(例如Internet規模),則可能需要多個數據庫。例如,您可以將每個數據庫託管在不同的物理服務器上。

3

按功能分割數據庫可能不是一個好主意,除非您看到有力證據表明需要。通常,您可能需要將兩個數據庫更新爲單個事務的一部分 - 而分佈式事務則更難以使用。此外,如果數據庫需要拆分,您可能會使用分片。

12

High Scalability是一個用於擴展SaaS應用程序的好博客。如前所述,按照您的建議在數據庫之間拆分表通常是一個糟糕的主意。但是類似的概念是分片,在那裏你保持相同的(或類似的)模式,但將數據分割到多個服務器上。例如,用戶1-5000在server1上,用戶5000-10000在server2上。根據您的應用程序使用的查詢,它可以是一種有效的擴展方法。

8

對於SaaS應用程序,您可以爲多個租戶使用多個數據庫,但通常不會以模塊方式進行拆分。

這是我在SaaS應用程序設計中看到的最常見的模型。您的基礎架構將爲您添加到應用程序的每個租戶進行復制。

0

保持它的自然設計(非規範化高達需要,規範的少的要求)。將數據庫模型拆分爲模塊,並通過使用服務(擁有數據)來維護數據,從而牢記面向服務的原則。

1

有多種方式可以實現它,但多租戶問題比數據模型更深入。我討厭插入產品,但是我的工作公司Apprenda檢查了SaaSGrid。我們是一個雲操作系統,允許您編寫自動注入單租戶SOA應用程序(隨意使用NHibernate進行數據訪問)多租賃到您的應用程序。當你發佈你的應用程序時,你可以做一些事情,比如選擇一個數據模型(獨立數據庫或共享),SaaSGrid會相應地部署,你的應用程序將在沒有任何代碼變化的情況下運行 - 只需編寫代碼就好像它是單個租戶一樣!

1

爲什麼要使用數據庫呢?

我認爲使用像Hadoop,Voldemort(由LinkedIn開發和使用的project-voldemort.com)這樣的分佈式存儲系統是個好主意。

我認爲db適用於金錢操作等敏感數據,但對於其他所有可以使用分佈式存儲的數據。