开发者社区> 问答> 正文

请教symfony2 doctrine 如何分库分表?

随着数据库表慢慢大起来,想考虑分表。我这边用的是symfony2,所以想问问,symfony2如何分库分表。

展开
收起
落地花开啦 2016-06-14 15:24:49 3522 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    用事件监听的方式,根据用户ID或其他分库条件,来修改或者动态地注册数据库连接实例。

    或者简单点,就自己注册多个连接实例,然后定义一个获取所需实例的helper,比如按用户ID来分库:

    // (一)在app/config/config.yml里:
    # 定义好各个数据库连接
    
    // (二)在controller里:
    
    private function getManager()
    {
        $user = $this->getUser(); // 取得当前用户
        $shardId = null !== $user ? $user->getId() % 4 : 0; // 0,1,2,3共四个库
    
        return $this->getDoctrine()->getManager(sprintf('shard_%s', $shardId));
    }
    
    // (三)在业务Action里:
    public function someAction()
    {
        $om = $this->getManager(); // 这时拿到的就是对应当前用户的数据库连接实例了
    
        // ...
    }

    在你的业务代码中,你还得考虑分片化后业务的完整性。

    2019-07-17 19:37:51
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载