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 设想的主要内容,如果未能解决你的问题,请参考以下文章