【问题标题】:Distribute records on different MySQL databases - MySQL Proxy alternative在不同的 MySQL 数据库上分布记录 - MySQL Proxy 替代方案
【发布时间】:2014-03-25 09:07:20
【问题描述】:

我的场景如下:

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

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

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

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

【问题讨论】:

    标签: mysql database-design mysql-proxy


    【解决方案1】:

    这个网站似乎提供了您正在寻找的服务(收费)。

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

    ?>

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2013-05-29
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多