2009-10-10 102 views
1

我打算在同一個數據庫表中有20個或更多的站點。同一個MySQL數據庫中的多個站點

像類似這樣的結構: cms_config cms_pages cms_users cms_modules

我一直在想,每個表中應該有一個CUSTOMER_ID列,所以我很容易可以選擇並調用行是爲給予客戶。但是,當它涉及加載時間,內存使用和所有這些時,這是否是最好的方式呢?

我想要一個易於更新和修復的設置,所以我認爲使用相同的結構運行單獨的數據庫將是一個壞主意?

回答

2

將所有內容都放在同一個數據庫中,如果您負責維護,則是執行更新,維護和備份的最簡單途徑。

使每個數據庫分開後,以(維護)更高的價格提高安全性和隱私(因爲每個客戶數據庫用戶都可以訪問每個其他客戶數據,通過能夠讀取/寫入cms_pages的事實)成本。分開的數據庫還可以簡化性能擴展,您可以更快速地將超出預期的客戶移至自己的服務器。記住更新和備份可以自動執行,所以這不是什麼大問題。性能方面,擁有大量數據的客戶將會以較少的數據影響客戶的性能(因爲索引掃描時間將與頁面總量成比例增長,即使可以通過使用多列來緩解索引掃描時間索引)。

因此,爲每個客戶分開一個數據庫並付出代價是有道理的,除非您確定這些小型站點的流量不會太大,以至於他們都是朋友,或者永遠不會找到他們自己的數據庫用戶名:-)。

+0

我明白了。感謝您的迅速回復。如果我決定爲每個客戶提供不同的數據庫,那麼更新數據庫結構如何?是否有一種聰明的方式讓某種「適用於所有」數據庫,以便一次性對所有客戶進行某種更改? – rkj 2009-10-10 16:02:06

+0

您可以擁有您自己的所有現有客戶及其數據庫的「元數據庫」。編寫一個腳本來查詢該數據庫並將更新按順序應用於所有這些數據庫。 – 2009-10-10 16:11:44

+0

我不確定你的意思。你能解釋一下,我有可能擁有一個「元數據庫」嗎?什麼是所謂的元數據庫?我一直在說所以你說我可以有一個具有結構的數據庫,每當我編輯這個數據庫時,這個效果將被應用到其他數據庫,而不會擦除客戶數據庫中的數據? 在此先感謝:) – rkj 2009-10-10 19:43:26

1

這被稱爲多租戶架構。有幾種實現方法。如果您花費一些時間開發適當的數據庫庫,您可以(理想情況下)在所有查詢中重寫所有查詢注入tenantId標準。這樣你就知道每個租戶只能訪問他們的數據(只要所有的查詢都是由你創建的db庫傳遞的)。

另一個挑戰是創建適當的數據庫索引。您通常必須使用customerId/tenantId列+查找的字段創建多列索引。

相關問題