数据库中间件的问题
数据库中间件+数据库集群构成的分库分表数据库集群,能够有效解决单机数据库的容量和性能问题, 同时无需昂贵硬件,总体成本可控。但仍然存在一系列的问题:
SQL兼容性不高
受限于数据库中间件对复杂SQL的处理能力, 数据库中间件+数据库集群的方案,其SQL兼容性并不高:
1.复杂查询SQL不支持:比如对于分片规则不一致的多张表的join、不支持自定义函数等;
2.分布式事务不支持:一个分布式事务的完整实现需要多个模块的协调,数据库集群上的单个中间件无法满足分布式事务的ACID特性;
3.存储过程不支持:存储过程集SQL执行和程序控制流为一体,是数据库产品发展到成熟阶段才出现的高阶功能。而数据库中间件在SQL支持度上尚处于补课阶段,对存储过程的支持更有很长的一段路要走。
管理复杂
中间件 + 数据库集群的方案,创建/删除库表、修改表结构均需修改中间件配置文件乃至重启中间件,而创建/删除索引、增加引用约束等操作,则需要在每个数据库节点分别执行;
在用户权限管理、数据库备份、查看当前连接信息等功能上, 中间件 + 数据库集群的方案或者没有提供,或者虽然提供但难以实现和单机数据库完全一致的用户接口和使用体验。
无法自动化扩缩容
一款真正的分布式数据库在提供扩展性的同时,需要向用户屏蔽其扩展细节。 而中间件 + 数据库集群的方案无法实现自动化的扩缩容,增删节点需要管理员手工操作,数据迁移耗时长风险高,业务中断时间长。