Apache Doris 2.0.0 特性分析

1、存算分离 所谓存算分离是指查询外表时,使用一种专门做计算的BE节点,但对于存储在BE上的内部表,目前还不能做到存储分离。 doris可以查询外部表,包括: Hive、Iceberg、Hudi、Elasticsearch、JDBC、Paimon 早期版本中,FE通过BE节点查询外部表,并且在BE节点内执行join、sort、agg等计算, 这些BE节点同时也负责doris的内部表的存储和计算, 新版本改造了BE节点,通过修改配置,它可以仅用于查询外表时的计算,内部表数据不会存到它上面, 这种BE称为“计算节点”,而既存储内部表数据又执行计算的BE节点称为“混合节点”。 两者的代码和二进制安装文件是一样的,只是配置不同,在集群中扮演的角色不同。 配置方法如下: 修改FE的配置文件: prefer_compute_node_for_external_table=true min_backend_num_for_external_table=3 修改BE配置: be_node_role=computation 然后将这个BE加入集群: ALTER SYSTEM ADD BACKEND "be_ip:be_port"; 可以如此加入多个“计算节点”。

当集群中有充足的计算节点时,当FE查询外表时,执行计划优先下发给“计算节点”,而不发给“混合节点”。

以上就是2.0.0存算分离特性的原理和状态,以下是这一特性的限制和理解上的澄清: 目前访问外部表(无论是否使用存算分离)只支持读取,不能写入。 存算分离的计算节点,只能用于外表的访问和计算,对内部表算子(例如JOIN、AGG、SORT)还不能调度到计算节点执行, 可能以后版本会支持,这个称为“计算外溢”。 SelectDB在apache doris官网上说,2023年10月会上传更成熟的存算分离架构给社区,估计目前的存算分离还不够完善。 查看了一下StarRocks的官网,没有存算分离的文档,只有3.1的release note提了一下。

2、多源数据目录(Multi-Catalog) 这是一种管理外部数据源更好的模型,数据库层级的模型: Catalog -- 可以理解为一个种类型的数据库集群,里面包含多个同一类型的数据库。 Database -- 用于数据管理的隔离,有独立的元数据存储,字符编码、数据存储格式等属性,内部包含schema和table。 Doris的Multi-Catalog可以将外部数据源,映射到一个新的Catalog,并自动读取外部数据源的所有元数据,在本地创建对应的database和表。 例如,hive里有如下数据库: default random ssb100 tpch1 tpch100 tpch1_orc 其中tpch100中有表: customer lineitem nation orders part partsupp region supplier 使用Multi-Catalog特性,不需要为每个hive数据库在Doris创建对应数据库,也不需要为每个hive表创建映射表。 对于Doris支持的数据源(如hive,Elasticsearch),只要创建Catalog并指定连接信息: CREATE CATALOG hive PROPERTIES ( 'type'='hms', 'hive.metastore.uris' = 'thrift://172.21.0.1:7004' ); Doris会自动读取外部数据源的元数据信息,并为每个数据库和表创建映射。 这个功能极大的方便了外部数据源的访问,在1.20版本已经具备了这一功能,2.0.0支持更多数据源,并与存算分离结合。

3、冷热分层 冷热分层是指,将表中较早时间导入的数据,保存到对象存储或其它廉价的存储中去,并在doris本地删除, 当需要这些旧数据时,再从对象存储读进来,这个过程对于用户是透明的。 具体的操作是,在创建表时设置一个日期,在这个日期到达时,之前导入的数据,会上传到对象存储,并在本地删除。 也可以建表时设置数据的生命期,从数据导入时开始计算,超过这个生命期的数据会上传到对象存储,并在本地删除。 上面冷热分层的逻辑,也可以只作用于分区数据。

每次数据导入(如执行一个insert、一次stream load),虽然最终存储在segment文件中, 但是也会创建一个对应的Rowset对象,记录了这批数据的导入时间。 冷热分层粒度就是基于Rowset,当到达冷却时间时,会将当前满足条件的Rowset 全部上传到对象存储,并删除本地数据,之后新导入的数据,生成的新Rowset,会在到达冷却时间后也上传到对象存储。

查询时,如果查询的数据是热数据,这些数据仍然存储在BE节点,可以直接返回结果, 如果查询的数据是冷数据,BE会读取对象存储里的数据,在本地恢复,再返回结果。

这一功能非常适用于交易记录、日志的存储和查询。

注意,冷热分层是以导入时间作为数据冷热标准,自动上传冷数据的,对用户是透明的, 不是以用户定义的某个类型为日期的列,用户对于冷热分层的控制是非常有限的。

4、默认使用新的优化器 nereids

5、默认使用新执行器 这种称为pipeline的执行器,将执行计划的执行分为更小的粒度,最大程度的异步化和并行化。

你可能感兴趣的:(Doris,apache,doris)