简介:介绍Lakehouse搜索引擎的设计思想,以探索如何使用缓存,辅助数据结构,存储格式,动态文件分支和矢量执行,以实现出色的处理性能。
作者:Databrick的高级软件工程师Li Jiexing
1.数据仓库和湖泊
数据管理系统已从早期的数据仓库开发到今天的Lakehouse。Lakehouse可以同时存储结构化,半结构和非兼容数据,并支持流量分析,BI,数据科学和机器分析的方案。
2. Lakehouse在查询性能方面的挑战
数据仓库架构可以完全控制数据的存储和查询,因此您可以同时设计查询系统以及适应查询系统以实现出色查询性能的数据存储结构;
在Lakehouse架构下,数据存储在开放式存储结构中。例如,镶木quet格式可用于方便访问数据,但开放存储格式不一定适合查询操作。
那么,Lakehouse如何以开放式存储格式实现有效的查询性能?
3.解决方案
为了解决上述问题,Databricks Lakehouse设计了一个新的搜索引擎。其SQL性能在数据湖存储系统和文件格式中具有出色的性能。
它的SQL性能优化是通过以下技术实现的:
A。高速缓存:将热数据放入高速缓存中;
b。建立辅助数据结构:例如收集统计和建立索引;
C。数据布局的优化:最小化I/O;
d。动态文件修剪:实现最小I/O。
1.高速缓存
大多数工作负载通常访问一些“热”数据。数据仓库通常使用SSD和内存作为缓存来加速热数据查询。
Lakehouse可以使用与数据仓库相同的优化数据结构来缓存以提高查询性能。
如图所示,使用SSD用作数据链球手中的缓存可以将数据阅读速度提高超过3次。使用Delta引擎作为缓存可以将数据阅读速度提高超过7倍。
2.建立辅助数据结构
即使数据以镶木格式存储,也可以建立许多其他数据结构以加快查询,同时,它们可以维持这些附加数据的交易维护。
示例1:在镶木quet文件中跳过数据
在Parquet文件中,维护表中每个数据文件的最小值/最大值统计信息有助于在查询期间跳过一些无关的数据。
如下图所示,如果查询条件是年= 2020且UID = 24000,使用最小/最大统计信息,我们可以看到此查询的信息仅在File3中存在,因此您可以跳过读取file1和file2。
示例2:在镶木quet文件上建立索引
如下图所示,如果查询条件为type =“ delete_accout”,则可以使用在类型上建立的索引直接跳到相应的数据,以避免读取无关的数据。
示例3:镶木quet文件上的绽放过滤器
可以为每个文件建立Bloom过滤器。Bloom过滤器可以快速确定表文件是否包含需要查询的数据。如果不包括,请快速跳过文件,从而减少扫描数据的量并改善查询性能。
Bloom过滤原理:
Bloom Filter使用1个或更多哈希表来计算每个文件中数据记录的哈希值,并且其起始值为0。当哈希值在相应位置映射时,它为1个这样,以这种方式,以这种方式,它是1.如果您查询,则可以以0值跳过位置;相应的位也可能全部为1。此时,数据可能不在此文件中(假阳性)。大小和大小的大小和大小以控制正率。
3.数据布局
A。小文件问题
可以在三角洲湖进行合并,更新和插入操作,该操作可能会产生大量的小文件。大量的小文件将一方面降低系统的阅读性能,并增加元数据的费用手术。
Lakehouse使用不同的技术来减少小文件的产生:
如下图所示,在Spark的开源版本中,每个执行程序在分区中编写数据时将创建一个表文件,最终将在分区中引起许多小文件。
Databricks优化了Delta表的写作过程,并使用特殊的执行程序合并每个分区以合并其他执行者对分区的写作,从而避免了小文件的生成。
从三角洲表编写数据后,将检查增量表中的表文件数量。如果Delta表中的小文件数量(128MB被视为一个小文件)达到阈值,则将执行一次小文件合并,将三角洲表中的小文件合并到一个新的大文件中。
除了自动合并外,Databricks还提供OpitMize命令。用户可以手动合并小文件以优化表结构,从而使表文件的结构更加紧凑。
b。查询时间问题
查询运行时间主要取决于数据访问量。即使使用了镶木quet格式,也可以优化表中的数据布局以减少操作时间。
对数据存储数据进行排序,在每个表文件中存储一定数量的数据,如下图所示,以存储UID = 0 ... 1000,File2存储UID = 1001 ... 2000,以便您可以根据需要查询当您查询需求时。
在实际查询中,一些查询需要在一定范围内查看ColOMN1的数据。一些查询需要在一定范围内或更多范围内查看ColOMN2的数据。目前,显然还不足以对Colomn1进行排序。
Z订单可以将关联的信息存储在多个维度(如下图中的颜色所示)上的同一文件集中,以减少不必要的文件读数。
4.动态文件分支(DFP)
动态文件分支被称为简短的DFP,以下简单查询为示例:
查询说明:连接store_sales和item的两个表,条件是当item_sk值等于且item_id等于固定值时。
DFP无启用
如果您不打开DFP,则可以从上图看到查询将首先扫描store_sales的完整表,然后使用过滤后的项目表。尽管结果仅为46,000个数据,但该表扫描了Tablemore,而不是Store_sales中的86亿个数据。
启用DFP
。这仅扫描了超过6600,000个店面的数据,该数据比DFP低99%。
从结果来看,在激活了DFP之后,该查询取得了10倍的性能提高。
对于用于在TPC-DS上进行测试的功能(请参见下图),在测试发现启用DFP之后的TPC-DS查询速度达到4.5次至8次之后。
5.优化的组合
全面地使用上述优化技术协作工作,以便在湖泊中进行数据阅读,并通过数据布局优化,建立不合适的数据结构的I/O,以减少非 - 读取非 -缓存数据,意识到湖泊发动机可以提供可以提供可以提供的Lakehouse发动机,该发动机可以提供湖泊发动机提供的湖泊发动机,该发动机可以提供可以提供湖泊发动机,该发动机可以为Lakehouse Engine提供提供湖泊发动机为了提供可以提供可以提供可以提供湖泊发动机的湖泊发动机,该发动机可以提供可以为Lakehouse发动机提供的湖泊发动机,该发动机可以为Lakehouse发动机提供提供的供应性查询性能作为数据仓库。
如下图所示,增量引擎的查询性能类似于DW1,超过了DW2和DW3。
三角洲克隆是Lakehouse非常重要的技术。它可以制作大型数据集的高效率副本,并支持测试,共享和机器学习的不同需求。
1.什么是克隆?
克隆也称为复制,这是给定时间点的原始数据的副本;
它具有与源表相同的元数据:相同的表结构,约束,列表描述,统计信息和分区;
两种克隆方法:浅(浅克隆),深(深克隆)。
2.深克隆
深克隆将完全复制源表的元数据和数据文件,并生成一个新的独立表。
A。深克隆语句
在SQL中运行创建表语句;在Python和Scala语句中运行可达语句。
b。深克隆的特征
3. Qian克隆
Qian Cloning仅复制需要克隆表的表的元数据,并且表格本身的数据文件将不会复制。
A。Qiankelong句子
类似于神经的陈述,只需将浅克隆语句添加到SQL即可;添加isshallow =为Python和Scala。
b。浅克隆的特征
4.克隆的适用场景
克隆有许多适用的方案,例如:数据存储,短期实验,数据共享和灾难恢复。其中,除了短期实验外,其他场景还需要使用深层克隆。
原始链接
本文是阿里巴巴云的原始内容,未经许可就无法重印。
原始:https://juejin.cn/post/7097121428318715917