在不同的MySQL数据库上分发记录-MySQL代理替代方案
我的设想如下: 现在我使用一个大型MySQL数据库和多个表来存储用户数据。许多表包含自动递增列 我想将其拆分为2个或更多数据库。分配应按用户id进行,并已确定(不能随机化)。例如,用户1和2应该在数据库1上,用户3应该在数据库2上,用户4应该在数据库3上。在不同的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格式的,不建议在生
因为我不想改变我的整个前端,所以我仍然希望使用一个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…;');
?>