作者:junwen12221
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
由于分库分表中间件对数据库协议,SQL查询器实现程度,实现方法不同,对不同的场景没有一个最好的方案。比如路由型的SQL查询器对于一些仅仅涉及SQL改写的需求就比较友好而对于复杂查询不友好。使用优化器实现的SQL查询器对于复杂查询兼容性好,但是对于字符串就可以完成SQL修改的需要就特别繁琐。
不清楚的情况,建议先使用单表。然后使用单库分表,基于全局表和分片表的JOIN,子查询下推。分片键建议只使用一个分片键。熟悉1.6分片算法的用户可以直接使用1.6的规则分片算法。只为打散查询压力的场景可以使用自动hash型的算法。
然后在熟悉的情况下,可以使用分库,两个分片键等其他高级功能。
对于读写分离架构会改变数据的读写一致性,这是单机数据库不会出现的问题。对于读写分离所以要检查业务系统或者第三方的库,框架中要检查有没有修改完数据,马上查询的代码,代码中涉及的表不建议使用读写分离,可以把逻辑表的targetName直接指向数据源而不是集群,或者直接把集群读写分离改为主备架构或者使用注释查询强制读主数据源。或者直接在客户端控制读写分离,比如MySQL JDBC驱动就有读写分离功能,通过设置readonly属性,jdbc可以把查询路由到在jdbc配置的主或从数据源上。