[TOC]
全新设计的mysql分库分表中间件。产品计划使用netty 4.1开发,基于spring boot/cloud提供管理接口。
支持nio和zero-copy的数据透传;支持数据分库、分表以及复合的分库分表功能;分片算法上除支持常见的hash/murmurHash,mod,range,date,code算法外,还额外支持强行指定。
- mycat。功能复杂,分表支持不好,转发效率80%。1.x版本现在仍然一堆bug,无人维护,2.x版本开发中,还不支持分库分表。 原计划参与mycat2.x的开发,但是被恶心了一下,想参与开发必须参加leader-us组织的收费培训。。。
- kingshard。使用go编写,特色是支持单库分表,但是整体功能简单,路由特性较少,性能尚可。
- sharding-jdbc。当当开发,集群试用下存在连接数问题,很要命,和我们现在的问题一样。
- 基于netty 4.1开发,全面支持zero-copy,流式转发。
- 基于spring-cloud支持集群配置,并在此基础上提供web管理。
- 支持多级路由链,可以在hash/range分库分表后,再次使用date分表。
- 更强大的sql统计功能,可以统计前后端sql的执行信息。
- 支持对mysql主机性能的检测,比如tps和总体延时。
- 更高性能的连接池机制,更少的锁。
- 基于mysql主机的连接控制,而非数据库层面的,更好地维护连接扩展性。
所有可能造成不稳定、降低性能、在中间件实现别扭的功能,可能都不会实现了。
- 不支持在中间件层面支持数据聚合、排序等功能,因为没有必要,且造成不稳定。
- 放弃事务管理,因为无法准确实现分布式事务,且可能造成不稳定。
- 不支持last_insert_id(),因为对于集群应用毫无价值。
1.所有不在路由名单里的SQL,直接发到schema的base node上,以满足某些客户端的需要。 1.对于所有的dml,在路由名单里的,不指定参数,默认不予执行,可以配置转发参数。 2.对于所有的ddl,在路由名单里的,不指定参数,默认不予执行,可以配置转发参数。
SELECT 支持 UPDATE 支持 DELETE 支持 REPLACE 暂不支持 INSERT 支持单value,多value优化中。
ALTER TABLE 支持 CREATE TABLE/INDEX 支持 DROP TABLE/INDEX 支持 TRUNCATE TABLE 支持
SET SHOW EXPLAIN
- 按照prefix+value值来路由到指定库。
- 参数:prefix:库名前缀。
- 根据给定值的HASH来分库,底层hash算法使用guava的murmurHash3。
- 默认128个虚拟节点,建议以8的倍数来分库效果比较好。
- 根据给定的long值,按照库数量直接mod分库。
- 要求value值必须为long类型。
- 按照固定的long值range来路由。
- 参数:start:起始位置 range:分区大小
- 根据预设信息设置表路由,此算法一般建立放在分表算法的最后,它会覆盖之前的配置。
- params:key=routeKey,value="mysqlGroup.database"
- 根据给定的日期,给出归属表名,支持动态自动建表。
- 参数:
- date-pattern: 可以不指定,设置为日期来源格式
- format-pattern:格式化成的样式
- prepare-num 提前建表的个数
- 根据给定的key,来判断是否存在表,如果没有表,则动态自动创建以key为后缀的表。。
- 需要在配置参数中配置mysqlGroup和database属性。
- 基于hash的分表算法。
- 参数:routeList=mysqlGroup.database.info3,mysqlGroup.database.info3
- 根据给定的long值,按照表数量直接mod分表。
- 参数:routeList=mysqlGroup.database.info3,mysqlGroup.database.info3
- 按照预定分表规则分表。
- 参数:key=mysqlGroup.database.info3
- /api/stats/run/server 服务器运行期信息
- /api/stats/run/mysql mysql运行期信息
- /api/stats/sql/server 服务器sql统计信息
- /api/stats/sql/mysql mysql sql统计信息
- /api/stats/sql/info2 info2 sql统计信息
- /api/stats/sql/client 客户端sql统计信息