mycat垂直分库最佳实践
垂直分库如何根据表来分库呢?
这里一种情况,比如订单表,商品表。 订单表的一个商品外检关联商品表主键;多对一的关系;
如果我们把 订单表 商品表拆分到两个数据库中,那这里就会有一个很头疼的问题,这两个表Join关联查询的话,如何来搞呢。
这里传统的话,有四种解决方案:
1,mycat新版本,提供了跨库2表join,但是假如数据量大的话,会有性能问题;
2,全局表,后面会讲到,每个数据库都有搞个商品表,有点浪费资源;
3,不join查询,业务代码里通过API方式另外再查询,看具情况使用;
4,采用冗余数据方式,订单表里面把商品id,商品名称,价格等数据库也搞进自己的表里,这样就不用join查询,也是有点浪费资源;
mycat官方就说明了,支持单库内任意Join,所以我们设计的时候,把同一个业务模块的表放同一个库,依据业务模块来垂直分库;
所以我们的最终分库原则以下三点:
1,根据业务模块来划分库,不搞跨库join操作,避坑;
2,公共表,比如数据字典表,系统属性表等,采用全局表;
3,有些核心表,比如用户表,部门表,权限表等,业务模块偶尔用到的时候,可以通过API方式查询,无需划分到具体业务模块里去;
最佳实践设计如下:
上一篇:mycat垂直分库介绍
下一篇:mycat垂直分库案例实现