2011-11-28 54 views
5

我知道這個問題已經被問了很多次,但我想爲我的案例找到答案。一個數據庫vs很多數據庫

我正在開發一個Web應用程序,它將允許我的客戶管理他們的客戶,兌現,發票,預訂,網站和其他許多事情。我正在使用MySQL和一個包含大約30個表的數據庫。

我希望我的解決方案能夠處理大約100,000個客戶端或更多。我的客戶的需求將會非常不同。每年從一個插入100個插入到另一個每天插入1000個插入。

現在我正在使用一個數據庫(但我仍在開發中),其中每個表都有一個帳戶字段。我創建了一個模型層來訪問數據,該數據自動將帳戶附加到每個查詢(WHERE guid = 1變爲WHERE帳戶= X和guid = 1)。這項工作非常好,而且很容易維護,但我擔心混合客戶數據的事實。請注意,我正在使用增量ID而不是GUID。

我的問題是,我應該繼續這樣做還是應該爲每個客戶端創建一個數據庫?

+3

你*有* 10萬個多名客戶的權利嗎?如果不是的話,你可以通過試圖將其作爲一項要求進行預優化。 –

+0

對你的問題的答案是一個巨大的「這取決於」。沒有關於具體細節的更多細節,沒有什麼可以說的。 –

+0

你想要什麼細節?正如我所說,我仍然在開發,所以我只有很少的測試人員。但是我認爲在向公衆開放我的申請之前應該考慮這種事情。我錯了嗎 ? –

回答

6

您正在查看多租戶數據庫。多租戶解決方案的範圍從每個客戶端的一個數據庫(無共享)到每個客戶端的一行(共享所有內容)。

「無共享」是每個客戶最貴的。大量的客戶意味着大量的服務器。客戶端災難恢復非常簡單直接。 「無共享」減少了意外暴露客戶端數據幾乎爲零的可能性。

「共享一切」是每個客戶最便宜的。每個表都有一列標識一行所屬的客戶端。客戶端災難恢復非常複雜;你必須恢復每個表中的單獨行。 「共享所有內容」是最有可能意外暴露客戶數據的體系結構。

微軟在multi-tenant architecture上有一篇很好的文章。他們的術語是

  • 單獨的數據庫(不共享)
  • 獨立的模式
  • 共享模式(共享一切)
+0

寫得很好,我也試着簡單介紹一下,但是你的回答非常好。 –

+1

感謝您的答案和文章。在我看來,單獨的模式對我來說是最好的選擇,但是據我所知,mysql不允許使用它。所以現在我有3個選擇,保持這樣的狀態,轉移到PostgreSQL(這在我看來是個不錯的選擇),或者使用單獨的數據庫(看起來像一個糟糕的選項,因爲我不希望爲客戶端做特定的開發) 。有什麼建議? –

+1

個人而言,我寧願使用PostgreSQL而不是MySQL。但更多的網絡主機提供MySQL比PostgreSQL。 MySQL數據庫與PostgreSQL模式沒有太大區別。兩者都提供一個命名空間,MySQL可跨跨數據庫查詢跨越模式的PostgreSQL查詢。 PostgreSQL不支持跨兩個數據庫直接查詢。 –

相關問題