暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

腾讯云企业级MySQL(CDB)-列压缩特性

腾讯数据库技术 2021-08-17
545
本文以视频+文字放送,为你带来腾讯云企业级MySQL-列压缩特性


【需求背景】
当前MySQL有针对行格式级别以及数据库页面级别的压缩,这两种压缩方式在处理一个表,同时有大字段和其它很多小字段,并且针对小字段的读写访问频繁,对大字段的访问不频繁的场景中,它的读写访问都会压缩和解压数据,这造成许多不必要的计算资源浪费。
腾讯云企业级MySQL(CDB)运用列压缩功能来压缩访问不频繁的大字段,同时能够减少整行字段的存储空间,进而提高整体读写访问的效率。

例如一张员工表,前面三个字段分别表示员工 id、年龄以及性别,第四个字段other是大字段,表示员工的其它数据。当对前面三个字段访问频繁,对第四个字段访问频率较低时,可以将第四个字段other设置为压缩列。这样,对其它列的访问,并不会触发该列的压缩和解压,对大字段压缩之后,整体的数据量更小,因而能提高对其它小字段的访问效率。


【创建语法】
创建表时,在列类型的后面添加 compressed 关键字或者 compressed=zlib 关键词,表示该列是一个压缩列,在使用上这两种语法是等价的。
  • t1:没有压缩列;
  • t2:有压缩列;针对data字段增加压缩属性关键字 compressed (compressed=zlib)
下面使用这两种方式来演示,如何创建一张带有压缩列的表,作为对比,我们首先创建一张没有压缩列的表 t1。在 t1 这张表中,id 字段是小字段,data 字段是大字段并且访问频率较低。下面我们针对 data字段加一个压缩属性,创建表 t2。创建 t2 表,在data字段后面指定一个压缩属性关键字compressed,也可以显示另外的一种语法方式,显示compressed=zlib 关键字,在使用上这两种方式是相互等价。目前只提供对 blob,text,varbinary,varchar 这四种类型的压缩,且只支持 zlib 的压缩算法。

【压缩效率演示】
上面介绍完如何创建压缩表后,接下来将演示压缩列的压缩效率以及部分场景下访问速度的提升。

首先准备一张约有180多万行的表t0,通过 show table status,可以看到t0表平均行的长度大约是2,050个 字节,数据量是3个G左右。先简单地看看这张表里面的内容,这里是为了演示方便准备的表 ,其数据冗余度非常高,在实际环境中一般不会有这样的数据。
  • 导入t0表数据
将t0表的数据,导入到之前创建的没有压缩列的 t1表以及有压缩列的 t2表中。t2 表的数据导入会比较慢,因为在数据导入的过程中会有一个压缩的阶段。
  • 对比 t1 和 t2 数据量大小
利用show table status对比 t1表和 t2表两张表的数据量大小。看Data_Length这一列,可以看到,压缩后t2表的数据量大约是未压缩t0表的1/33,并且它平均行的长度大约是未压缩的t1表的1/40。当然,在实际生产环境中的压缩效果还是要取决于具体的数据。这只是在演示环境下,数据冗余度非常高所达到的效果。
  • 访问速度的提升

接下来对比列压缩对select count(*) 查询速度的提升。首先对没有压缩列的t1表执行行数的统计,可以看到花了大约2.69秒;然后对t2表也执行关于行数的统计,可以看到执行得非常快,只花了0.26秒。可以看到t1表和t2表统计的结果是一样的,但是在压缩后t2表统计的速度更快,并且t2表的内容和t0表的内容是一致的。(统计执行速度快,内容一致)
列压缩功能实际上是来源于IEG团队的贡献,腾讯数据库技术团队把这个特性放到腾讯云数据库5.7版本里面,为广大腾讯云用户提供服务,欢迎大家尝试使用这个功能,谢谢大家!

腾讯数据库技术团队对内支持QQ空间、微信红包、腾讯广告、腾讯音乐、腾讯新闻等公司自研业务,对外在腾讯云上依托于CBS+CFS的底座,支持TencentDB相关产品,如CynosDB、CDB、CTSDB、MongoDB、CES等。腾讯数据库技术团队专注于持续优化数据库内核和架构能力,提升数据库性能和稳定性,为腾讯自研业务和腾讯云客户提供“省心、放心”的数据库服务。此公众号旨在和广大数据库技术爱好者一起推广和分享数据库领域专业知识,希望对大家有所帮助。
↓ ↓ 点击【阅读原文】可查看腾讯云企业级MySQL产品详情页
文章转载自腾讯数据库技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论