2010-09-24 72 views
1

我正在構建一個應用程序(使用zend框架),我們將有多個客戶端登錄並使用應用程序,並且這些客戶端中的每一個都將存儲大量有關其用戶的數據(我使用MySQL btw)。Zend的多個數據庫

基本上我想知道兩兩件事:

  1. 是具有多個數據庫,一個用於每個客戶端(即ipd_client_CLIENTNAME。)具有相同的表一個愚蠢的想法?或者如果我們有50個客戶端,其'數據庫'中有20,000個用戶的數據,它是否會更具響應能力(比將所有內容放在一個數據庫中)? 我已經設法構建了同一個系統,但都在一個數據庫上,我的模型類只需獲取登錄的客戶端名稱(在模型類的init()方法中),然後動態更改它們的表名從中獲取數據,這會很好嗎?

  2. 如果「系統中的每個客戶端都有自己的數據庫」是合理的,我將如何動態更改我的db模型連接的數據庫(基於哪個客戶端登錄)?

如果這樣做毫無意義,這裏的數據庫是什麼樣子的例子在兩種不同的情況(給定系統上註冊2個客戶端):

多個數據庫:

ClientA擁有一個名爲「ipd_clients_ClientA」的數據庫,其中包含表「users」,「lists」。

ClientB擁有一個名爲「ipd_clients_ClientB」的數據庫,其中包含表「users」,「lists」。

單一數據庫:

客戶端A具有表稱爲 「users_ClientA」, 「lists_ClientA」。

ClientB具有名爲「users_ClientB」,「lists_ClientB」的表。

希望這是有道理的。

任何幫助將非常感謝,謝謝!

+0

爲了讓您更好地瞭解自己在做什麼,我正在構建類似於MailChimp的東西,所以我們使用該應用程序的客戶將存儲有關其訂戶的各種信息(當我使用「用戶」以上,我的意思是用戶,所以他們也不會成爲我們系統的用戶,只有我們的客戶)。 – machinemessiah 2010-09-24 01:08:00

回答

3

我會使用解決方案2,爲您的客戶組合使用多個表,以及MySQL主/從複製。 MySQL Master Slave

如果要使用不同的數據庫,你可以使用Zend框架的原生功能: Tutorial multipe dbs

而不是選擇由某種前綴的一個客戶端。

+0

謝謝ArneRie! 我想如果使用多個數據庫沒有真正的優勢(就性能而言),那麼我將繼續使用單個數據庫,多表方法。 – machinemessiah 2010-09-24 05:32:02

3

雖然你接受了這個答案,但我不同意。我認爲有多個數據庫會更容易管理。

教程使用多個數據庫的方式比需要的複雜得多。我這樣做的方法是簡單地在根文件(index.php?)中定義客戶端名稱,然後我的引導程序使用此常量加載正確的ini文件。

如果您從分離開始,那麼您可以繼續使用相同的原理,以更輕鬆地將數據緩存在單獨的結構中。

使用單獨的數據庫將使管理單個客戶端變得更容易。

2

儘管ZF支持多個數據庫連接,但在這種情況下我不會使用它們。

我更有意義的是在每個數據表中存儲client_id(或site_id)並使用它來過濾。複製使得應用程序範圍內的更改變得非常困難。每當我看到這樣的動態命名錶時,我通常認爲這是糟糕的設計。

要進行緩存,只需在客戶端標識符前面添加任何緩存鍵。