Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不同的MySQL数据库上分发记录-MySQL代理替代方案_Mysql_Database Design_Mysql Proxy - Fatal编程技术网

在不同的MySQL数据库上分发记录-MySQL代理替代方案

在不同的MySQL数据库上分发记录-MySQL代理替代方案,mysql,database-design,mysql-proxy,Mysql,Database Design,Mysql Proxy,我的设想如下: 现在我使用一个大型MySQL数据库和多个表来存储用户数据。许多表包含自动递增列 我想将其拆分为2个或更多数据库。分配应按用户id进行,并已确定(不能随机化)。例如,用户1和2应该在数据库1上,用户3应该在数据库2上,用户4应该在数据库3上。 因为我不想改变我的整个前端,所以我仍然希望使用一个db适配器,并在查询生成(前端)和查询执行(在正确的数据库上)之间添加一层。该层应根据用户id将查询分发到正确的数据库 我找到了和我需要的完全一样的。不幸的是,它是alpha格式的,不建议在生

我的设想如下:

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

我想将其拆分为2个或更多数据库。分配应按用户id进行,并已确定(不能随机化)。例如,用户1和2应该在数据库1上,用户3应该在数据库2上,用户4应该在数据库3上。
因为我不想改变我的整个前端,所以我仍然希望使用一个db适配器,并在查询生成(前端)和查询执行(在正确的数据库上)之间添加一层。该层应根据用户id将查询分发到正确的数据库

我找到了和我需要的完全一样的。不幸的是,它是alpha格式的,不建议在生产环境中使用。
对于php,这听起来很有希望,但我需要一个至少支持php和java的层


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

这个网站似乎提供了你想要的服务(收费)

它允许您解析和修改查询和结果。然而,您要做的似乎只需要几行代码来区分不同的用户id,因此即使mysql proxy仍然是alpha,您的需求也非常简单,我只需要使用proxy即可

或者,您可以使用您正在使用的任何服务器端语言获取他们的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 ...;');
query('SELECT*FROM…;');
?>