MYCATMINI 设想

Posted 海鲨数据库架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYCATMINI 设想相关的知识,希望对你有一定的参考价值。

前段时间学习了下MYCAT这个分片中间件,看的是PDF《MYCAT权威指南》。指南前半部分吹得MYCAT的超能力。


是不是这本PDF书写得不怎么好,还是啥的!MYCAT的本身参数,内存设置没讲清楚。看下面的图,好像简单明了。

可是如何设置ORDERBY ,GROUP BY ,RESULT MERGE的内存大小呢?

应用链接池怎么设置。会话管理,心跳管理,线程管理都没什么参数可设置。这是其一,

其二  分了片后再做调整就比较难。当扩容后,怎么把一部分分片表迁移到新节点上呢? 要是改变分片规则,该如何操作呢?

其三 如果一个节点全挂了,存在该节点上的分片数据就丢失了,而且造成这部分业务影响!这要靠主从高可用。不过一层保证感觉不安全。


这是MYCAT的逻辑架构,分片表和数据节点捆绑很严重!这必须一开始就把分片设计好!就是数据节点要设置多些。以后扩容就可以把数据节点迁移到新物理DB节点上。


我的MYCATMINI 设想。先从MYCAT身上源码来改造,先还是用JAVA来编写。

第一 可以设置MYCATMINI的内存,排序内存,结果合并内存,HASH内存。

第二 提供管理线程的参数设置。

第三 保留对主从切换探测功能

第四 分片表和数据节点脱钩

第五  使用一个数据节点保留完整的数据库和表。

第六  传统事务提交,异步同步到分片库

第七  实现少量的分片规则,不采用MYCAT各种复杂的分片规则。

第八 只支持mysql5.7 MYSQL8.0以后版本。不支持什么O P M H!


这里设计了个主节点,

1 里面存放的所有T_USER的数据。这样避免分片节点挂掉造成业务中断或者是数据丢失。

2 所有DML语句都往主节点送,并收到主节点事务成功后才通知应用事务已提交完成。这样避免了NEWSQL和分布式数据库的两段提交XA事务的缓慢。

3 MYCATMINI 涉及到分片表的DML操作同时往主节点和分片节点送,对分片节点的事务如何,MYCATMINI不关心,采用弱事务延后处理方式。也就是说慢了,失败了都不要紧。只要主节点事务成功就好!对分片节点事务会做个登记,并记录对应的DML日志。对失败的事务,会间隔一段时间,重复多次执行事务。如果还失败就写入ALTER.LOG中

4 如果该分片表事务执行失败,就对该表标记无效。所有对该分片表的数据请求发往主节点。

5 如果该节点恢复后,会对该分片表进行增量恢复,使用MINI上的DML日志。增量恢复后并核对与主节点该表的对应分片的数据是否一致性。如果不一致性,说明增量恢复失败。重新从主节点进行局部分片,并把分片后表迁移到分片节点上。

6 MYCATMINI带个MYMOVE小程序,主要支持分片表在各个节点上的迁移。

7 MYCATMINI 需要双网络,因为需要分片表的迁移。类似ORACLE RAC的私有网络。

8 重新分片。比如说T_USER 按 HASH分片成3个分片。现在添加个新节点,想把T_USER分成4个片. 那么MINI会在线做个HASH 4个分片。做好了后就对新旧切换。类似ORALCE 在线重定义样。

9 MINI 不支持DDL操作,一切DDL操作由DBA直接在DB上操作。操作完后只要在MINI上执行个命令,让MINI从后端DB上获取最新的元数据即可。

10 少量分片规则 支持ShardByHash(字符段,数字字段,N),ShardByYear(r日期字段),ShardByMonth(日期),ShardByRang(数字字段,N)。这里N是分片数量。

11 保留MYCAT的全局表(字典表)和ER表(父子表)

以上是关于MYCATMINI 设想的主要内容,如果未能解决你的问题,请参考以下文章

Mycat学习实战-Mycat基本功能

MyCat学习第一天之MyCat简介,配置文件详解,分片操作,分片规则

Mycat学习实战-Mycat全局主键

MySQL——MyCat代理MySQL集群

MyCAT 源码解析合集

Mycat学习-单独启动mycat