MySQL有众多集群方案,大多数公司用到的都是主从、读写分离、galera这类多主方案,非常适合于中小企业。对于大企业我们需要分表分库,我之前写了3篇关于有分表分库功能的MySQL集群方案Fabric, Cobar, MySQL Cluster,使用这些方案能够简化分表分库的逻辑,加快开发速度。只看这3篇零散的文章还不能够很好的为自己公司应该使用那种方案做出选择,我们这里对这3种方案作了详细的对比,他们各有优缺点,希望能够对您的选择有所帮助。特性对比情况请看下面的表格:
如果我们自己在代码中直接写分表分库,往往跟Fabric有点相似,代码中用Hash或范围查找某ID属于哪个数据,然后直接连接对应的MySQL服务,因此跨库的操作就不支持了。当我们要分片的表操作可以只涉及单个分裂字段的那些行时,即不需要跨库时,可以选用Fabric。比如按用户id分片,一个用户在该表会有多行数据,然而他们都会被分到同一个库中,用户对自己的数据操作是没有问题的。Fabric帮我们做了很多运维相关动作,方便了使用。
如果操作时有时需要跨库,但是可以不要事务时,可以考虑Cobar,当操作不符合分片查找规则时,Cobar会对所有库进行操作,虽然最后返回的结果可能不如人意,加上少量代码处理下结果,即可满足业务需求。并且Cobar是支持MariaDB的,另外两款都不支持,因此当必须选择MariaDB时也可以考虑用Cobar。
如果不仅有时需要跨库,而且一定要事务时,可以考虑用MySQL Cluster,虽然事务级别低了一级,还是能够得到很好的隔离效果的,一般能够满足您的事务需求。
如果必需要大量的跨库,并且是所有库都要操作,而且无法优化成少量跨库,那么前面的三种集群方案都不适合了,MySQL自带的主从方式也许是最好的,提高下硬件,比如配置SSD,更多的内存CPU,让写操作都在一个库里完成反而会更快,更节省资源