0

我的情况如下:

现在我正在使用一个带有多个表的大型 MySQL 数据库来存储用户数据。许多表包含自动递增列。

我想将其拆分为 2 个或更多数据库。分配应由 user_id 完成并确定(不能随机)。例如,用户 1 和 2 应该在 database1 上,用户 3 在 database2 上,用户 4 在 database3 上。
由于我不想改变我的整个前端,我想仍然使用一个数据库适配器,并在查询生成(前端)和查询执行(在正确的数据库上)之间添加一层。该层应根据 user_id 将查询分配到正确的数据库。

我发现MySQL Proxy听起来完全符合我的需要。不幸的是,它处于 alpha 阶段,不建议在生产环境中使用。
对于 php,有MySQL Native Driver Plugin API,这听起来很有希望,但我需要一个至少支持 phpjava 的层。

有没有其他方法可以实现我的目标?谢谢!

4

1 回答 1

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 ...;');

?>

于 2014-06-20T23:20:50.873 回答