。点击上方蓝字关注我们

为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!(链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转)
。点击上方蓝字关注我们

为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!(链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转)


在MySQL 5.5之前只支持Copy方式的DDL操作,需要拷贝数据,而且不能并发写正在变更的表; MySQL 5.5 开始支持Inplace方式的DDL操作,对于支持inplace的DDL操作,无需拷贝数据,直接在原有的表数据上面进行变更,但仍然不可并发写; MySQL 5.6 开始支持Online DDL,实现大部分DDL操作时可并发读写,极大减少了DDL操作对于系统的整体影响; MySQL 8.0开始支持instant DDL,通过只修改数据字典而不修改数据的方式实现DDL操作的瞬时完成。

双层数据字典结构:server层,引擎层都有数据字典,两份数据字典需要同步; 信息存储在多处:存储在文本文件,MyISAM和InnoDB中。 Server层: 文本文件:.FRM, .OPT文件等。 MyISAM系统表:user,events等。 存储引擎层: InnoDB内部系统表:sys_tables, sys_indexes。
数据字典信息不同步:server层和InnoDB层数据字典不一致的问题时常出现; 数据字典缺乏统一管理:通过文件,MyISAM引擎等存储,没有统一API; DDL不具备原子性,导致crash safe和复制的问题; 缺乏扩展性,不便于升级。

统一数据字典信息:去除了.FRM等文件及MyISAM系统表,统一放到InnoDB存储引擎中的一套系统表中; 通过统一的接口API访问和操作数据字典; 新的数据字典缓存; 实现了一套新的存储引擎API用以支持原子性DDL和crash safe; information schema被重新实现为数据字典表的视图。


Data Dictionary Client:为SQL clients和存储引擎层提供数据字典的统一读写访问接口; DD Shared Cache:共享字典对象缓存; Storage Adaptor:InnoDB系统表的封装接口; 存储层接口:Handler接口。

由多个事务完成的一个DDL操作变成一个 DDL Trx 事务去完成,保证字典表操作原子性; 记录DDL日志(DDL log)保证数据文件操作原子性; Crash recovery的时候,根据DDL事务的提交状态选择提交或回滚。
Prepare:创建所需对象并将DDL log写入系统表mysql.innodb_ddl_log; Perform:执行DDL操作,例如:执行创建表的所需操作; Commit:更新数据字典并提交DDL Trx; Post-DDL:Replay并删除DDL log。

Prepare:找到字典对象T1; Perform:删除在数据字典表中T1的相关信息; Commit::提交DDL 事务,淘汰T1字典对象缓存; Post-DDL:删除数据文件t1.ibd等。



计算层(Klustron-server):多个PostgreSQL实例构成的计算节点负责接受验证应用软件端的连接请求,以及从已经建立的连接中接受SQL查询请求,执行请求,然后返回查询结果; 存储层(Klustron-storage): 三个或者更多个MySQL8.0实例构成的存储节点组成一个存储集群(storage shard,简称shard),每个shard 存储着一部分用户表或者表分区; 元数据集群存储着Klustron 集群的元数据包括拓扑结构、节点连接信息、DDL日志,commit log,和其他集群管理日志等; cluster_mgr集群负责维护正确的集群和节点状态,实现集群管理、集群逻辑备份和恢复, 集群物理备份和恢复、水平弹性伸缩等功能。

导出表全量数据:node_mgr 调用 mydumper 将源表数据 dump 出来并传输数据文件到计算节点所在服务器; 加载表全量数据:node_mgr调用kunlun_loader工具把源表dump全量数据灌入目标表中; binlog catch-up:node_mgr根据dump时各个shard上binlog起始位置记录调用binlog2sync工具,binlog2sync 工具从该位置点开始dump binlog事件; rename源表和目标表:binlog2sync工具快速将剩余的binlog同步完,然后再将目标表rename成源表名,业务恢复正常使用。

Online DDL的增强和优化(并行化实现性能优化等) Transactional DDL(实现DDL的事务性,而不仅仅是原子性)

点击上方观看视频回放
往期推荐

文章转载自KunlunBase 昆仑数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





