数据仓库的基本架构(数仓TD架构

里德: Databend的名字来源于相对论。 由于物质的存在,时间和空间会弯曲,这就是相对论的Time Bend。 由于Databend的出现,用户期待着能够重新审视数据,挖掘数据中存在的更大的价值。

3559 github.com/datafuselabs/databend

在本文中,您会发现:为什么传统的数据仓库体系结构不能满足今天的需求? 现代数仓结构有什么好处? 现代数仓架构给用户带来了什么便利? 面向 Databend的云架构的设计。

在介绍现代数仓之前,我们先来看看数据仓库在整个数据库领域的应用场景。

最左边的OLTP应用场景是,希望在电子商务兴盛的交易场景中,数据库具有低延迟、高并发的能力。 这样的数据库使用原始存储,在OLTP领域是合适的数据结构。 OLAP非常适合处理复杂的查询,并要求快速返回查询的速度和查询结果。 例如一个SQL中有Join和复杂的子查询,我们需要单一查询SQL的高速返回。 作为OLAP基础的存储结构通常使用列存储结构。 列存储结构可以最大限度地减少复杂查询中的数据交互。 OLAP和OLTP的中间状态是HTAP,如TiDB。 TiFlash和TiKV分别是列存储和原始存储,适用于具有事务性和复杂查询的场景。 Databend要解决的场景是OLAP场景。

01现代数仓的几个需求水平

不需要管理硬件和机器的配置,不需要管理软件和软件的配置,不需要管理硬件和软件的资源,不需要管理升级,不遇到数据增长带来的数据查询速度降低的问题的秒单位只要对使用付费云本地数据仓库没有明确定义,并且能够满足上述五种需求,就可以认为该思洛存储器是现代云本地数据仓库。 因为这些需求只有在云基础架构下,才能更好、更容易地满足。

02现代数仓

1 .针对上述五点需求,传统的数仓结构有哪些限制?

传统数仓的特点是计算和存储一体化,计算和存储都在同一台机器上。 对cpu、内存、磁盘进行数据分区,分散整个数据。 各节点负责的部分数据、各节点之间的数据也不相关。

如果计算能力不足,存储无法充分扩展,将这种体系结构计算与存储结合起来,则在增加节点数量时需要向新节点迁移数据。 的数据热未知,因此新节点的配置必须等于或大于原始节点。 扩展可能会导致对硬件的要求越来越高。

传统的数仓资源分配粒度低,秒级弹性困难。 传统的数仓可以扩张,但是时间很长。 例如,在下图中,添加node4后,数据均衡操作需要时间,在扩展期间添加新节点也无法向外部提供服务,资源计费可能会开始,造成资源浪费。

2 .现代数仓结构如何满足上述五点需求?

共享存储(灵活性)存储计算隔离)灵活性)分离存储后,无需在增加计算节点时进行数据迁移,从而可以以秒为单位增加计算资源。 计算能力扩张很快。 计算资源可以按业务分类。 例如,下图中的节点4可以作为数据导入到专用节点,而节点3则成为BI计算专用节点。 资源扩展秒单位的灵活性(灵活性)这种体系结构计算节点是异构的,资源分配的粒度更细,资源控制更灵活。 只有在所有层面实现灵活性,才能满足上述五个需求。

“尽快调查结果,只为使用的资源付钱”的传统数仓很难满足这个需要和下面的公式。

使用成本=资源*使用时间

03Databend如何满足现代数仓的需求

针对现代数仓的一些需求,Databend实现了灵活的完全面向云架构的设计,强调状态和计算的分离。 与传统仓库相比,用户使用Databend的成本更低、使用更方便,体验更好。

1. Databend体系结构

根据Databend的体系结构图,Databend由上至下分为四个模块。

数据访问:数据访问支持Mysql、Clickhouse等SQL,可以通过现有的生态连接轻松访问数据。 Databend在体系结构的设计中对这一层进行了很多抽象。 轻松利用现有的生态访问数据。 元服务层:元数据和元信息存储在这里

层,这一层相当于Databend 的大脑。这是一个弹性的多租户隔离的服务。计算层:每个计算结点对于一个sql解析都是独立和完整的。计算结点会对SQL做解析,做逻辑和物理执行计划并执行。每个计算结点有自己的Cache、索引、数据层访问结构。这些节点很容易组成一个集群,用户可以定义集群对外提供的服务。存储层:存储层主要使用云存储,本地DFS、S3、Asure blob等块存储,基于共享存储打造了databend。

2. Databend架构——Meta Service

Databend不只有存储计算分离,更是存储与状态分离的。Meta Service是负责存储状态信息的服务,是一个多租户的服务事务性key-value存储。Databend计算节点则是无状态的。

Meta Service负责数据库用户信息认证,存储 Database、Table、Index的Schema信息,并作为集群内节点的namespace注册中心工作。分布式计算时需要感知集群内节点时会调用Meta Service取得其他节点的信息和状态此外,为了让Meta Service保持轻量,大量的数据不会存储在Meta Service上。

3. Databend架构——计算

① 查询计划Query Planning

首先生成逻辑执行计划。对用户的SQL做解析,根据解析的SQL生成逻辑执行计划,再根据SQL执行计划通过优化器深度优化执行计划、确定执行计划是否需要分布式执行和re-shuffle。

下面是一个执行计划的例子:

执行计划从下向上看,首先是最下面要读取的数据源信息。上面例子中显示,读取8个分区、读20行数据。倒数第二行是做过滤,满足年龄>13条件的数据会先筛选出来,且Filter语句是一个下推语句。再上面是Group by,会看数据扫描的区间大小。如果扫描区间是成百上万的,这个操作会是一个分布式地执行的操作;或是根据数据的字段做shuffle,例如city字段在某几个节点上只计算北京、某几个只计算上海。

② 物理执行计划 Processor Pipeline

逻辑执行计划会指导物理执行计划的编排。做物理执行计划即pipeline时首先会生成有向无环图。有向无环图的顶点是一个计算结点,边是一个通道。边通过InPort OutPort进行连接。

下面是pipeline执行语句例子,图中是物理执行计划:

explain pipeline SELECT avg(age) FROM class WHERE age > 13 GROUP BY city

依然从下向上看,节点是8cpu,即8并行。做filter时也是8个并行。GROUP BY 分两步,第一次partial的GROUP BY 是中间态、8并行。Merge后最后把partial的结果进行聚合,Final步骤就从8个并行回到了1路并行。

物理执行计划上关注连接性和并行性。

③ 执行计算任务

在调度层面,pipeline的任务执行是基于Pull模式执行的。在数据层面上是以大块数据的形式、达到向量化执行的效果。单节点CPU指令做并行执行,集群层面做分布式并行。

Databend的任务调度器采用work-stealing机制。每个节点、每个CPU都会从Databend的全局任务队列中取任务,一旦单个节点或CPU上没有处理的任务,就会从集群内队列中窃取任务,这样始终保持了节点和CPU的繁忙状态,不浪费计算资源。

Databend在资源弹性和高性能中最重要的设计就是调度的设计。

④ 集群操作

如果基于传统的gRPC 数据传输,序列化和反序列化会消耗很多时间和资源。Databend使用了Arrow Flight RPC,这是一个针对ap场景的RPC,不需要做序列化反序列化,免去了序列化反序列化时间消耗。

4. Databend架构——存储层

Databend没有自己的存储层,底层存储使用的是云端的共享存储、对象存储。Databend为了更快地从共享存储、对象存储中取得数据,对存储有一系列设计:

使用列式存储Parquet格式索引:MinMax值和稀疏索引

共享存储、对象存储并不是针对高吞吐、低延迟场景设计的。Databend为了更快地读取数据,计算节点会对数据做索引,定义了MinMax值和稀疏索引。查询数据时首先通过MinMax定位数据文件位置,在文件比较大的情况下使用稀疏索引定位更细粒度的数据块。从云存储中读取的数据越少,需要计算任务就越轻,网络传输也会更少,计算速度加快。

支持多云

Databend对云存储做了统一视图,云厂商的存储接口统一封装成我们的数据存储层。用户可以无感知地使用跨云存储。

5. 存储层自动聚集

数据量大的情况下数据变慢,是数据库中经常要面对的问题。业务上某一类数据很热时Databend会实现在热点数据上查询速度加快的能力。

例如下图中的查询。查询年龄20时,击穿(查询)了2个文件,深度为2。当查询年龄为35时,击穿文件数量为3,深度为3。当查询年龄为80时,击穿文件数量为1,这种状态比较理想。如果业务上经常需要查询年龄35,且文件击穿的深度较深,这种情况下databend会感知到文件需要合并。文件1、2、3和文件35相关的内容会被合并成1个或深度更薄的几个文件。再次查询年龄35时读取文件变少,读取数据速度变快。

04Databend 未来计划

Databend从2021年3月开源并开始研发,目前正在早期的研发阶段,会尽快推出Alpha版本。推荐大家在Alpha版本推出后进行试用。

Databend的目标不会改变,始终追求性能和弹性。随着云基础设施越来越完善,大家对按量付费和弹性的需求非常强烈。Databend既可以云端部署也可以私有化部署。

最后Databend会向着Serverless方向迭代。Serverless意味着把资源的调度做到更加精细化,云数据库的计算结点可以和一个函数一样,使用的时候拉起,使用完毕后销毁,只需要用使用付费,资源调度会非常精确。

今天的分享就到这里,谢谢大家。

分享嘉宾:

分享嘉宾:cxdyj Datafuse Labs

编辑整理:温柔的钻石 数数科技

出品平台:DataFunTalk

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注