分库分表的中间件常见的问题:
1、 扩容不方便(在增加数据库实例的时候,需要重分布数据)
2、 分布键变更很麻烦(刚开始需要买家id,后面又要根据卖家id查询时)
3、 分布键选择(架构设计)需要谨慎,甚至很多sharding产品不支持多个分布键、或者不支持随机分布,导致业务不得不使用没有任何意义的自增序列来作为分布键。
4、 无法支持复杂查询。跨库JOIN性能差,甚至只能按分布键JOIN,其他字段不支持JOIN。(因为这种产品架构数据节点之间是孤岛,数据需要在孤岛之间交互,需要通过上层的中间件节点,而这样的话,如果有跨库JOIN,就需要将数据收到中间件节点再JOIN,性能差是可想而知的,甚至打爆中间节点。)
5、 当需要写入、返回大量结果集时,可能把中间件打爆。可能性非常大。
6、 分布式事务性能差,甚至不支持分布式事务。
7、 由于各个数据节点各自为政,实际上这种模式带来的SQL限制多、功能缺失多
8、 SQL功能缺失,导致应用改造成本巨大,(实际上就是限制多)。
9、 全局一致性时间点恢复几乎不可实现,不同的数据节点处于不同的状态,没有一个全局统一的快照管理和恢复机制。
10、传统分库分表最大的问题实际上还是孤岛问题,导致了一系列的问题