Mysql

為每個客戶創建數據庫會遇到什麼問題?

  • December 14, 2018

我記得在 stackoverflow 播客中,Fog Creek為Fogbugz使用每個客戶的數據庫。我認為這意味著 Fogbugz On Demand 伺服器有成千上萬個數據庫。

我們剛剛開始開發一個網路應用程序,並且有一個類似的問題需要解決(很多客戶都有自己的孤立數據)。

對於每個客戶使用數據庫,我應該期待什麼問題?我該如何解決它們?

我最初的想法

每個客戶的數據庫的優勢

  • 更簡單的數據庫架構
  • 更簡單的備份 - 您可以依次備份每個客戶,而不會真正影響其他客戶。
  • 可以輕鬆導出給定的客戶數據。
  • 更好的記憶體性能 - 寫入其中一個更活躍的表只會影響執行寫入的單個客戶。
  • 更容易跨硬體擴展。例如,當我們需要從 1 台伺服器升級到 2 台伺服器時,我們只需將一半的客戶轉移到新伺服器上。

缺點

  • MySQL能應付5000個數據庫嗎?性能會爛嗎?
  • 對模式的更改可能很難在所有數據庫中複製出來。我們真的必須為此制定一個自動化計劃,例如對模式進行版本控制和了解如何將數據庫從一個版本轉移到另一個版本的腳本。
  • 做任何我們所有客戶共同的事情可能會很尷尬或不可能
  • 與上述類似,但我們想要對所有客戶執行的任何分析都可能是不可能的。例如,我們應該如何跟踪所有客戶的使用情況?

這種解決方案稱為多租戶設計,其中每個租戶(客戶)都有自己的數據庫。鑑於此,作為單一數據庫的替代方法還有一些其他考慮因素:

  1. 對於單個數據庫,無論如何,每個人都必須使用相同的版本。無法升級某些客戶而不升級其他客戶。如果客戶想要一個尚未準備好廣泛發布的應用程序的修補程序,這可能會出現問題。
  2. 對於單個數據庫,當您進行升級時,每個客戶端都會關閉。如果出現問題,每個客戶都會被搞砸。
  3. 使用單個數據庫,限制資源要困難得多。即,如果一個客戶正在敲擊數據庫,則很難為他們提供與其他所有人分開的更多資源。
  4. 允許使用者託管他們自己的應用程序版本要困難得多。如果您正在建構一個將被大型企業使用的解決方案,那麼這通常是行不通的。他們的 IT 部門希望完全控制對系統的訪問。
  5. 向外擴展數據庫可能比向上擴展數據庫更便宜。即,必須投資於更快的硬體來託管一個數據庫來統治它們,這可能比能夠將客戶擴展到更小、更便宜的數據庫伺服器更昂貴。我不能明確地說出這一點,因為它很大程度上取決於伺服器軟體。如果您堅持使用 MySQL,這可能是正確的,因為許可成本可以忽略不計。但是,例如,如果您升級到 SQL Server,則除非您使用 VPS 環境,否則橫向擴展的成本會高得多,並且縱向擴展與橫向擴展更改的成本效益相比。然而,我可以說,一旦你的數據庫變得非常大,管理就需要更高水平的專業知識。非常大的數據庫需要使用多個文件組並將某些索引推送到不同的主軸以獲得更好的性能。簡而言之,它們會很快變得複雜。

擁有單獨的數據庫確實意味著您必須建構一個更新機制,使數據庫版本與應用程序/站點版本相匹配。但是,單獨的數據庫確實提供了出色的數據隔離,並且 IMO 的託管成本更低。它不是適用於所有場景的解決方案。如果您的系統永遠不會在您的主機之外託管,並且需要在客戶中快速擴展,並且希望所有使用者使用相同版本的應用程序和數據庫模式,那麼使用單個數據庫當然是更好的方法。

引用自:https://dba.stackexchange.com/questions/1043