文章插图
4.X-Engine fast ddl实现当 MySQL 接收到一条fast ddl语句时,更新相关系统表及元数据,新版本的表结构随之生效,这时这条DDL语句就执行成功啦!到现在为止X-Engine存储的信息没有发生任何变化 。
读请求
当系统接收到Select请求时,MySQL 会将请求本身,连同当前最新版本schema信息(称之为target schema)传递到X-Engine 。X-Engine首先定位到记录的位置(某个memtable或extent),并取相应数据schema解析记录得到初步结果 。接着,对比数据schema和target schema,对初步结果做适当填充、删减或修改得到最终结果返回 。
X-Engine schema更新
Fast DDL命令执行成功,新版本的schema生效,X-Engine还对此无感知 。当接收到第一条针对该表的DML(Insert/Update/ Delete)请后,如果发现X-Engine的活跃memtable的schema版本落后于最新版本,会触发switch memtable行为:冻结当前活跃memtable,产生新活跃memtable,将新schema赋予新活跃memtable 。为了保证数据的正确性,该操作会等待所有正在进行的写事务完成后再执行 。
写请求
每个写事务可能涉及到n(n>=1)个表 。事务在提交时,需要在写入活跃memtable之前判断:事务写入数据的schema版本是否与活跃memtable的schema版本一致,如果不一致则应该报错退出,提醒用户重试 。
Flush/Compaction
内存中memtable数量到一定个数时会触发Flush操作,被选中memtable的数据以extent的形式写入磁盘,schema也随之由memtable传递到extent 。Compaction操作会合并多个extent,如果参与同一任务的extent schema版本不一致,X-Engine会以其中最新版本为准,生成新extent 。
总结Fast DDL可以解决很多应用的痛点,加列、扩展列的常用的操作不用再需要漫长的等待 。技术上,X-Engine通过存储详细的多版本schema信息,不仅无需借助系统表解析记录,而且可以轻易地实现不同版本schema之间的数据转换,进而可以支持丰富的Fast DDL类型 。
推荐阅读
- 淘宝运营怎么做数据分析 淘宝如何分析产品数据
- 颈椎压迫神经
- 淘宝流量多少算正常 淘宝流量指数怎么换算
- 淘宝怎么看数据,怎么分析数据 淘宝主要看哪些数据
- 曾经的象明茶山,勐腊革登茶山莽枝茶山的人文指数生态指数
- 手肘俯卧撑怎么做
- 燃气表显示的数字代表什么?
- 淘宝怎么不显示库存数量 如何看淘宝商品库存
- 饮茶配点心,是江西人的传统,让我们来看看江西茶点的精妙之处
- 你需要知道的各种指针运算
