2015-05-06 53 views
1

我目前在同一臺服務器上有兩個數據庫,但有不同的用戶,並且希望在同一頁面上同時選擇兩個數據庫。多個mysqli數據庫連接,不好的做法?

我有查詢等我自己的數據庫類..和構造函數類似於:

$this->connection1 = new mysqli('localhost', 'username', 'password', 'database'); 
$this->connection2 = new mysqli('localhost', 'username2', 'password2', 'database2'); 

在我的查詢功能,有可能使您可以查詢連接2,而不是連接1例如一個變量

switch($database) { 
    default: 
     $this->connection1->query($querystr); 
    break; 
    case 'connection2'; 
     $this->connection2->query($querystr); 
    break; 
} 

這種方法是不好的做法還是非常好?

+0

有趣的問題,不知道 – Marilee

+0

只是一個小建議:HTTP://計算器。com/questions/1241695/default-as-first-option-in-switch-statement – Masiorama

+0

除此之外,沒有任何問題,除了明顯減慢打開連接時的速度 –

回答

0

根據您的使用情況,這可能是一個非常好的方法,或者是一個沒有任何收益的驅動複雜性的方法。

如果有要求,例如,你必須實際一些數據(從用戶帳戶F.E.社會安全號碼)分開是有意義的使用不同的數據庫。 另一種情況可能是將工作負載(如大部分讀寫負載)分解爲不同大小和調優的數據庫。

當目標是支持租戶時,我會考慮將其作爲應用程序的一部分來實施。

如果您想跨不同數據庫進行搜索並獲得聯合結果,則會遇到多種問題,如一致的排名和數據選擇等問題,您無法跨物理分佈式數據庫執行JOIN等。

1
I think you should create one classes containing two funcations createConnection and getConnection, just pass the connectiontype you want in get connection that should return you correct connection! 
1

我相信使用$database作爲查詢的開關不夠明確。

我寧願讓兩個查詢方法顯示實際查詢的數據庫。

queryOrders($querystr) resp。 queryUsers($querystr)

這將讓你以下好處:

  • 消除switch語句
  • 消除魔術常量數據庫

我相信你爲什麼會擔心重構是因爲你周圍的一些代碼必須將其提取爲一般方法。

則可以創建表示方法與調用,只有委託給你的查詢方法的方法。

編輯:要明確多個數據庫,我相信是完全正當的理由,以單獨的數據到多個數據庫實例,雖然有很明顯會有問題,如果你要對兩個數據集同時操作。在某些情況下是不同的模式會做的伎倆也...