00:03
嗯,线上的同学们大家晚上好,欢迎参加我们本期的滴活动。啊,我是本期分享嘉宾,腾讯数据库高级工程师王博。啊,首先让我来确认一下,我们的直播状态都是OK的。能听到声音和看到画面的同学呢?请扣666。啊,OK,没问题。呃,首先呢,在正式开始之前。我先简单的介绍一下我们的系列直播,每期我们都会邀请学术界的专家或者腾讯内部技术咖。来为我们的解读数据库技术论文,让更多的数据库从业者呢能够了解行业技术前沿。本期我们的主题是加透明压缩技术。我和我的同事,腾讯云数据库高级工程师丁艳飞。分别从学术前沿和工程创新的角度来进行分享。
01:02
在我们每次分享完之后,都会有一个抽奖环节,奖品是数据库技术丛书一套,或者怪皮U型这一个。啊,欢迎大家认真听课,积极抽奖。下面正式开始我们今天的分享。啊,再来做一下简单自我介绍吧,我是腾讯数据库的高级工程师王宏博,目前主要是负责P的内核开发以及性能优化工作。今天我们分享的是一篇论文。主题是基于硬件透明压缩的必加速优化。啊,首先呢,我们先概要性的看一下这篇文章的主要内容。在背景部分呢,作者介绍了第一个是现有的及软件压缩。嗯,第二部分是存储硬件透明压缩,第三部分是加和LM的对比。
02:00
四是加数放大的构成分析。嗯,在算法部分呢,作者针对性的提出了三种设计来优化B加数的写放大。一个是确确定性的来解决。啊,页面原子写引入的写放大,二是通过页面本地增量日志来减少刷单页引入的写放大。第三个是通过日志来减少度。日志引入的写放大。嗯。在实验部分呢,作者通过前前面所述的三个方法实现了一个新的加数,我们称之为减数。以示区别啊,并详细的比较了多种条件下的测试结果。我们来详细的看一下背景方面。在背景呢,呃。作者介绍了B加及其软件,压缩我们所熟悉的开源数据库,如my post。
03:03
还有我们的TG开源版T。啊,都是基于毕加速来实现的。然后呃,一个加数呢,就是如下面左边这张图所示。它是由一个一个的数据页面所构成的,然后组成了一个树状的结构。这样可以加速我们的数据查找。常见的数据页面大小呢,有八和16。然后通过对数据页面进行压缩,可以减少加的空间占用。以降低成本。此外,还可以减少加数的放大。在上面提到的B加数,呃,基于B加数的数据库当中呢,MYDB都实现了加数的软件压缩特性,但社区是没有。然后我们TP的商业化版本呢,也有后面这个同事会讲啊,软件不赖,定硬件灵活性高的优点,当然它也有稍微有一点美中不足。
04:07
那就是受限于现有的I4K对齐的约束,会产生一些额外的空间浪费,比如我们右面这张图。呃,一个是的,数据库页面经过压缩之后,产生了5K的数据。然后由由于受限于I4K对齐的要求,当这五数据落盘的时候,实际上它是要占用8K的空间的。所以就会产生额外3K的空间浪费。嗯,我们常见的必加数的压缩算法呢,有LZZ以及Z的。啊对,后面我们再强调一下,后面我们所说的L就是指logical block,也就是说,呃,逻辑上。磁盘血块大小。嗯,在背景二当中呢,作者介绍了透明硬件,透明压缩的一些特性。
05:05
嗯,这里让我们先额外的简单回顾一下闪存的特性吧。如图所示,然后。是支持三种基本操作的读写和擦除。然后呢,读写都是以配置为单位的,一般是四。然后呢,呃的擦除呢,则是以block为单位。一个block一般是包含多个配置,比如包含64个配置这样。嗯,那个之所以需要支持呢,是由于的是比较特殊的。一个配置只能在插之后一次而不能更新。但是从用户。呃,SSD呢,又是需要支持的。所以我们在SD里会有一个层来实现这个逻辑,就是我们下面这个的中间色的部分。啊。
06:01
然后CD,顾名思义呢,也就是一种带有计算能力的。然后。如图所示,我们一个通用的CD,它是可以支持在储内部的API接口,我们可以通过API来进行计算下。硬件透明压缩呢,其实就是硬件透明压缩存储其实就是CD的其中一种。是在C内部支持了对数据进行压缩和解。啊,后续我们提到的CD主要是指这种带压缩CD。嗯,我们对比最下面的两个图的话。左边是普通的SSD,右边是CD,我们可以看到普通的SSD的LBA和存,嗯,都是以页面为基础,而且都是4K大小。所以普通SD。
07:04
嗯。Csd呢,和SSD类似,都是对外提供了4K的L接口。就是右侧这个图。嗯,但是呢,4K的数据经过压缩之后,长度是不一定的。啊,所以呢,在csd的内部。F的管理就需要支持对数的管理。这就使得CS。嗯。呃,如此一来,Csd能带来哪些好处呢?嗯。总体来说的话,CS的好处就是。体现在它有更优的成本以及更好更好的性能,但是呢,我们今天在这里不做详细的讨论。本文呢,主要是关注一下CD技术。我们可啊,CD可以实现逻辑地址和物理地址的解,要这个怎么理解呢?我们看左边这个图。
08:00
就是对于。呃,一个。对于一个只有实际大小只有4T的CD来说,它是可以对外提供远大于大小的。L的,比如这个图里边,它就提供了32TL。然后另外一个是如右图所示。然后对于稀疏的数据写入,经过明压缩之后,可以不产生额外的空间浪费。然后基于CD的这两个特性呢,我们在做。应用开发的时候,比如数据库,那就可以做一些针对性的设计,利用CD的这种特性。嗯。嗯,在背景三呢,作者简要对比了B和lsm。首先,我们通过右上面的图来回顾一下。SM的写入流程。呃,一条数据记录写入会写入。
09:02
也就是我们的日志。然后再把它数据写入。当写满之后呢,就会变成。一个M的。然后再与L层的SS进行合并。上层的SS开报也会是在适合合适的时机与下层的SS开报进行合并。啊。接下来我们简要的呃总结一下。简要的回顾一下B加数的写入流程。其实B加呃,写入也是需要先写入我日志。然后再把记录写入到数据页面。数据页面写满的时候,就需要进行数据页面的分裂。所以在大部分时间里加的页面其实是不。另外呢,B加数,由于是直接操作,嗯,目标页面的。所以当内存不够的时候,就会涉及到页面淘汰的问题。
10:02
这个时候就需要刷脏,我们想一个极端的场景,就是说我现在里边的数据页面全是脏的。然后我要写的一条记录还不在buff里面,那我这时候写写一条记录,就需要去做一次buff淘汰。比如说我的一条记录是128K,那我的页面,我的页面是8K,那这个时候对应的斜放大就是64倍了。所以我们简单来总结一下,加和LL写的主要区别的就是。Lsm是一个紧密排布的结构。它可以有更小的空间占用,以及产生更小的放大。加速的写放大与数据集是有一些啊,与数据集的大小是呈正相关的。然后呢,与单条记录的大小是相关的。对于数据完全可以放入内存的场景,比加数甚至可以产生比lsm更小的放大。
11:07
所以呢,这篇论文也就聚焦在大数据以及小数据记录的场景。也就是说。嗯,压数在这种场景下是明显放大是明显于SM的。嗯,接下来呢,作者通过在csd上执行了一个随机负载进行测试,初步给我们展示了一下B加数和SM的差异。啊,如右边的这个表格所示。我们可以看到,L l SM tree占用的逻辑空间是更小的。这是与lsm的。呃,数据是紧密排列有关的。在经过csd压缩之后呢,加的物理空间占用大幅度减小了。此外呢,我们还还可以发现在在这个表格下面呢。
12:00
这个图里边我们可以发现是说lsm的写放大是显著的小于B加速。嗯,所以本论文的目标呢,也就是说需要去通过改进毕加数的实现来大幅度的减小。对数的写放大。在这里我们需要先呃着重强调一下写放大的定义。如中间的这个公式所示。就是分子是压缩后的物理写入数据的大小。这里需要嗯强调一下这两者之间的区别吧,就是和物理空间之占用两者之间的区别。比如说对于一个4K的呃物理数据进行一次更新,那其物理空间占用依然是4K,但是在计算放大的时候。其实是会算成8K的,也就是说写放大的分子。它是一个考虑历史上的所有写入的累计值。
13:00
OK,在背景四部分,作者总结了加数的放大构成,主要是包含三个部分。第一呢,是为了保证事物的原子性所采用的lo引入的线放大。嗯,第二的第二呢,是由于Lu buffer淘汰或者做checkpoint需要进行页而引入的单。第三个部分呢,是为了保证数据页面的原子性而引入了些放大。比如的。当考虑到csd的压缩特性的时候。我们可以对啊,那个公式一做稍微做一些啊,改变会引入一个压缩比的系数吧。然后呢,这个阿尔法就代表了数据的压缩比,也就是说数据压缩后的大小,数据压缩前的大小的比值,这是一个介于零到一之间的值。所以呢,也就是说CD会降低且放大。
14:00
呃,下面我们进入算法部分,算法一呢是通过确定性的来减少原子引入的写放大。嗯,其本质上看,其实就是一个。呃,所以一次页面。写就只需要嗯一次页面盘写就只需要写一次可以了。其具体实现呢?如右边这个图所示。在磁盘,对于每一个数据页面,在磁盘上会有。一个两倍空间的LBA与之对应。然后这个两倍的L空间会被分为两个S。然后两个流入就可实现。从而保证每次写入不管是否成功呢,页面的前进项都是OK的,因为上一次写是成功的,呃,就是一定已经保证了成功。在页面写入成功之后呢,就可以通过操作清理到前一个。
15:01
从而减少物理空间占用。当发生页面半起的时候,我们可以通过check sum检测出来。并通过前进向加log恢复出来最新的页面。对于写入成功后还没有来得及进行老页面的就crash的场景呢?这个时候两个slot里面其实都是有完整页面。那我们可就可以进行通过页面的LSN进行对比,找到最新的页面,将老的页面掉。嗯,这个方法呢,会带来一个负面的影响,就是。呃,每次操作的时候都需要传输额外的数据嘛。但是作者认为,在P的。所以这个也不是一个太大的问题。啊,这这里我们稍微一下就是,如果是。
16:02
计算,计算能力下推。上面的这个方法下推到CD。那这个时候。磁盘往外传输的数据其实就只有一个页面,也就避免掉了这个。啊,这个方法所带来的传输放大的问题。嗯,算法二呢。是通过本地修改日志来减少刷页引起的。啊,如腰图所示。一个数据页面在存储层对应了一个数据页面,再加一个4K的增量log页面。两者的那个逻辑地址是连续的。嗯,在内存当中的这个页面呢,会被分成k segment,每个segment大小呢是DS。我们每次对数据页面做修改的时候。
17:01
嗯,都会落到一个S门,然后。哪些segment被修改呢?我们会用一个bit f来记录。然后当需要数据刷数据页面的时候,我们通过这个bit map可以找到。所有的修改增量并它德尔塔,然后这个时候我们把德尔塔以及。以及后的数据放在一个4K页面刷下去就好了。我们以一个16K的司机页面为例的话。这个时候我们刷,其实只需要刷4K下去。那。那所以对应的写放大呢,就会减少75%,至少减少15%。经过CD透明压缩之后呢,放大可以进一步减小。嗯,在该方法中呢,由于额外的引入了那个增量日志,所以会造成一定的物理空间的放大。啊。
18:00
我们可以通过参数T来控制这个。物理空间的放大。啊。当我们可以直观的想一下,就是说当气比较大的时候。那我们可以,嗯。在那个4K里面保留更多的页面更新日志,然后这个时候呢,页的机会就少了。这个时候呢,我们的斜放大是越小的。对应的物理空间占用就会越大。所以这两个之间是需要做一个。嗯。对于读取页面来说呢,我们要读取。数据的原始页面,再加上增量日志,然后构造出来一个。最新的页面。由于读页面是需要额外读的,所以就会造成一定的解放,就会成一定的读放大。
19:00
但是呢,由于配那个数据页面的配置和增量日志是L是连续的,所以我们一次读请求就能搞定了,然后另外呢,增量日志其实也是相对比较小的。所以,所以我们可以认为这部分的放大是影响比较小的。那算法三呢,就是系数日志。这个被用来设计减少造成的写放大。目前常见的lo的实现呢,啊,如如左图所示,都是紧密连续排布的。然后呢,当数一提交的时候,日志一会落。事务二提交的时候呢。由于日志的八份没有写满。所以会在L所在的八份中追加L。最后呢,L1和L21起落盘,以保证L2是落盘的。嗯。数三提交的时候呢,L1和L2会连通,L3再落盘一次。
20:04
嗯,直到当前的日志八块被写满。才会开,才会开启新的页面。所以在我们这个例子呢当中呢,从flash的角度看,那我就会写了三次了。后面两次其实都是额外的写放大。嗯。当采用。右图所示的这种。日志的时候呢,每次日志写入都是一个新的页面。然后经过透明压缩之后呢。啊,就完全可以避免左图的这种放大的情况,另外呢,由于透明压缩的存在,也不会产生额外的空间占用。方法分。啊,那个问题。啊,透明压缩相较于软件压缩有什么好处?
21:01
OK,刚才。嗯,刚才其实已经提到了,我们总结一下的话,就是说。透明,一个是透明压缩的效率更高,就是透明压缩不会受限于4K对齐的这种要求,比如说刚才我们第一个第一个P前片。呃,16K的数据页面经过压缩之后是五,那我们硬件压缩其实最终需要占用5K。而软件压缩其实是要最终是要占用8K的。另外呢,就是呃,硬件压缩也不需要占用额外的那个CPU。也就是说,它全是在存储层由硬件来完成的,用户CPU是不会受到影响的。呃,然后第二个呢,是会有回放吗。这个。
22:02
啊,没太理解。然后因为它的度是不变的,所以度的回是不变的,不知道是不是想问这个问题。啊。OK,然后我们再继续看。啊,实验部分。嗯,在实验部分呢,作者通过前述的三个优化方法,实现了一个新的加为减数,以示区别。同时还实现了一个的地价。并且与XB做了比较全面的实验对比。在实验一中,呢盘频率设置为每分钟一次。屏蔽掉lo放大的影响。啊,通过不同的数据以及大小,以及单条记录大小。
23:00
啊,并且调整加数页面的大小。做着比较全面的评估了B数的特性,得出一个初步的结论就是B减数的写放大已经可以比较接近于lsm了。也就是说右面这两个图里边所有橙色、绿色和紫色的部分,我们可以看一下,其实是比较接近的。B和这个标相对比较标准的B的话们的比较。另外呢,我们通过对实验数据的对比可以发现。B加的写放大呢,与呃其实是不相关的,也就是说越小。嗯,他的写放大越大。用我们前面所说的那个最极端的那个例子去,呃,理解的话就是非常直观,也就是说我每一条都会引起一次。呃,刷页,那我这时候的解放大就是比上size。
24:00
那如果我的是固定的,我的越小,那我的放大就是越大,刚说错了一点,就是是比。是分母,所以它的放大就大。啊,另外一个就是呃。呃,那个写放大与size是正相关的,刚才。解,已经解释过了,然后呢,另外一个是与加数的方是与并发数相关的,也就说并发数越大。啊,它的放大越小,这个我们也可以理解,就是说。当并发数比较高的时候的那个。比如说我一一个页面里边可能会产生更多的更新,我一次刷页,那我就会有更多的进来啊。对于I来说的话,它的放大是数集相关的。也就是说。
25:03
我们可以直观理解,就是说。数据集比较大的时候。他做那个,呃,不同层之间的位置。他的血放大会变大。嗯,在实验实验二部分呢。是呃,这个的呃盘频率被设置为每事提。这个其实也是我们生产当中实际经常用的一个方法,这样可以保证我的事物是呃,我的数据不丢失的。嗯,作者用一个单独的图来展示log部分的写放大。我们可以看到那个。LM和B加的的放大都是跟size相关的。然后size越小,它写放大也越大,这个可以和我们刚才说的盘的那个按那个去理解。
26:00
然后呢,嗯,与并发数相关,随着并发数的上放大减小,这个稍微多解释一下的话呢,就是说随着并发数的上升。嗯,会产生日落盘时候的合并,也就是说每次盘会产生会一次性的提交更多的事。嗯,B减数呢,则是由于它所使用的吸收日式。所以呢,它的大小不同并发。对日志写、放大影响都不大,因为而且它始终都保持在一个比较低的水平。嗯,下面这个图12呢,展示了一个考虑日志写放大后的整体写放大,我们可以看到呢B减数。相对lsm来说,它的放大是进一步的降低了,所以可以在更多的场景下,甚至是比lsm更优。嗯,除了我们图中用红框专门起来的部分,其他的场景都是比更。
27:08
呃,然后如果我们把两个不同的日志刷盘方式放在一起对比的话,我们就会发现。Log的写放大呢,对于减数来说。是总体保持了稳定,因为它使用了稀疏lo。然后加和L。呃,当采用美术的时候。美术提交都去刷的时候呢。啊,这两者的。写放大是显著提高。尤其是当并发数比较小的时候,也就说在并发数比较小的情况下呢。呃,日志所引起的放大占比是比较高的。嗯,在实验呢。作者主要是对算法二提到的本地页面修改增量日志的算法做了一些验证。参数T就代表了当我增量日志达到多少的时候,需要进行数据页面。
28:07
需要进行增量数据页面的刷盘,并重置那个增量日志。参数S是代表了页面分segment大。啊,如图14和表格二呢。我们可以看到。当T大的时候,减数的放大就会越小,但是物理空间占用就会越大,这个其实与我们前面的理论分析就是一致的。所以在实际当中呢,这两个参数是需要进行一些。然后呢,图是三,我们可以看一下,就是说。呃。可以对比一下我们B减数的。呃,额外产生的这个4K的物理空间占用。所造成的一些影响。
29:00
当呃,它的,那当压缩前,它的逻辑物理空间占用是显著的大于B加数,但当经过CD的压缩之后呢?呃,相对,相对于标准的加数来说,它的物理空间占用的放大已经不明显了。呃,在实验中呢?作者对比了三种场景下的。减数和相对其他几种的性能。首先呢是随机检查的场景,我们可以看到B点数相对于。是相当的。但两者呢,都小于B加数。我们这边来重点解释一下B减数为什么是这样的。也是啊。我们再考虑那个算法二,也就是说B减数采用了本地页面。增量日志本地页面更新的增量日志刷盘。所以每次读取的时候呢,它都需要读取页面,大家增量日志来构造一个。
30:06
最新的数据页面,所以的会引起额外的开销。然后在随机范围查询的过程,对于随机范围查询来讲呢,B减数和B加的性能是相当的。然后呢,是L。嗯,作者认为呢。上述的对于呃。对于这种一次需要查多条记录的来说,刚才讲到的因为增量日志引起的减数的开销,它的这个占比呢就降低了,所以它的性能是。比较高的。对于随机写的场景呢,我们可以看到那个B演出。呃,和是稍微优于lsm,两者都是显著优于加数的。这是由于前面所述的两者的放都是拥有更小的放大。
31:01
但是在这呢,我们稍微要强调一下。对于。嗯,加在这种随机写的场景下,它的性能的提升。并没有像写放大。减倍数那么多,这是为什么呢?这是,这是因为虽然负载只是一个,只写负载,但实际上的I。是一个读写L。这是因为那个毕加数会涉及到八块淘汰的问题。然后呢,我们前面有讲到那个减数的实现当中呢,在读的时候,他会需要呃,那个额外的去读取一个4K的增量日志。所以它的读IO会比低加数有所放大。进而导致它的性能提升的倍数就没有放大减少的倍数那么多。OK。啊,我们的论文分享呢,本就到这里,然后我在查资料的过程看到了一个CD和PP起来比较有趣的啊,那个实验。
32:05
在这里也跟大家分享一下,熟悉PE的同学呢,可能都知道在当中有一个所谓的people on of的机制。这个是被用来优化非索引列更新的。如所示呢,当一个当更新一个组的时候,如果当组所在的页面。啊,如果,呃,当前所在的页面。是有空闲空间的,那么新的元素就直接写到这个。当前。然后呢,老组的CD。然后老原组的CD呢,就会指向到。呃,那个新的元素,这样就可以避免去查找新的页面,去写入数据,以及也不需要在索引当中写入一条新的记录。因此那个更新性能是比较高的。
33:02
P当中呢,还有一个参数叫做factor。哦。B当中呢,还有另一个参数叫做factor,然后这个被用来啊。控制那个表的填充率。所以呢,我把两者结合起来,我们就可以用一个比较小的填充率。用物理空间的占用来换取非索引力更新的性能提升。然后呢?当我们考虑引入CD之后呢,通过硬件透明压缩可以进一步降低。因为那个。页面填充率。下降所造成的物理物理空间占用的放大,也就是说用csd其实可以比较完美的解决。啊,物理空间占用和性能之间的一个trade off。嗯,小结一下,我们本次的论文的话,其实就是这个论文呢,给我们提供了一个不同的视角去比较B加和LS。
34:11
带给我们对二级更深的理解。然后呢,作者,嗯,通过三种实现比较简单,但是感觉是比较巧妙的方法来改进鼻加。然后在CD上也取得了很好的那个效果。啊,这个是参考资料。有趣的,有兴趣的同学可以嗯截屏,然后详细的看一下。OK,我们有几个线上的问题。来回答一下。然后。后面压缩软件压缩都是原始。
35:00
嗯。软件透明压缩,我我理解是马克原生是支持的。论文上的。第四个是论文上提到的算法可以在普通的SSD上用吗?啊,就是说这个算法可以拿过来用,但是不会产生像csd上这么好的效果啊。我们举一个稀疏锐度日志的例子吧,如果我每次都开启一个新的页面来写。其实是有写放大的。是造成了更多的写放大的。然后呢,对于那个增量增量日志部分的话,我们是可以取得一定的效果的,比如说56K。然后我伴随一个4K的,嗯,增量日志的页面,那这个时候我还是可以嗯减小写放大的。但是呢,就不如csd上减小的那么多。
36:01
啊,OK。呃,接下来我们进入本轮分享的抽奖环节。嗯。有这个新的问题。嗯,中奖的同学呢,将获得由腾讯云资深专家,资深技术专家主笔的数据库技术丛书一套,请大家扫码参与,我会在这个页面呢停留一小段时间啊,等待大家,另外手机端的同学呢,也可以截图来,等到会后再参与,今晚11点之前参与都是有效的,11点我们准时开讲。嗯。嗯,好的,我们今呃我们的抽奖环节就到这里,感谢大家参与,祝大家好运。
37:00
另外友情提醒一下,就是中奖的同学一定要记得填写那个收货地址。嗯,基础技术研究呢,与技术工程化总是相辅相成,相互促进的。在研究前沿技术的基础上呢,我们也在产品的工程化方面做了相关的工作,下面有请我的同事燕飞同学进行分享,谢谢大家。嗯。好,我。你。嗯,好,嗯,非常感谢胡墨老师精彩的分享,给我们介绍了多种算法啊,以及他们在毕加书上的呃,验证和使用,让我们对B加数还有它的优化方向有了更深层次的了解。
38:01
嗯,下面就由我来给大家做一下分享,先做一下自我介绍,我是腾讯云。数据库工程师丁飞,嗯,现在主要负责我们分布式数据库TPG的内核开发的一些相关工作。我今天分享的主题是我们TDPG透明压缩和透明加密的相关实现。嗯,此次分享呢,主要分为四大部分,包括我们的整体架构介绍,然后压缩方法的简介,还有我们透明压缩的实现啊,然后还有一些加密和脱敏的相关介绍。我们先来看一下我们的这个TD的整体架构,TDG是一款分布式数据库,在内核层面由GTMCN和DN节点。组成,其中GM是我们的事务管理器,负责协调我们整个集群的事务,然后管理全局的对象。
39:03
然后CN节点呢,是我们的协调节点,是我们每个业务的访问入口,每个节点之间是相互对等的,都能对外提供一呃一个一致性的视图。嗯,DN节点是我们的数据节点呃,业务运行过程中产生的数据都会在DN节点上进行存储,然后我们的数据和数据库内核配合我们的呃,Oss系统呃,可以一起对外提供指标监控,运维管理,实时告警,安全审计,还有数据治理的一些运维管控能力。随着业务的这个不断进行,所产生的这个呃数据会越来越多,所以对我们的这个DNA节点的存磁盘存储就造成了呃越来越大的一个压力,嗯,所以我们的这个数据节点的存储容量就会越来越成为呃至于我们整个it系统部署密度,然后影响我们系统成本的一个主要因素。
40:05
因此我们现在有很多数据库的客户都会要求相应的数据库系统具备数据存储压啊压缩存储的一个能力。那针对压缩的需求呢,也会有一些特定的压缩方法,其中一个就是刚才洪博给大家介绍的一些常用的这个智能存储介质,这种方式呢,就是会说在我们原有的这种SSD内部引入一个计算引擎,然后我们的数据呢,按照常规的方式来写入我们的SSD,然后我们的盘内的这个计算引擎呢,就可以对我们写入的这个数据啊进行压缩处理。之后再把写呃压缩之后的数据写入到我们的真正的物理存储介质介质里面,呃整个这个压缩呢,是对业务而言是一个透明的呃一个技术是呃上层业务呃基本上不会感知,然后应用方面呢,也可以不进行修改。
41:08
而且它是相当于是一个零拷贝的技术,不需要做额外的数据传输,嗯,并且当我们的数据量增长较多的时候呢,我们也可以方便的增加多块盘来实现整个压缩能力的一个线性扩展。对于一些传统的关系关系数据库啊,例如Oracle啊,或者是MY或者是的都可以直接部署在这种智能存储的呃介质上进行使用,嗯,而且这种我们的数据库在上面运行的时候,嗯,它本身的这个数据进行压缩,也不会占用数据库的业务CPU。所以整个使用起来是很方便的,呃,对我们数据库呃,本身的那个性能也不存在影响,但是目前而言呢,嗯。嗯,虽然这种就是存储介质有各种的优点吧,但是目前而言还是有较少的客户会选择使用这种嗯存储介质来进行这个数据库上的部署,呃一个主要的原因呢,就是咱们的这种存储介质相对而言呃就是价格比较高,呃整体部署的话成本嗯较大,所以现在嗯基本上没有,就是有一个呃大批量使用的一个能力。
42:26
嗯,还有一种常见的压缩方法是使用数据编码。因为我们数据库关系表里面存放的一般是一些结构化的数据,就像我们一列的数据,呃,一般是具有相同的数据类型,而且会具有明确的数据边界。嗯。呃,而且对于不同的列之间,如果他们之间有相呃有关系的话,那么这些列之间的数据也有可能会有较多相似的数据。所以我们就可以利用我们数据,呃,我们这些数据本身的一个,呃,明确的这个字段边界,还有这个丰富的类型信息,然后再配合我们的这个编码技术来实现这个数据文件的一个压缩。
43:12
我们左边的表里面列了一些,呃,常用的这个编码方式,包括我们的字典编码,R编码,常量编码,差值编码,还有前缀编码,这些不同的编码方式呢,一般会有不同的这个使用场景,像字典编码呢,它是一些较为通用的一种编码方式。然后re Le呢,则是主要用于一些连续的相等的数据的呃编码使用,嗯编码则主要是针对近似性呃,常量化的一个数据。然后差值编码就适用于在一个小值范围内分布均匀的这个数据型,嗯呃,整型数据类型,前缀编码就是适于我们前缀相同的字符型数据。
44:00
然后我们的右边呢。列了一个就是简单的呃数据库呃使用那个字典编码对页面进行压缩的一个示例,嗯,我们呃数据库就是嗯会在呃一个页面满,或者是说这个页面里面的这个呃行的数量达到了一呃一定的这个预值之后,会采用这个呃字典编码,把我们重复性较高的数据进行一个去重,然后呢,把去重的数据啊建立一个字典,嗯再把原来就是直接写值的地方呢,改为存成指向特定字典下边的一个引用。以此来达到就是压缩页面数据的一个效果。嗯,这种方式呢,它存在一个问题,就是不太适合频繁更新的场景,因为我们一旦会进行这个页面数据的更新的话,那就会涉及到我们这个数据字典的一个重建,而与此相对应呢,我们原来存储字典下标的地方呢,也需要进行不断的变动。
45:05
这这样的话就会,嗯,极大的影响我们的这个使用起来的性能。另外一方面,在工程实现上,其实它也是需要对现有的这个页面结构做出一定的改进,因为我们原来的这个页面是不存在这个呃字典区域的,现在我们如果要实现这种方式还需要。在页面上增加相应的字典区域,然后把原来的这个原组存储的格式呃进行变化,嗯,所以它整体呃实现起来会对现有的页面冲击较大,实现嗯,实现嗯稍微会有一些复杂。然后还有一种就是压缩方法,是使用通用的压缩算法,我们数据库中的数据进行压缩,呃,常见的压缩算法呢,会把我们输入的这个页面数据当做一个连续的字节流来进行处理,然后基于一些经典的这个编码算法。
46:05
例如像串编码或者是底商编码来实现对这个信息的压缩。我们这个表格里面列了一些常见的,就是呃,压缩方。压缩算法,嗯,不同的压缩算法他们呢,其实追求的目标,嗯是不一样的,就像LZ,它其实是追求一个快速的压缩和解压的一个速度,而SSTD呢,则主要是追求说有一个高的压缩比。嗯,在我们数据库里面呢,我们数据库里面存储的这个,我们的八份里面存储的这个原始页面,一般而言都是一个具有固定大小的。那随着呃呃这种方式有一个好处,就是说我们在呃将我们的这个页面写入到呃磁盘中的时候,能够呃能够有一个较好的方式来计算出我们每一个页面在文件中的这个拼音位置,以此来方便对这个页面进行读或者是写。
47:10
那如果我们对这个页面,嗯,对我们的这个页面引入了压缩算法之后,嗯就会出现一种情况,就是因为不同的页面它存储的那个文件内容是不一样的,所以我利用了这个采用了压缩算法之后,它实际压缩后的大小是呃不不固定的,而且即使是对于同一个页面,随着那个增删改的进行。嗯,它压缩之后的数据大小也是有可能有变化的,所以引入压缩之后就会存在说我我再重新去磁盘上读取相同的页面的时候,我的偏移位置就会发生变化。这样就对我们的这个整个数据库层面的读写产生一个巨大的冲击。
48:00
所以为了解决这种问题呢,在数据库领域,一般而言会说,呃,新增一个新的这个呃压缩文件类型,呃这个新的压缩文件呢,它里面的每个页面也都是固定大小不变的,只不过它的压缩页面的大小呢,一般是比原始页面小的。一般会配置成原始页面的1/2或者1/4,或者是1/8的这样一种配置,嗯,以此来存储,就是压缩之后的这个数据。嗯,这种实现方式呢,它有一个。嗯,举一个问题,就是其实它的压缩主要受限于我呃我的这个压缩页面大小的配置,嗯,例如我假如我的压缩页面配置的呃较大的时候,那我当前的数据量本身就比较小,那我压缩之后呢,呃所占用的空间也比较小,但是我的由于我的压缩页面比较大,所以我写入到呃磁盘文件里面的时候呢,我还是要占一个压缩页面大小。
49:08
这个时候呢,就达不到我们想要的节省磁盘空间的一个目的。那如果我把我的这个压缩页面设置的较小,它其实还是也会存在另外一个问题,就是说相当于我原有的一个页面呢,有可能是需要我多个压缩页面进行一个存储,那就相当于我一个原始的页面会分裂成多个的压缩页面,那我就需要额外的这个原数据信息去进行额外的存储,然后呢,我还是我在读取的时候,还需要对这个呃,原有的这个呃压缩页面解压之后,再把多个压缩页面重新拼装成我的原始页面。然后实现,实现上又增加了我的实现复杂度。嗯,所以呢,我们的目标是为了实现数据文件的压缩来节省存储空间。然后我们又想要说我的这种实现方案是我的高并发更新的场景,而且我们又希望说代码有一个侵入性较低,而且实现又简单的方案。
50:19
嗯,通过前面的介绍呢,我们先把那个智能存储介质排除掉,因为它本身是属于磁盘层面的一个压缩方案,不属于数据库本身,嗯,暂时我们不考虑这种方方式。另外一个呢,就是呃,数据编码方式,因为数据编码方式前面介绍了,它其实不适合我们频繁更新的场景,而且它需要对它会对这个现有页面的这个结构造成较大的冲击,不满足我们这个嗯代码侵入性的要求,所以最后我们是先把就是实现了一个基调定在定在了我们使用那个。
51:01
通用压缩,嗯,通用压缩方法上,嗯,然后通用压缩方法就是还是说存在刚才的一个问题,就是页面压缩之后,我这个大小是不固定的,所以我的这个偏移也是不固定的。那么如果我有一种方法说能够让我的页面压缩之后,我还按照原有的,就是原页面固定大小的那种方式去进行一个偏移的查找,然后来进行呃,压缩之后数据的一个写入,然后呢,又能把我压缩之后节省的空间给释放出来。那如果有了这种工具的话,我整个实现就会简单很多。所以这个时候我们可以用到文件系统本身提供的一种打动的能力。所谓文件系统的打动这个能力,就是说在我们嗯,保证文件其他属性不变的条件下,告诉文件系统,嗯,我在这个指定偏移,然后指定偏移的这个位置上,我有一段这个空间,我不需要了,我可以主动释放出来这个文件所占用的物理空间。
52:13
嗯,所以呢,有了这种方式之后呢,我们就把这个最终的这个压缩方案定成使用推广压缩,再加文件打动来进行一个实现。嗯嗯,我们整个方案呢,是以说我们的一个页面为一个,呃,压缩的力度,然后在我们页面落盘的时候呢。嗯,先进行这个使用压缩算法对我们的页面进行压缩,然后压缩完之后呢,按照原有的这个呃页面偏移的计算方式,找到我页面应该写入的呃位置,然后把我压缩之后的这个数据写到固定的位置里面,然后写呃一定的这个压缩之后的文件大小,然后呢,就是对于这一个固定页面的这个大小,呃,除去压缩数据之后的剩余的这个这一部分呃这一部分呃这个所占用的空间,我就可以利用这个打动的工具来把这一部分磁盘空间进行一个释放。
53:16
那我的文件读取的时候呢,同样我我在磁盘里面去找偏移的时候,还是按照原有的这种偏移的方式找到我的这个对应的文件页面,然后给它读上来,读上来之后先进行一个呃页面的解压,然后再把我解压后的这个数据放到我的这个呃共享的buffer里面。嗯嗯,以此来实现我们这个就是写入和读取的这个流程,嗯,有一点需要注意的就是我们的,呃,因为我们是用那个文件系统的打动来释放这个空间嘛,文件系统打动它本身有一个限制,就是说呃,我必须呃只有我打的这个大小呢是。
54:04
呃,就是大于或者是等于说,呃,我这一个文件系统本身一个页面大小的时候,我才能释放出来空间,否则的话,我这个打动其实是生效的这部分空间,这个页面对应的空间我还是要占用上的。所以呢,如果我们的原始页面经过压缩之后呢,它不能呃所释放的这个空间,嗯,所节省的这个空间是比我的这个文件系统本身的一个页面大的时候呢,我们才会在这个磁盘里写入我的压缩后的数据,然后再进行打动,如果它是节省的空间比我文件系统自身的这个页面大小是小的时候,那我们还是在呃,原原来的位置上写入我的原始。就是没有压缩的这个页面数据。然后呃,回头我那个读取页面的时候呢,我可以直接读上来,也节省了我这个呃,解压的这个动作。
55:06
嗯。然后为了让我们的这个提高,我们在检查点,嗯,落盘的时候的这样一个压缩的速度呢,我们也在检查点的时候做了一下那个并行压缩的一个优化。就是我们会在,就是呃,刷印的时候呢,先把我们的这个ID。呃,加入到我们的这个每一个压缩线程的对应的这个,呃,压缩队列里面,然后呢,呃。我们的压缩主循环会发现呃,发现我的这个待压缩队列里有数据,它就会取相应的页面进行压缩,压缩之后放到对应的呃里面,然后再把对应的这个BID的呃信息加入到我们的压缩队列里面。
56:01
嗯呃,但是有一点需要注意的就是我们把这个ID加入到待压缩队列里面之后,不是说一定要等到这个页面压缩完成,嗯才可以,我们是加入了之后就返回,然后下一步是立刻进行查询这个压缩的队列。当呃,然后呃,当发现我已压缩队列里面有数据的时候呢,我就会把相应的这个BID的信息加入到我的一个b ID list里面,然后我们就会呃便利这个list,对这个呃list里面对应的这个页面进行一个盘的操作。所以我们整体下来呢,就是在检查点的时候,我们的压缩是在,呃,不同的这个。压缩线程,呃里面是一个变发的一个操作,然后我们的这个压缩,还有我们文件写盘呢,是相当于是一个拍烂的一个动作,以此来提高我们的这个呃压缩的呃在检查点时候的压缩的速度。
57:07
嗯,除此之外呢,我们也做了一下,就是呃呃,CU整理页面的时候的一个压缩优化。嗯,因为我们的这个原组更新的时候呢,不是一个原位的更新,我们会在原有的这个呃原组上面做一个删除的一个标记,然后再插入一个新的呃元组。嗯,这样的话呢,在我们的页面里面其实就会有一些带ta的一个存在,所以我们是有这个auto vacu的一个呃进程会定期的对我们的这个页面进行一些清理,然和整理,呃整理的一个动作,所谓的整理就是会把我们的这个页面里面有效的一个元组,按照呃原有的这样一个组织方式呢,从页面尾部开始。呃进行排列和插入呃,然后对于呃其他的那些呢,就会进行一些在上做一些标志,表示他们是可以重用的。
58:11
所以在页面整理之后呢,那些没有用的这种空闲空间,我们可以给他,嗯,给他们做一些的一个操作。以此呢,来提高一下我们整个这个页面里面的这个相应的这个呃,数据的一个重复度。嗯,然后我们做了一个简单的测试,就是在嗯首先对表进行就是呃不同的不同程度的一个更新吧,就是大概有呃20%,然后到逐渐到100%的一个更新方式。嗯,然后我们就会发现,当在全表更新的这种情况下呢,我们就是优化后,比我们优化前的这个页面的大小呢,会有大概百分之。30的一个磁盘空间的一个节省。
59:05
嗯,然后。呃,为了呃,然后呃为了那个呃让备机,我们的备机也支持压缩,我们也做了一些呃相应的适配,呃其中一个呢,嗯,我们先我们先来看一下,就是备机它的那个信息来源渠道,主要是来源于主机的日志嘛。嗯,所以机呃其中一个获取的压缩信息的场景就是服务配置,服务配置它是说呃,我们在切之后呢。会在呃页面第一次要做修改之前,呃我们会把这个页面呃记录到我们的这个在four page的这个机制下呢,会把我们的页面记录到这个日志里面,然后我们的备机在应用到这种类型的日志的时候呢,就可以获取到呃页面上面记录的这个呃压缩的呃页面的页面头上记录的这个压缩信息。
60:08
然后背机就可以。嗯,在实际背景页面落盘之前呢,就根据这个压缩信息,嗯,进行页面的压缩,然后进行一个打洞的处理。但是还有一种场景就是嗯备机自己在回放其他日志的时候呢,它有可能会产生一些新的页面,例如就是说假如我在回放一个插入的呃操作的时候,那我当前的这个页面的空间不足了,我需要新增一个页面来进行插入,这个时候呢,贝极就会初始化一个新的页面,或者是说贝吉在呃回放新建索引的日志的时候,或者是索引分裂,或者是原数据初始化等一些操作的时候呢,都会涉及到一些呃页面的这个初始化初始化动作,嗯机本身是没有这个压缩信息嘛。
61:04
所以他要想得到这个压缩信息,我们就需要把在主机里面,嗯,对这种相应的一些日志类型,增加我们的这个压缩信息,嗯,给备机进行应用,这样备机在初始化这个页面,嗯初始化一个页面之后呢,就可以把这个压缩信息设置在这个页面的页面头上,然后后续就可以按照这个正常的流程去呃做一些操作,然后在那个呃实际的落盘之前呢,再根据页面头上的压缩信息进行压缩处理。嗯,除了机之外呢,还有一些数据库,呃,相对应的一些配套也需要做一下那个压缩的一个支持。呃,其中一个就是我们的机重建,我们的重建是使用pup工具,这个工具呢,就会读取我们对应的主节点上的一个数据文件,然后把这个数据文件备份到指定的目录下。
62:07
呃,因为我们的这个呃,我们的数据文件是经过呃打动处理的,呃,但是我们在读取这个数据文件的时候呢,它会把每个页面对应的这个压缩信息读上来,然后会把这个空洞,空洞部分会进行一个零的传输,呃,零的零的填充,这样的话,我备份下来的这样一个文件的每一个页面的大小,其实还是等于我没有压缩。没有压缩之前的一个大小的,所以为了应对这种就是重建的这样一个压缩的情况。我们是在获取了每个表文件之后呢,我们会把这个表文件的每个页面都给读上来,然后根据页面上记录的这个压缩之后的这个呃大小,找到我呃那个嗯空洞该对应的这个偏移位置,然后在这个指定的这个偏移位置上再重新进行我的一个打洞处理。
63:11
嗯,当然了,为了那个提高我这个处理的一个速度呢,我们也是对于多个文件,嗯,开启了一个这个并行处理的一个。嗯,功能嗯呃,然后呢,还有一种就是还做了另外一个就是压缩信息查看的一个支持。呃,我们之前呢,想要查看就是磁盘里想要查看就是表的每个页面的一个,呃,指定页面的一个信息呢,我们是通过就是配置啊配置,呃,Inspe的这个插件提供的一些函数,它能够读取就是指定页面上的这个信息,但是他在读取的时候呢,是说要是通过把这个文件读上来,然后读到B里面,然后再进行这个解析和显示。那我们对于压缩而言呢,其实我们不想要那个呃,B里面的信息,我们真正想看的是说磁盘中实际上存储的这个压缩的信息。
64:12
所以我们就在这个插件里面也增加了一些函数,就是能够支持我们从磁盘中直接把相应的页面读上来,然后读上来之后呢,我们再去解析呃,这个页面头,然后把对应的这个压缩信息给我,嗯。显示出来。另外还有就是呃压缩率的获取,我们也是做了一下支持,因为我们是通过就是呃那个呃文件系统的这个打动功能来实现的压缩嘛,呃文件经过打动之后呢,它我们用简单的这个C的命令,或者是说我们的L命令的。得到的这个大小其实是包含这个空洞大小的,而如果我们呃,但是我们实际存储的呢,是不包括这个空洞大小的,所以我们就可以利用这两个实际的这个呃比值来方便的获得获取到我们的这个压缩比。
65:15
嗯,再再然后就是我们,嗯,还是支持那个表和索引的这个压缩存储参数的一个设置。嗯,然后我们可以看一下我们的压缩和压缩的设置和查看的就是的一个呃那个使用使用示例,呃,我们可以对我们的呃压缩,呃可以对我们的表和索引分别去制定不同的这个压缩算法,然后我们也能够通过我们的这个杠加的方式来看我们的这个整个表的信息,然后在这个信息显示里面的我们的这个选项的就能够列出我们的这个压缩的呃压缩的情况,然后如果我们要想要看就是每个页面的情况呢,我们也是提供了这个函数支持,可以列出来这个对应页面里面的这个呃压缩算法,还有压缩之后的这个页面的大小。
66:15
然后嗯,还有我们,呃,如果想要看一下我们整体的这个整个表的一个压缩的一个概述的话呢,也是提供了一个函数支持,就是可以看出来当前这个表有多少页面是压缩的,或者是有多少页面是没有压缩的这样一个情况。嗯,然后我们也是做了那个压缩,还有压缩的这个PCC,还有P的一个测试。嗯,因为我们主要想做测试做对比的,主要是想说看我那个压缩开启了之后,嗯呃会有怎么样的影响,所以我们在测试的过程中呢,我们是把我们的18设置的呃比较小,然后我们是呃呃构造出来一个就是呃页面频繁的一个换入换出的一个场景啊,然后在这种换入换出的情况下,会对页面做频繁的这个压缩和解压的操作。
67:15
嗯,从我们这个测试结果上可以看到,我们的在TC模型下,我们的这个压缩比大概能到2.3,然后我们这个TC会有就是15%的性能下降。然后PG奔驰模型下呢,呃,我们这个压缩比达到这个6.8,呃,然后TPCB呢,有大概17%的一个下降,嗯。因为我以我们目前采取的这个压缩策略来看呢,就是采用那个推样的压缩算法嘛,其实它从本身上来讲,就是以那个呃时间来换空间的一种实现,所以我们的这个性能化呢,是呃也是在我们的预期之内的。
68:03
嗯。以上呢这些呢,就是我们今天就是压缩方案呢,就是所有的内容,嗯,因为我们的这个压缩,呃,我们的这个透明压缩呢,跟我们的这个透明加密的一个主要流程是大概相似的,所以我们这次分享也介绍一下我们嗯我们嗯TPG的一个透明加密相关的一些东西,嗯,首先我们来看一下,就是我们嗯嗯TPG的一个整体的安全体系。嗯,我们的安全体系呢,是以呃数据库呃三全分类为基础的,我们把传统的这个DBA的角色分解成了安全管理员,审计管理员,还有呃数据管理员。在安全规则领域呢,我们针对安全管理员增加了安全规则和数据透明,呃呃数据透明加密和透敏的规则,然后在审计方面的结合业绩的审计标准,还有业务的一个场景需要增加了呃对象审计,用户审计,还有一些细力度审计。
69:15
嗯,除此之外的数据管理员呢,就履行之前的DBA的这个数据管理和数据库运维的一个职能。通过这个呃,这三个呃角色的划分呢,我们就从根本上杜绝了系统的安全死角。嗯,我们的安全管理员呢,负责整体安全规则的制定,然后通过这种方式来约束系统中所有的角色,嗯,审计管理员则负责制定审计规则,审计系统中包括审计管理员在内的所有角色,做到我们这个系统的所有操作都是具有一个可追溯性。而我们的数据管理员就负责我们数据库日常的运维了。
70:00
我们这三个管理员之间呢,相互约束,然后相互呃,相互监督。我们的呃安全方面的呃强制安全规则呢,是根据我们的这个安全呃安全规则三元组来进行设置安全访问权限,然后我们会把这些设置的规则呢,记录在安全相关的一些呃系统表里面,作为我们这个存储和访问的一个设置依据,呃我们就不展开呃进行介绍,我们主要来看一下我们的这个加密和脱敏。嗯,首先来说一下,呃,那个加密,加密主要是面对我们数据文件本身的泄露问题,就比如我的文件如果被别人拿到了,然后他就能够通过代码把数据给解析出来。嗯,因为我们现在常见的这个数据库的存储格式呢,基本上是属于一个半公开的状态。
71:01
也就是说大家只要拿到了这个数据文件,嗯,他再配合一个相应的这个数据程序,其实就可以解出来我们呃里面对应的一个数据。那这种情况下呢,我们就呃需要通过呃数据中心对于我们一些呃有有保密要求的一个文件进行一个加密来防止泄露,所以我们就需要把我们存储的文件嗯进行一个加,嗯。我们TDCQPG呢,是支持呃表级加密和列列级加密两种方式的,嗯,首先就是呃,通过这个图上我们能够看出来,我们的表加密的流程其实和我们的那个压缩的流程是很相像的,很相似的就是。他一般是会说在我们的这个页面进行落盘之前进行一个加密的处理。
72:00
然后呢,嗯在呃,然后呃在进行落盘,在磁盘里存储的是我们的这个密文的经过加密之后的这样一个文件,嗯,然后当我们有读取需要的时候呢,我们从磁盘上读上来之后,就先进行解密,然后把解密后的数据放到我们的B里面,所以用户能够在读取的时候呢,可以直接从buffer里面获取,然后给用户,呃呃获取的也是一个铭文的一个数据。然后我们的这个列加密呢,就稍微有一点不同的是,我们列加密是说会在这呃一行数据进行插入的时候呢,会把这一列的这个值先进行一个加密,然后加密完了之后再呃呃插入到我们这个buffer里面的页面里面去,所以我们的buffer里面就是一个加密的一个状态,然后我们的这个呃磁盘里存的也是一个加密的一个文件,嗯,然后当有用户需要就是呃使用呃使用这一列或者是这个页面的时候呢,我们将会对这个相应的这一列先进行解密,然后再给用户进行一个明文的显示。
73:18
嗯,再来说脱敏,脱敏呢主要对应的一个呃,呃使用场景就是指我的数据呢,在访问的时候,有些数据的用户他是没有权限去看到这些数据的铭文的,但是呢,他还需要说做一些运维的操作和或者是一些其他工作上的需要,还要能访问这些数据,但是不需要真正知道这些数据到底是呃,到底是呃哪些到底是呃这些数据的一个真正的一个呃存储的结果。所以针对这种场景呢,我们就可以在我们的文嗯磁盘里面存储的还是我们正常的明文数据,然后在只有在用户进行读写的时候进行处理,就是如果我在用户读取的时候,我发现是呃授权的用户,那他就可以直接就是从buff拿到我的这个正常的数据,然后进行显示,但是如果我发现是非授权的用户要对这一列进行读取的话。
74:24
那我就,嗯。先对我的这个数据进行一个嗯呃,脱敏处理,然后把脱敏后的这个结果给我的这个非授权用户进行展示。嗯,我们的我们的加密和脱敏之间呢,是互不冲突的,所以可以呃进行就是呃灵活的一个呃搭配使用。嗯嗯,也就是说我们既可以对我们的这个存储内容进行加密,也可以针对不同的用户,采用用户自己设置的一个脱敏规则,来保证我们数据访问的一个隔离性。
75:05
嗯,然后我们列了一下就是呃加密,呃加密和脱敏的一个使用的简单事例,嗯,在这个例子里面呢,我们的就是非授权用户呢,是我们的,嗯,分公司经理和那个人力资源经理,然后我们授权的用户呢,是我们的董事长,嗯这样的话呢,对于就是同样一个表格来而言呢。我们的董事长他就能看到所有的这个呃信息的原始状态,嗯,就是对于薪酬和家庭,他也都能正常的一个显示,但是对于呃这个非授权的这个分公司经理呢,嗯,薪酬和家庭信息,他看到的都是我们脱敏之后的一个结果啊,例如在这里面例子里面,他就能只能看到薪酬是零,然后家庭信息是空这样一种,嗯这样一个结果,所以通过这种方式呢,我们就可以嗯很好的来隔离我们系统里面不同等级的这个用户,对于同样的一些数据看到的一个不同的一个数值,呃,一个视图,以此来达到我们的这样一个隔离的效果。
76:18
嗯。然后就是呃,因为我们的这个加密和那个压缩,他们的这个流程是大概相似的嘛,所以嗯嗯,所以他们。当然也是支持,就是加密和压缩的一个同时使用的,那呃,在这种情况下,我们是处理逻辑是什么样的呢?就是我们的整体处理逻辑是不变呢,还是说要在原始的页面进行落盘之前进行压缩和加密的一个处理,然后在我们读取的时候进行一个解密和解压的一个处理。但是这里面有一点需要注意的时候呢,就是注意的事情就是说我们要保证我们嗯这个压要先进行压缩,然后再进行加密,呃主要的原因是因为呃我们呃压缩对于那种。
77:15
结构化的一个数据,嗯,能够能够有一个较好的达到一个较好的一个压缩效果,嗯,因为我们数据页面本身嘛,存储的就是相对呃相对结构化的数据,所以如果把原页面作为我们的输入源呢,我们的这个压缩效果会相对较好,但是如果我把呃原页面先进行加密,那加密之后我得到的数据其实是相对杂乱的一个数据,那我再把这个相对杂乱的结果作为我压缩的输入源,那我的压缩效果就会大打折扣。所以为了这个保证这个,嗯。压缩和加密的一个正常使用吧,我们就把这个在处理的时候会先进行压缩,然后再进行加密,那与此相对应呢,我们解密的时候,我们就是在读取的时候呢,也是先从文件,嗯,先从磁盘读取来之后,我们先会对这个页面进行解密,然后再把我解压啊解密之后的这个数据进行解压,然后放入到我的这个八分里面。
78:24
嗯,以此来就是保证我这个数据的一个正常的读和写。嗯,以上这些呢,就是我们今天分享的我们的透明加密和压缩的一些,呃,主要的内容啊,我们来看一下我们的这个大家有没有什么问题啊。嗯。首先就是呃呃,第一个如果系统CPU压力比较大,可以取消压缩嘛,我们这个是支持取消压缩的,因为我们嗯。嗯,可以通过就是al al一个表来把它的这个压缩给取消掉,然后取消掉之后呢,呃,我们磁盘里面可能会存呃原来存储的是一些压缩的页面嘛,但是他也不会说呃,我们在读取的时候,我们可以直接通过我们呃原呃我们本身的这个呃页面头信息是不压呃不压缩的,所以我们还是可以根据我们页面头上记录的这个压缩信息啊,来进行原有的这个压缩页面的一个解压,也不会影响后续的这个呃正常使用,然后当这个页面在呃就是取消压缩之后,我们后续再进行存储的时候,就直接会以呃就是原始页面的这样一个情况进行存储。
79:51
嗯,然后。数据编码确实是,嗯。性能损耗很低的压缩技术,嗯呃,PG支持了吗?PG,呃,PG现在的呃方案应该是没有支持那个呃就是PD通用表的一个压缩是呃呃是没有呃支持这个编码压缩的,但是嗯在PG呃自己就是会对那个透表会有一些,它就是PG自己的一个压缩方式,会对特色表做一些压缩,然后PG也有一个,就是PG有一些吧,会呃使用就是一些。
80:39
嗯呃,那个产呃会呃PG会有一个,就是是通过那个新增一个呃,就是压缩地址文件,还有压缩数据文件的一个方式来实现压缩的,但是就是在编码压缩方式上面好像还没有实现。然后一个页面多大,一次压缩一个配置压缩比是多大,嗯,我们现在呢。
81:10
因为我们是采用这种打洞的方式进行压缩嘛,所以呃就是呃,当我们原始的一个页面,呃。比较大的时候,它才有可能是说我压缩之后节省的空间,嗯,超过我一个文件系统本身大小,就是文件系统本身一个页面的大小大概是4K嘛,所以我们在支持呃压缩的版本上是嗯,是一般会将我们的这个页面大小设置成32K。然后一次只压缩一个页面,是的,我们嗯,就是我们的压缩是以页为力度的,就是会在每个页面落盘的时候进行这个页面的压缩,然后压缩比这个其实是根据呃页面自身的这个情况来定的,如果我的页面里面这个呃重复性里面的数据是重复性比较高的,那我的压缩比其实最大能呃就是32K比4K嘛,能达到八。
82:13
然后如果我的本身重复度不高,那有可能就是我压缩之后并不能节省空间。还是我的压缩比还是一。嗯。嗯。嗯。这个。嗯。然后还有一些列加密方式,加密的列可以做一些常见的或者是计算之类的嘛,嗯,列呃,对于那个加密的列呢,是可以做,是不影响这一列,呃跟其他的表去做一些。嗯,产生的呃join或者是计算呃,当然前提是得对这个呃呃是是,就是我们会在呃那个这一列正常使用之前呢,会对这一列先进行一个解密,然后把这个对应的元组重新进行一个组装,以此来实现这个呃这一列数据的一个正常使用。
83:23
嗯。嗯。然后嗯,可以加一下微信,想深入了解一下,嗯,对我们产品感兴趣的同学呢,可以先在这个腾讯云数据库公众号上进行留言哈,然后我们会针对大家的问题再做统一的一个回复。嗯,好,最后我们进入我们的这个抽奖环节,我们第二轮的抽奖呢,是我们的怪奇鹅记忆记忆年行,然后呃,请我们嗯同学扫描一下我们屏幕上的这个二维码来进行抽奖,然后嗯呃,还有抽奖的同学们一定要填写啊,填写好自己的联系方式和邮寄地址啊,我们方便我们后续的工作人员给大家邮寄奖品。
84:17
然后我们整个抽奖活动呢,在今晚11点之前都可以参与哦,嗯嗯,然后抽奖结果会在11点之后进行公布,好,我们现在给大家预留一些时间,倒计时十秒。好,那我们,嗯,在直播的最后呢,非常感谢我们各位小伙伴参与到我们的活动中来,嗯,欢迎大家扫描我们的二维码,然后关注我们,后续有更多的活动,嗯,我们下期再见。
我来说两句