我們應該集中數據庫還是每個應用程序都有一個數據庫?
我的公司為不同的客戶開發不同的 Web 應用程序。
對於每個新客戶(或重要項目),我們使用帶有新 MySQL 數據庫的新伺服器。
這樣,應用程序只能訪問其數據庫,並且數據庫直接與項目連結(因為它位於同一伺服器中,因此基本上位於相同的目錄中)。到目前為止,它還沒有顯示出任何特別的問題。
當我們改變我們的方法時,我的同事想知道我們是否可以只使用一個包含所有項目的數據庫並使用一些主/從複製。
我們不同的數據庫有一些共同的表,但由於它們屬於各自的應用程序,因此具有不同的數據。
我對該主題進行了一些研究:
我發現大多數文章建議為每個應用程序使用數據庫,原因如下:
- 每個項目的不同日誌文件和備份
- 更好的可擴展性,因為我們可以檢查每個數據庫的需求
- 從應用程序中使用簡單,無需更改數據或創建視圖等。
我讀到的大部分內容都在 5 到 10 歲之間,所以我不確定其他解決方案的缺點是否仍然相關。
我很難找到有關唯一數據庫解決方案以及在這種情況下使用主/從複製的精確資訊和優勢。
我對這個想法很陌生:我在這裡理解主/從的概念,但我沒有這方面的技術知識。
(使用獨特的數據庫會有好處嗎?)
我們應該有:
- 與應用程序在同一伺服器上的應用程序的數據庫,
- 所有數據庫的單一伺服器,並將應用程序保留在其他主機中?
請注意,我們使用的是 MySQL,但如果我們選擇為每個應用程序使用具有不同模式的單個數據庫,則 PostgreSQL 是一個可能的選擇。
您所閱讀的內容(即使它已經過時)仍然非常相關!
您的問題被稱為多租戶 - 是否這樣做 -共識似乎是“不”,但在這個問題上存在廣泛的意見分歧 - 您可以“部分多租戶” - 即保持幾乎不變的參考表例如,常見的問題 - 但是下面概述的相同問題適用於“部分”多租戶。
我的建議 - 盡可能使用單獨的數據庫!
- 如果一個應用程序出現故障,至少其他應用程序仍然可以使用中央數據庫,如果一個應用程序導致伺服器停機,您就會陷入困境(什麼都不會工作)。
- 此外,對於遷移,如果您需要遷移您的一個應用程序(大小/速度/任何問題 - 或者您希望使用一個應用程序進行雲測試),那麼您將難以分離您的應用程序,而如果您使用單獨的系統,則在該分數上不會有任何困難!
如果您想更詳細地探討這個問題,我之前已經回答了有關此問題的問題 - 請查看它們(1、2和3以及其中的連結)。顯然,成本和您隨時可用的專業知識的性質是一個問題,因此在做出決定之前檢查您的選擇是值得的 - 您
有時,聰明的頭腦確實在老肩膀上!:-)
另一個建議 - 盡可能使用 PostgreSQL!它在很多方面都遠遠優於 MySQL——SQL 合規性、JSON、地理空間、CHECK 約束、SET 運算符……長長的列表……你不會後悔的!
避免使用單個數據庫。我的建議是:從同一台伺服器上的不同數據庫開始——以降低成本,包括維護成本。如果工作量增加,您可以設置一台新機器並移動一些數據庫。如果只有一個應用程序的工作負載增加,您只能移動該應用程序。為此,監控不同應用程序的工作負載很重要。所以我建議安裝來自 Percona 的 User Statistics 外掛。
是的,分配工作負載和麵對崩潰的好方法是使用複製或集群(複製要簡單得多)。如今,我們不需要有單點故障。使用 MySQL,您還有另一種降低成本的方法:如果您在 3 台伺服器上擁有應用程序,您可以將所有這些數據庫複製到 1 個從屬伺服器——這稱為多源複製。
使用多個數據庫的其他好處包括:
- 大表上的 ALTER TABLE 可能會很痛苦
- 刪除 1 個客戶的數據將變得簡單快捷
- 不同的客戶可以有不同的配置(為了可靠性放棄一些速度,或者相反)
- 監控一些指標會容易得多
- 大表比較慢