2014-03-25 18 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 ...;'); 

?>