栏目分类

你的位置:精品久久久国产中字 > 精品久久久国产中字久久精品中文字幕极品 >

精品久久久国产中字久久精品中文字幕极品

久久一本精品久久,亚洲堂久久亚洲堂天

久久一本精品久久,亚洲堂久久亚洲堂天

简介: PolarDB MySQL是阿里云自研的云原生数据库,主要处理在线事务负载(OLTP, OnLine Transactional Processing),深受企业用户的疼爱。

引子

数据库迁徙上云是大数据期间的一大趋势,PolarDB MySQL是阿里云自研的云原生数据库,主要处理在线事务负载(OLTP, OnLine Transactional Processing),深受企业用户的疼爱。当下,数据分析对于企业的进击性越发显赫:企业使用数据驱动决策,利用分析驱散精确调配资源,从而缩短老本,提高企业效力,激动业务更正,快速适合外部环境的变化。可是,传统数仓架构的滞后性遏抑了企业的更正行动。因此,企业对OLTP数据库建议更高的要求,但愿能在OLTP数据库同期进行复杂的实期间析(OLAP, OnLine Analytical Processing),实时应答业务环境的高速变化。

为知足搀杂负载(HTAP, Hybrid Transactional/Analytical Processing)的需求,部分客户取舍了MySQL + Clickhouse的决策,但困扰于着两套寥寂系统的高使用和高小器老本,以及系统间的数据不一致等问题。客户寻求在一套系统上齐全地应答HTAP负载的贬责决策。对此,PolarDB MySQL 时间团队建议了基于In-Memory Column Index(以下简称IMCI)的HTAP时间决策,在PolarDB MySQL行存守旧OLTP的基础上,原生地构建列存索引以及已毕列存狡计引擎,守旧高效地实期间析,在TPC-H测试中赢得数百倍于行存的加快效果。对于PolarDB HTAP和IMCI的防范先容参考《400倍加快, PolarDB HTAP实时数据分析时间解密》[1]。

本文先容数据的压缩方法以及PolarDB HTAP在列存数据压缩上的责任。PolarDB MySQL算作云原生数据库,具有存储狡计分离的特色,狡计资源独不错进行按需分派,而存储恒久固定存在且不息增长的,需要压缩对存储老本进行遏抑。IMCI的数据存储是为列存局面,列数据比较于行数据具有更高的雷同性,利于数据压缩。通过压缩,IMCI在大部分业务场景将列存存储空间减少到十分之一,大幅减少客户的存储老本。另外IMCI通过数据压缩,减少数据的大小和存储窥伺支拨,并探究将狡计下推到压缩数据从而加快分析,进一步为客户提供更好的OLAP查询性能,已毕HTAP系统性能和老本的兼得。

后文主要分为4个部分,在“数据压缩详尽”部分咱们从数据压缩的表面基础——信息论谈起,联接数据库中的数据压缩问题进行商量。在“压缩算法分类和先容”中,咱们将压缩方法分为通用压缩和轻量压缩,先容数据库中最常见的通用压缩方法旨趣,然后一一先容轻量压缩,并商量字符串的轻量字典压缩,为下一个部分铺垫。在“延长解压加快狡计”部分,咱们先容压缩数据上的径直查询的优化时间,又称为延长解压时间,然后分析基于字符串字典压缩优化的旨趣和难点。临了,咱们进行“转头以及后续责任”的商量,预计PolarDB HTAP在数据压缩主义的后续责任。

数据压缩详尽

压缩算法包括无损压缩和有损压缩,本文咱们只商量无损压缩,即解压后的文本与压缩前的文本全都疏导,后文的“压缩”都是指无损压缩。压缩算法由编码妥协码两部分组成,编码妥协码实质上是将文本映射到另一个更紧凑的文本空间以及逆映射的经过。

压缩与概率是良好联系的。统共的压缩算法对于输入数据都有一定的事前假定,这种假定不错用概率形容,举例假定某种数据访佛的概率或某几种数据一齐出现的概率高。香农的论文《通讯的数学旨趣》,被视为当代信息论研究的起初,恰是信息论将数据出现的概率和数据所需编码长度估量起来。在论文中,香农从统计物理学中模仿了熵的想法,界说了信息熵[2]:

H(S)即信息熵,S是统共信息s组成的集会,p(s) 是信息s出现的概率,s ∈ S。i(s)示意需要编码单个信息所需要的比特数,而信息熵H(S)是i(s)以概率p(s)为权重的加权平均,示意编码信息集会S所需的总比特数。

举个例子爽直默契这两个公式。咱们假定96个可打印字符出现的概率疏导,那么编码每个字符需要的平均比特数,即i(s) = log_2(96) = 6.6 bits/char,较着,至少7 bits才不错示意96(2^7=128)个不同的字符。如果咱们基于一个英文文本集(举例Calgary Corpus)进行统计,使用字符的频率近似概率,狡计出信息熵的平均值i(s)为4.5 bits/char,具体编码不错通过huffman编码算法得到。这个估算以为字符间是寥寂的,如果洽商上相邻字符、单词间的关集合合超大文本进行统计,编码字符所需要的比特数是1.3 bits/char,8/1.3 = 6.15近似为轻易英文著述的压缩比的上界。

通用压缩算法对输入数据仅做爽直的假定,如假定数据存在局部雷同性等。GZIP和BOA在Calgary Corpus文本集的压缩效果为2.7 bits/char和2.0 bits/char,如果要更接近英文文本的压缩上界,通用压缩算法需要英文词频和语法等算作输入,这将影响其通用性。咱们鄙人一部分对常见通用压缩算法的旨趣进行爽直先容。

编码可打印字符所需要的比特数,因此数值越小,讲解压缩效果越好,图源自[2]。

了解压缩与概率的关联后,咱们望望数据库系统中的数据压缩问题。领先咱们关切OLTP数据库和OLAP数据库的数据存储局面,常见的OLTP数据库的存储引擎包括基于B+Tree的innodb和基于LSM-Tree的X-Engine和rocksDB等,它们使用行式存储,表数据按行水均分割,每个纪录会包含各个不同的列。而OLAP数据库使用列式存储,表数据按列垂直分割,每列数据单独存储。假定使用通用压缩算法,合并列数据的局部雷同性一般高于不同的列,因此列存比较行存自然具有更高的压缩比。

行式存储,表数据按行水均分割 vs 列式存储,表数据按列垂直分割

另一方面由于列存按列组织数据,因此不同的列不错取舍不同的压缩算法,鄙人一部分咱们将看到轻量压缩笔据不同列的类型和特征,借此赢得远高于通用压缩的压缩比和压缩解压性能。

论文[3]分析了列存相对行存加快查询的原因,包括高压缩,批处理和延长死字等,其中仅洽商压缩,比较行存,列存数据库平均赢得10倍以上的查询加快比。咱们在IMCI的TPC-H测试中考据了这一论断,而且在业务信得过数据中不错达到平均10倍的压缩比。可见数据压缩对于列存数据库尤为进击。

压缩算法分类和先容

学术上对于压缩算法也曾有了终点充分的研究,最新的学术责任启动探索深度学习方法更精确地忖度数据的概率散播,从而提高压缩比,但暂未有大鸿沟的试验应用。大部分压缩算法的区别在于工程上的优化。咱们将压缩分为通用压缩和轻量压缩,通用压缩对输入不做复杂的假定,以块为粒度压缩数据,适用于万般数据;轻量压缩的使用存在遏抑条目,需要数据知足一定性情,举例有序性,distinct值少等,但压缩比,压缩妥协压速率上优于通用压缩,并能进一步优化查询。两类压缩算法不突破,频繁会联接使用赢得更高的压缩比。

通用压缩

咱们简要先容LZ4和ZSTD,它们是在咫尺数据库领域最为常用的两种快速压缩算法,相对于其他通用压缩算法,它们的压缩妥协压性能较为突出,更妥贴数据库的数据窥伺款式。LZ4的特色是解压速率快,但压缩比一般,在lzbench规范测试中,解压速率达到4.97GB/s。Zstd 全称为Zstandard,定位是提供高压缩比的快速压缩算法,由Facebook于2016年发布的。Zstd 取舍了有限情状熵(FSE,Finite State Entropy)编码器,赢得了更高的压缩比的同期解压性能仍然保持在较高水平,lzbench测试中解压速率到 1.38GB/s。

事实上,包括LZ4和ZSTD在内,常见的snappy, zlib, gzip等压缩算法都属于LZ77算法的变体,因此咱们爽直先容LZ77算法的旨趣。

LZ77 算法偏执变体都使用了随cursor出动的滑动窗口。Cursor指向刻下需要压缩的第一个位置,并把窗口分为两部分,cursor之前的部分,称为字典;包含cursor启动的部分,称为lookahead buffer。这两个部分的大小是由参数竖立,在算法奉行经过中是固定的。基本算法相称爽直,轮回奉行以下法子:

查找从cursor启动并全都包含在lookahead buffer中的字符串与字典中的字符串的最长匹配。 输出一个压缩驱散三元组 (p, n, c),为字典中的位置p、匹配的长度 n 和匹配部分的下一个字符c。p是相对cursor的距离,具体含义是匹配字符串在字典中的第一个字符相对cursor的偏移量。 将光标上前出动 n + 1 个字符。

咱们举个例子,如下图所示,使用LZ77算法压缩字符串aacaacabcabaaac,围绕字符的方框示意cursor,加粗的字符串部分是字典,大小为5,下划线字符串部分为lookahead buffer,大小为4(包括cursor指向的字符)。

LZ77算法压缩字符串aacaacabcabaaac, 压缩驱散为(0, 0, a), (1, 1, c), (3, 4, b), (3, 3, a), (1, 2, c)

step1: 滑动窗口的字典部分为空,lookahead buffer为aaca,字典为空无法匹配,径直输出(0, 0, a)。

step2: 刻下字典为a,lookahead buffer为acaa,匹配a后的下一个字符为c,输出(1, 1, c)。

step3: 刻下字典为aac,lookahead buffer为aaca,在step3中,未优化的情况下,匹配到aac时应该驱散,优化处理后试验匹配的字符串为aaca,下一个字符为b,输出(3, 4, b)。

2009年东北财经大学《802经济学》考研真题

MBA MPA报考条件中要求工作经历年限是如何计算的?

各高校相继公布硕士研究生招生简章,从招生计划来看,近年来各校普遍呈现“扩招”趋势。

...本文由【方寸学习网】原创,关注我或同名公种号了解更多详情!

step4: 刻下字典为caacab,lookahead buffer为caba,匹配cab后的下一个字符为a,输出(3, 3, a)。

step5: 刻下字典为abcaba,lookahead buffer为aac,类似step3,匹配aa后的下一个字符为c,输出(1, 2, c)。

step3和step5产生的(3,4,b)和(1,2,c)比较特殊,仔细洞悉会发现匹配的字符串超出了字典,即n > p,此时字典匹配在cursor的规模[cursor - p, cursor - 1],这部分被当成ring buffer, 匹配到末尾后又重新启动匹配,已毕了对一语气访佛字符串的编码优化,这个压缩效果和底下先容的轻量压缩中的RLE编码效果雷同。联接解压经过动态产生字典的经过,不错更好默契这个处理。

解压比较爽直,通盘经过是边解压边使用之前解码的数据算作刻下字典。step3和step5的需要特殊处理,当字典中出现的位置p小于匹配的长度 n,将p到cursor的字符串复制n / p次后加上剩下的n % p个字符即可。

从LZ77算法的旨趣中,咱们不难默契为什么LZ4, ZSTD等LZ77变种的算法在压缩妥协压方面的性能具有分歧称性。这种分歧称性体咫尺跟着压缩等第增大,压缩比增多,压缩速率着落,但解压速率真的不受影响,因为压缩经过中的狡计复杂度取决于字典窗口的大小和匹配字符的长度等,而解压的经过只是是从字典中定位,拷贝数据到输出中。

轻量压缩

前文提到通用压缩以块为粒度压缩数据,这导致数据的马上窥伺存在读放大问题,即读取一个纪录需要将块中统共的纪录进行解压,狡计代价大。这在内存狡计为主的场景中严重影响性能,因此通用压缩常用于落盘数据,而内存压缩,使用轻量压缩方法。底下分字符串类型编码,数值类型编码,数据类型无关编码三个类别商量轻量压缩方法。

[字符串类型编码]

Prefix编码:前缀编码(incremental encoding/front coding),通过将字符串按字典序摆设,将刻下字符串示意为和上一个字符串访佛的部分的长度 + 不访佛的剩余部分。

[数值类型编码]

FOR编码:FOR,Frame Of Reference存储与最小值进行相减后的驱散。无谓数据有序,压缩妥协压速率很快,不错在压缩后的数组上进行O(1)马上访存,只需要出奇存储的最小值信息。 Delta编码:存储两两相邻相减的驱散,有序存储的数据,两两相邻相减后的驱散取值范围很小,举例主键两两相邻相减后近似常数。 NS编码: Null Supression,精品久久久国产中字久久精品中文字幕极品 NS算法实质是设想新的编码,尽量只存储数据的灵验位(非0位),节俭前缀存在的一语气的0的存储支拨。学术界主要关切这类轻量压缩算法,设想了诸多编码联接SIMD优化, 代表性的varint-GB, SIMD-BP128, simple_8b, fastpfor等,也在业界粗俗使用,举例google的protobuf即使用了varint进行编码。NS假定待压缩数据为非负数(因为负数补码最高为1,不存在无效位)。常见和FOR编码, Delta编码等联接使用,举例FOR编码, Delta编码逻辑上将数据范围从int64削弱到int16,再使用NS编码将数据物理存储代价减少到int16即可。

[数据类型无关编码]

字典编码:字典编码实质是将访佛性较高的一段数据算作字典entry,使用字典下标number替代原文的字典entry,达到压缩的蓄意。解压经过,将下标对应的数据从字典中取出即可。咱们按字典entry的设想爽直将字典编码分为三个子类。 Entry为完整的单个纪录(举例完整的字符串),编码后原数据用字典中的下标替代,适用于distinct值较少的列。 使用base + offset处理数值数据,Entry为base,原数据编码后为(下标, offset)的二元组。 使用common prefix + suffix处理二进制数据,Entry为common prefix,编码后为(下标, suffix)的二元组。 RLE编码:要求一语气访佛的数据尽可能集会在一齐,因此需要排序。编码驱散为(value,length,position)的三元组,举例0,0,1,1,1...的数据,编码为(0, 2, 0),(1, 3, 2),压缩效果取决于avg run length,压缩比近似data size/avg run length。 Bitmap编码:distinct值极点少的情况下使用bitmap压缩,举例数据为性别male, female,调治为两个bit位数等同于列数据长度的bitmap。bitmap本身就有集会的语义,不错用于group by等操作的优化以及集会运算。 Constant编码:针对近似Constant的数据,出现频率最高的数据视为Constant,而只纪录统共未便是这个Constant的额外值和它们的行号,Constant编码在试验业务数据中对应使用了默许值的列。

对比通用压缩算法和轻量压缩算法先容,不难发现轻量压缩算法的压缩妥协压较为爽直,狡计代价小,况兼压缩后的数据仍然不错参与狡计,举例RLE编码后的数据用于加快乞降,FOR编码的数据更紧凑,CPU狡计效力更高。

字符串的轻量字典压缩

本节咱们伸开商量字符串的字典压缩算法,咱们按构建字典entry的粒度将字典压缩分为三类:对通盘字符串,子字符串和单个字符编码的字典。分别使用direct map,pattern map,char map辩别三类算法。这三类算法及对应的典型算法如下:

direct map: dictionary pattern map: FSST,见论文[4] char map: huffman

其中,从算法1->算法3,算法的通用进程低->通用进程高,解压速率高->解压速率低,压缩比则与试验数据的散播关联。对于cardinality较小的数据如category类的数据应使用dictionary,可赢得较高的压缩比。对于pattern skew的情况,举例urls集会,FSST更适用。Huffman编码在GZIP和ZSTD中使用,使用Huffman编码对滑动窗口压缩过的数据再进行压缩,进一步增多压缩比。

字典压缩算法频繁具有保序性: 如下图所示字典映射后原字符串和编码相对规章不变,毛糙径直在压缩数据上进行range查询优化。

保序性示例,压缩编码后的数据规章不变, abc(8) < abcdef(17) < xyz(95),括号内为编码后的数据

编码神气的变长vs定长,变长的压缩比更高,但解压速率更慢,变长数据通过padding不错调治为定长,便于使用SIMD加快狡计。direct map则是定长编码,而pattern map和char map为变长,编码神气影响三者的解压速率。

三类字符串字典压缩示例,从左到右,压缩的粒度从高到低,通用进程低->通用进程高,解压速率高->解压速率低。

延长解压加快狡计

数据压缩能减少存储空间和IO的支拨,代价是需要支付出奇的狡计资源对数据进行解压,是时间换空间的trade-off。由于IO带宽比较狡计资源更容易成为瓶颈,因此开启压缩后,性能会提高。但数据在内存压缩时,数据解压占用狡计资源,缩短并行度,可能导致列存查询成倍的性能着落。因此如果条目允许,幸免解压或者延长解压,径直在压缩数据上查询是有必要的。举例对于以下查询:

SELECT COUNT(1) FROM table_a WHERE col_1 = "xxx";

假定咱们将col_1列数据以压缩后的编码存放,并在奉行查询时使用字典将查询条目中的字符串"xxx"映射为数字,查询时就能使用字典压缩驱散与"xxx"的映射值径直进行比较,从而将string比较调治为int数据比较,可减少内存带宽压力和狡计代价,提高性能。

可见在特定的查询和使用了特定的压缩算法下,咱们概况径直在压缩数据上查询,由于数据压缩后比较的狡计量减少,内存中可cache更多数据,查询性能将有较着的提高。Oracle IMC,DB2 BLU等列存产物已毕了尽可能幸免解压操作的优化,而且将该优化算作和同类列存产物对比的一个进击特征。本节咱们先容论文[5]的径直查询压缩数据的算法旨趣。

守旧延长解压的算子

[SCAN下推]

久久一本精品久久

Scan算子的延长解压加快,主如若谓词下推,在压缩数据上径直过滤。

string类型数据,对于string类型字典压缩:

使用保序direct map字典编码,压缩后数据类型由string -> int,通过重写查询,将string比较调治为int数据比较,可守旧QE, NE, Between, LT, GE, IN, 前缀的like等比较,适用于cardinality不大的列(50,000~100,000)。

direct map字典编码,编码后的数据具有保序性,图中'Whole Milk*'费解匹配被改写为p_name的[32000, 32100]中的range查询。

使用Pattern map举例FSST, 压缩后仍然是string,可守旧QE, NE, IN等操作。由于Pattern map字典不保序摸,因此只守旧点查询的延长解压。

Pattern map字典的查询改写。延长解压主要加快点查询。

int类型数据,举例int64类型使用FOR算法压缩到15bits,当查询条目为 col = value,则将value改写为value - min即可。

亚洲堂久久亚洲堂天

[JOIN]

论文[5]提到RLE和bit vector编码,以nested loop join为例,当发现其中一列为RLE时,便能跳过k次比较(k 是run length)。此为如果使用了全局字典,即不同的列使用了疏导的字典压缩,那两列不错径直进行延长解压的比较操作,复返匹配的行id,从而加快JOIN。

[GROUPBY团聚]

数据以RLE编码,bitmap编码或者字典编码时不错加快groupby团聚。RLE,bitmap和字典终点于也曾进行一轮聚类,在这基础上,不错对举例aggregation, distinct狡计进行优化,举例RLE编码的乞降调治为v * run length的和,distinct联系狡计仅需要扫描字典或者复返字典大小。

压缩数据SCAN的谓词下推

AP查询频繁需要扫描多斥责盘数据。压缩数据SCAN的谓词下推,常与字典压缩算法联接,已毕延长解压加快查询。压缩数据SCAN的谓词下推,主要包括以下3个经过:

元信息查验,是否妥贴延长解压的条目。 谓词改写,使用疏导的字典改写查询条目。 谓词下推,扫描压缩数据,复返匹配行。

试验上,在数据库中字符串的比较,不仅需要洽商charset,还要洽商collation。Collation界说了字符集会元素的规章,它实质是一种映射,将字符映射为可比较规章的编码。如果collation为二进制序binary,径直在压缩数据上比较莫得问题,但真的统共字符集默许的collation不是binary,举例latin1字符集的默许collation为latin1_swedish_ci,下图为该collation的部分截图。不错看到尽管A, a等二进制编码不同,但在比较时被以为是疏导。大部分collation问题在于它是n对1的映射关系,而无损压缩算法是1对1映射,因此无法径直使用压缩后的编码进行比较。

左侧为图例,collation秩序图中不错看到在latin1字符集,collation为latin1_swedish_ci的情况下,ascii码为41, 61, C0...E3编码的字符在比较时是疏导的collation序。

咱们举个例子来讲解这个问题,字符串“abc”, “abcdef”, “xyz”, “åbc”字典压缩后为“8,17,95,100”,压缩后是保证字典序的,“abc”和 “åbc”仅看压缩的编码“8”和“100”是不同的,在带collation的比较时却被以为是合并个字符串,因此无法应用延长解压,必须进行解压后使用带collation的比较。那问题是不错使用collation规章代替字典序吗?较着是弗成的,如果咱们只保存collation,在这个例子中,如果要解码数字1,它即不错是“abc”,又不错是“åbc”,无法逆映射,可见collation只可用于规章的比较。

带collation的比较问题:在这个例子中,åbc和abc在字典编码的位置是保序的 8 < 100,但试验比较时带collation会以为它们疏导(都是1),如果但愿延长解压优化,那么8和100需要被映射到1,这是一个出奇信息,无法在不明压字符串的情况下赢得(黄色弧线示意encode空间到collation空间的变换,有个“X”示意无法径直使用字符串的collation进行这个变换)

一个贬责决策是通过出奇保存collation驱散,不错加快使用列默许collation进行比较的查询。通过存储collation驱散,不错在字符串比较时节俭狡计,弊端是存储collation编码需要出奇内存和存储空间,对压缩比有更高的要求。在IMCI中,咱们考据了压缩数据SCAN的谓词下推效果,在不同的scan查询场景中赢得了3 ~ 20倍的查询加快。

转头以及后续责任

数据压缩算作数据库一项进击时间,在列存奉行中联接延长解压,在系统性能和老本的均衡中起到毛病作用。本文领先先容数据压缩的表面基础,信息论,其为压缩效果界说了规模,然后分析了数据压缩在行存和列存数据库中的不同。压缩方法分为通用压缩和轻量压缩,数据库中最常见的通用压缩算法LZ4和ZSTD都基于LZ77算法,然后咱们一一先容轻量压缩方法。随后咱们商量轻量压缩数据上的径直查询时间,在该部分咱们先容基于字典压缩已毕字符串延长解压的旨趣,对性能的影响以及需要贬责的问题。

IMCI是PolarDB迈向数据分析市集的第一步,接下来咱们将恒久如一地深挖时间,联接业务场景,优化HTAP细节并落实到客户的试验应用,为客户降本增效不息赋能。临了,咱们预计PolarDB HTAP在压缩时间方面的后续责任:

探索压缩联系的最新的学术研究效果在用户试验场景的最好实践。 在基于划定的列压缩取舍算法上,探索并落地基于schema和数据特征已毕按列的智能压缩算法取舍。 探索数据内存压缩时间,增大内存的数据密度,同期利用延长解压的时间决策,加快查询,已毕性能和老本的兼得。

立即免费体验 PolarDB HTAP才略,2000元测试代金券限量领。----》https://www.aliyun.com/database/dbfirstbuy

参考 400倍加快, PolarDB HTAP实时数据分析时间解密 阿里云社区 Introduction to Data Compression. Guy E. Blelloch. Daniel J. Abadi, Samuel R. Madden, and Nabil Hachem. 2008. Column-stores vs. row-stores: how different are they really? In Proceedings of the 2008 ACM SIGMOD international conference on Management of data (SIGMOD '08). Association for Computing Machinery, New York, NY, USA, 967–980. Peter Boncz, Thomas Neumann, and Viktor Leis. 2020. FSST: fast random access string compression. Proc. VLDB Endow. 13, 12 (August 2020), 2649–2661. Daniel Abadi, Samuel Madden, and Miguel Ferreira. 2006. Integrating compression and execution in column-oriented database systems. In Proceedings of the 2006 ACM SIGMOD international conference on Management of data (SIGMOD '06). Association for Computing Machinery, New York, NY, USA, 671–682.

原文畅达:https://click.aliyun.com/m/1000361078/

本文为阿里云原创内容国产日韩精品久久网,未经允许不得转载。

发布于:北京市声明:该文见地仅代表作家本身,搜狐号系信息发布平台,搜狐仅提供信息存储空间做事。


上一篇:没有了

下一篇:丁香五月性a,久久99精品久久久久久国产