品牌服装网
    • 网站首页
    • 公司简介
      公司简介
      企业文化
    • 产品展示
    • 新闻动态
      公司新闻
      行业新闻
    • 成功案例
      成功案例
    • 客户服务
      售后服务
      技术支持
    • 人才招聘
    • 联系我们
      联系我们
      在线留言

    新闻动态Site navigation

    公司新闻
    行业新闻

    联系方式
    Contact


    地 址:北京市石景山区66号

    电 话:17392341080

    网址:esvmb.com
    邮 箱:72055031@qq.com

    网站首页 > 新闻动态
    新闻动态Welcome to visit our

    X-Engine 如何实现 Fast DDL

    分享到:
      来源:品牌服装网  更新时间:2026-10-01 03:18:03  【打印此页】  【关闭】

    X-Engine是实(shi)现阿里巴巴自研的存储引擎,作为阿里云 RDS MySQL 的实现一个可选引擎,除了主打高性能和低成本,实现还增(zeng)加了(le)不少惠及用户的实现(xian)新功能(neng)。本文将详细介绍 MySQL(X-Engine) 如何近乎瞬时完成传统数据库需要数小时完(wan)成的实现DDL操作。##1.数据库DDL操作面临的(de)实现问(wen)题互联网业务发展迅速,应用模式频繁更改是(shi)实(shi)现常态。相应地,实现数据库访问模式和schema也随之变化。实现(xian)DDL(Data Definition Language)是实现(xian)SQL的一类,主要(yao)作用是实现创建和更改数据的(de)schema信息,最常见的实现操作包括:加减列、更改列类型、实现加减索引等。实现

    熟悉MySQL的实现同学都知道,在8.0以前,虽然Online DDL不阻塞其它DML(Insert/Update/Delete)操作,但许多重要的DDL操作,如加列(lie)、减列等,仍旧需要等待数小时、甚至(zhi)好几(ji)天(tian)时间(依据(ju)数据量的大小)才会生效。更改列类型等操作甚至仍需要锁表(biao)执行(xing),阻塞DML操作。DDL操作运行时间长,占用系统资源,需要(yao)额外的磁盘空间(建立临时表(biao)),影响系统吞吐,并且一旦DDL过程中实例crash,恢复时间也会很久。以(yi)加列(lie)DDL为例,MySQL经历如下过程:``` 

    X-Engine 如何实现 Fast DDL

    1.以(yi)新schema建立空表(biao)。 

    X-Engine 如何实现 Fast DDL

    2.拷贝数据到新表,并且将新加(jia)列的值赋为默认值,同时更新索引表。数据(ju)库接受(shou)到的DML操作被(bei)记录在临时文(wen)件。 

    X-Engine 如何实现 Fast DDL

    3.加exclusive lock,阻塞写操作,将临时文件记录的DML操作apply到新表。如果DML很多(duo),这一阶段将花费较多(duo)时(shi)间。

    4.删除旧表,将新表命名为旧表的名字。 

    ```显然,这个(ge)过程加锁时间长,拷贝数据操作会占用系统资源和临时空间,并需要大量I/O。为了适应变化频繁的业务,不立即更改存储层数据(ju)、可以快速完成的DDL(我们称之(zhi)为Fast DDL)成为了一个必要feature。

    MySQL 8.0 增加了instant add column功能,可(ke)以在短时间内只修改table元信息,完(wan)成加列操作。遗憾的是,它还不支持其它类型的DDL。得益于(yu)阿里自研的存储引擎X-Engine存储了(le)多版本Table Schema,每一行记录在引擎层就完成(cheng)了解析,并(bing)且可以依据更新版本的schema实现格式转换,X-Engine因此可支持多种类型的Fast DDL。 

    2.业界Fast ddl实现方案**MySQL 8.0**record记录了列(lie)个数, instant add column操作只修改系统表。写操作:新格式的记录。读操作:根据存储在系统表中default value补齐新加列(lie)。支持类型:• Change index optionRename table• Set/drop default• Modify column when the table is empty• Add/drop virtual columnsAdd columns**MariaDB10.3**整(zheng)体(ti)实现方案与MySQL8.0类似,record记录了列个(ge)数,在leftmost leaf page中记录所有(you)列的default值.支持类型:• Add column• Drop column• Extend VARCHAR maximum (Only if the physical format allows; not VARCHAR(255) to VARCHAR(256)) 

    Aurora**发(fa)生ddl后,更新系统表,新(xin)、旧版本的schema均要记录下来。然后广(guang)播该修改。之(zhi)后接受DML请求,首先转换相关leaf page的所有记录,然后执行DML。select请求会将旧版本的记录拼接成新版本记录。支(zhi)持类(lei)型• only supports adding nullable columns, without default values##3.X-Engine多版本schema顾名(ming)思(si)义,Fast DDL指数(shu)据库能够在极短的时间(jian)内完成用户发出的DDL指令并(bing)返回。之(zhi)所以这(zhe)么(me)快,是因为只(zhi)修系统表里(li)的元数据,不(bu)变更引擎层存储的数据。其实现的关键在于:元信息变更之后,内存、磁盘中的物理记录该如何解析。Engine的架构采用了LSM-Tree的思(si)想,将新写入的数据以追加方式写入内存(cun)memtable,memtable到一定大小后switch为immutable memtable,不再修改。然(ran)后逐渐以固定大小extent的形式(shi),flush到持久化存储中。

    当extent到一定数量后,通过合并(Compaction)操作,将相同Key的多个版本合并。为了让每行记录可解析,最直观简单的方(fang)案便是将元信息附着在记录上面。为了能够不依赖系统表解析记录,X-Engine存储了较为详细的元数据,如(ru)果为每一行都附着一份,会占用大量的空间。为了大大减少存储成本,我们保证(zheng)每个memtable和extent内(nei)部的数据schema一致,并(bing)将schema信息存储在memtable和extent之上。schema信息包含了诸如列个数、列类型、列长度、默认值等(deng)关键信息。利用这些信息,X-Engine可(ke)以在返回结果之前,完成列解(jie)析,并只需返回查询目标列的对应结果。下(xia)面给出了一个具体的例子,同一张表存在(zai)不同schema版本的extent时,如(ru)何返回结果。 

    4.X-Engine fast ddl实现当 MySQL 接收到一条(tiao)fast ddl语句时,更新相关系(xi)统表及元数据(ju),新版本的表结构随之生(sheng)效,这时(shi)这条DDL语句就执行成(cheng)功啦!到现在为止X-Engine存储的信息没有发生任何变化。**读请求**当系统接(jie)收到Select请求时,MySQL 会将请求本身(shen),连同当前最新版本schema信息(称之为target schema)传递到X-Engine。X-Engine首先定位(wei)到记录的(de)位置(某个memtable或extent),并取相应数据schema解析记录得到初步结果。接着,对比数据schema和target schema,对初步结(jie)果做适当填充、删减或修(xiu)改(gai)得到最终结果返回(hui)。**X-Engine schema更新**Fast DDL命令执行成功,新版本的schema生效,X-Engine还对此无感知。当接收到第(di)一条(tiao)针对该表(biao)的DML(Insert/Update/ Delete)请后,如果发现X-Engine的活跃memtable的(de)schema版本落后于最新版本,会触发switch memtable行为:冻结当前活(huo)跃memtable,产生(sheng)新活跃memtable,将新(xin)schema赋予新活跃memtable。为了保证数据的正(zheng)确性,该操作会等待所有(you)正在进行的写事务完成后再执行。 

    写请求

     每个写事务(wu)可能涉及到n(n>=1)个表。事务在提交时,需要在(zai)写入活跃memtable之前判断:事务写入数据的schema版本是否与(yu)活跃memtable的schema版本一致,如果不一致则应该报错退出,提醒用户重试。**Flush/Compaction**内存(cun)中memtable数量到一定个数时会触发Flush操作,被选中memtable的数据以extent的形式写入磁盘,schema也随之由memtable传递到extent。Compaction操作会合并多个extent,如果参与同一任务的extent schema版本不一致,X-Engine会以其中最新版本为准,生成新extent。

    总结Fast DDL可以解决很多应用的痛点,加列、扩展列(lie)的常用的操作不用再需要漫长的等待。技术上,X-Engine通过存储详细的多版本schema信息,不(bu)仅无需借助系统表解析记录,而且可以轻易地实现不同版本schema之间(jian)的数据转换,进而(er)可以支持丰富的Fast DDL类型。

    上一篇:龙岗网站建设公司_龙岗网站制作公司哪家好_1
    下一篇:鸿蒙系统APP开发语言_鸿蒙app要用什么编程语言开发

    相关文章

    • 鹿寨哪个楼盘好_鹿寨高效网站建设哪家好_1
    • 开发微信小程序需要哪些技术_金华小程序开发流程
    • 开发语言有哪些_网站开发语言的区别_1
    • 开发网站建设_无锡网站建设制作流程_1
    • 龙岗网站建设公司_龙岗网站建设前景_1
    • 开发接单平台_接网站开发的单在哪里接
    • 开发网站建设_清远网站建设排名前十_2
    • 开发苹果app需要什么_用什么开发苹果app软件是什么原因
    • 高阳哪的年轻便宜_高阳网络推广哪家便宜_4
    • 开发小程序的费用_荣成小程序开发价格表

    友情链接:

    • 益阳电速网络科技有限公司
    • 句容频铁网络科技有限公司
    • 长葛发特网络科技有限公司
    • 泊头浩时网络科技有限公司
    • 保定正鼎网络科技有限公司
    • 密山艾赛网络科技有限公司
    • 滁州桦红网络科技有限公司
    公司简介|产品展示|
    新闻动态
    |成功案例|客户服务|人才招聘|联系我们

    Copyright © 2026 Powered by 品牌服装网   sitemap

    0.2549s , 49756.9921875 kb