写在前面
本文主要介绍关系型数据库分库分表的中间件,主要包含中间件介绍、选项及其对比。虽然市面上很多分库分表中间件,但是大多数都是不友好或者社区活跃度不高的项目,当然还是有很多淘汰的中间件。目前,在实际业务场景中我们绝大多数情况都是选用sharding、mycat,以下文章重点介绍sharding与mycat的对比。
中间件介绍
较多使用
sharding-jdbc(当当)
基于jdbc驱动,不用额外的proxy,支持任意实现JDBC规范的数据库,它使用客户端直连数据库,以jar包形式提供服务,无需额外的部署和依赖。可以理解为加强版的JDBC驱动,兼容JDBC和各类ORM框架。
MyCAT(基于Cobar)
Java语言编写的Mysql数据网络协议开源的中间件,它的前身是Cobar,遵守Mysql原生的协议,跨语言,跨平台,跨数据库的通用中间件代理。Mycat是基于Proxy,它覆写了MySQL协议,将Mycat Server伪装成一个MySQL数据库,它和ShardingShere下的Sharding-proxy作用类似,需要单独的部署。
较少使用
TSharding(蘑菇街)
Atlas(奇虎360)
Cobar(阿里巴巴)
Oceanus(58同城)
Vitess(谷歌)
sharding与mycat选型比较
项目 | Sharding-JDBC | Mycat |
---|---|---|
社区环境 | 好 | 差 |
bug修复 | 及时 | 极差 |
架构设计 | 增强版的 JDBC 驱动 | 实现了 MySQL 协议的 Server。客户端所有的 jdbc 请求都必须要先交给 Mycat,再由 Mycat 转发到具本的真实服务器中。 |
sharding与mycat功能比较
功能项 | Sharding-JDBC | Mycat | Sharding-Proxy | Sharding-Sidecar |
---|---|---|---|---|
官方网站 | 官方网站 | 官方网站 | 官方网站 | 官方网站 |
源码地址 | GitHub | GitHub | GitHub | GitHub |
官方文档 | 官方文档 | Mycat 权威指南 | 官方文档 | 官方文档 |
开发语言 | Java | Java | Java | Java |
应用语言 | 仅Java | 任意 | 任意 | 任意 |
开源协议 | Apache-2.0 | GPL-2.0/GPL-3.0 | Apache-2.0 | Apache-2.0 |
数据库 | 任何遵循 SQL92 标准的数据库 | 任何遵循 SQL92 标准的数据库 | MySQL/PostgreSQL | MySQL/PostgreSQL |
连接数 | 高 | 低 | 低 | 高 |
代码入侵 | 需要修改代码 | 无 | 无 | 无 |
性能 | 损耗低 | 损耗略高 | 损耗略高 | 损耗低 |
无中心化 | 是 | 否 | 否 | 是 |
静态入口 | 无 | 有 | 有 | 无 |
管理控制台 | Sharding-UI | Mycat-web | Sharding-UI | Sharding-UI |
分库分表 | 支持 | 单库多表/多库单表 | 支持 | 支持 |
多租户方案 | – | 支持 | – | – |
读写分离 | 支持 | 支持 | 支持 | 支持 |
分片策略定制化 | 支持 | 支持 | 支持 | 支持 |
分布式主键 | 支持 | 支持 | 支持 | 支持 |
标准化事务接口 | 支持 | 支持 | 支持 | 支持 |
XA强一致事务 | 支持 | 支持 | 支持 | 支持 |
柔性事务 | 支持 | – | 支持 | 支持 |
配置动态化 | 支持 | 开发中 | 支持 | 支持 |
编排治理 | 支持 | 开发中 | 支持 | 支持 |
数据脱敏 | 支持 | – | 支持 | 支持 |
可视化链路追踪 | 支持 | – | 支持 | 支持 |
弹性伸缩 | 开发中 | 开发中 | 开发中 | 开发中 |
多节点操作 | 分页去重排序分组聚合 | 分页去重排序分组聚合 | 分页去重排序分组聚合 | 分页去重排序分组聚合 |
跨库关联 | – | 跨库 2 表 JoinER Join基于 caltlet 的多表 Join | – | – |
IP 白名单 | – | 支持 | – | – |
SQL 黑名单 | – | 支持 | – | – |
存储过程 | – | 支持 | – | – |