2014-03-25 19 views
0

我的情況是這樣的:分佈在不同的MySQL數據庫記錄 - MySQL代理替代

現在我用一個大的MySQL數據庫有多個表來存儲用戶數據。許多表包含自動增量列。

我想將其分成2個或更多的數據庫。分配應該由user_id完成並確定(不能被隨機化)。例如。用戶1和用戶2應該在數據庫1上,用戶3在數據庫2上,用戶4在數據庫3上。
因爲我不想改變我的整個前端,我想仍然使用一個數據庫適配器,並在查詢生成(前端)和查詢執行(在右側數據庫)之間添加一層。該層應根據user_id將查詢分發到正確的數據庫。

我發現MySQL Proxy這聽起來完全像我需要的。不幸的是,它是在alpha版本中,不建議在生產環境中使用。
對於PHP有MySQL Native Driver Plugin API這聽起來很有前途,但是然後我需要一個支持至少php java的圖層。

有沒有其他辦法可以實現我的目標?謝謝!

回答

0

本網站似乎提供您正在尋找的服務(對於一個價格)。

http://www.sqlparser.com/

它可以讓你解析並修改查詢和結果。然而,你想要做的似乎只需要幾行代碼來區分不同的用戶ID,所以即使mysql-proxy仍然在alpha中,你的需求很簡單,我只需要使用代理。

或者,您可以使用任何服務器端語言來獲取他們的user.id信息,然後根據該信息創建一個到適當數據庫的mysql連接。這裏有一些我拼湊在一起的php,它們在精神上做我認爲你想要做的事情。

</php 
    // grab user.id from wherever you store it 
    $userID = get_user_id($clientUserName); 
    $userpass = get_user_pass($clientUserName); 

    if ($userID % 4 == 0) { // every 4th user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db4'); 
    } 

    else if ($userID % 3 == 0) { // every 3th user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db3'); 
    } 

    else if ($userID % 2 == 0) { // every 2nd user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db2'); 
    } 

    else // every other user 
     $db = new mysqli('localhost', $clientUserName, $userPass, 'db1'); 
    } 

    $db->query('SELECT * FROM ...;'); 

?>