前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Doris 简介:下一代实时数据仓库

Apache Doris 简介:下一代实时数据仓库

作者头像
大数据杂货铺
发布2023-10-22 17:58:20
2K0
发布2023-10-22 17:58:20
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺

什么是 Apache Doris ?

Apache Doris 是一个开源实时数据仓库。它可以从各种数据源收集数据,包括关系数据库(MySQL、PostgreSQL、SQL Server、Oracle等)、日志和来自物联网设备的时间序列数据。能够进行报告、即席分析、联合查询和日志分析,因此可用于支持仪表板、自助式 BI、A/B 测试、用户行为分析等。

Apache Doris 同时支持批量导入和流式写入。可以与 Apache Spark、Apache Hive、Apache Flink、Airbyte、DBT 和 Fivetran 很好地集成。还可以连接到 Apache Hive、Apache Hudi、Apache Iceberg、Delta Lake 和 Apache Paimon 等数据湖。

表现

作为实时 OLAP引擎,Apache Doris 在查询速度上具有竞争优势。根据TPC-H和SSB-Flat基准测试结果,Doris可以提供比Presto、Greenplum和ClickHouse更快的性能。

至于其自我进化,过去两年无论是复杂查询还是平表分析,速度都提高了10倍以上。

架构设计

Apache Doris 如此快的速度背后是有助于其性能的架构设计、特性和机制。

首先,Apache Doris 有一个基于成本的优化器(CBO),可以为复杂的大查询找出最有效的执行计划。具有完全矢量化的执行引擎,可以减少虚拟函数调用和缓存未命中的问题。基于MPP(大规模并行处理),可以充分发挥用户的机器和内核。在 Doris 中,查询执行是数据驱动的,意味着查询是否被执行取决于其相关数据是否准备好,这可以更有效地利用 CPU。

面向列的数据库的快速点查询

Apache Doris 是一个面向列的数据库,因此它可以使数据压缩和数据分片变得更容易更快。但这可能不适合诸如面向客户的服务之类的情况。在这些情况下,数据平台必须同时处理大量用户的请求(这些请求称为“高并发点查询”),而拥有列式存储引擎将放大每秒的 I/O 操作,尤其是当数据排列在平面表中时。

为了解决这个问题,Apache Doris 启用了混合存储,这意味着同时拥有行存储和列存储。

另外,由于点查询都是简单查询,因此调用查询规划器是不必要和浪费的,因此 Doris 为它们执行短路计划以减少开销。

高并发点查询开销的另一个大来源是SQL解析。为此,Doris 准备了声明。预先计算 SQL 语句并缓存它们,以便可以复用于类似的查询。

数据摄取

Apache Doris 提供了一系列数据摄取方法。

实时流写入:

  • Stream Load:可以应用此方法通过 HTTP 写入本地文件或数据流。具有线性可扩展性,在某些用例中可以达到每秒 1000 万条记录的吞吐量。
  • Flink-Doris-Connector:通过内置的 Flink CDC,该连接器将 OLTP 数据库中的数据提取到 Doris。至此,我们已经实现了MySQL、Oracle的数据自动同步到Doris。
  • 例程加载:这是从 Kafka 消息队列订阅数据。
  • Insert Into:当您尝试在 Doris 内部进行 ETL 时(例如将数据从一个 Doris 表写入另一个 Doris 表)尤其有用。

批量写入:

  • Spark Load:通过这种方法,您可以在写入 Doris 之前利用 Spark 资源对来自 HDFS 和对象存储的数据进行预处理。
  • Broker Load:支持 HDFS 和 S3 协议。
  • insert into <internal table> select from <external table>:这个简单的语句允许您将 Doris 连接到各种存储系统、数据湖和数据库。

数据更新

对于数据更新,Apache Doris 需要提供的是,它同时支持 Merge on Read 和 Merge on Write,前者用于低频批量更新,后者用于实时写入。使用Merge on Write,当您执行查询时,最新的数据就已经准备好了,因此与Merge on Read相比,它可以将查询速度提高5到10倍。 从实现的角度来看,以下是一些常见的数据更新操作,Doris 都支持:

  • Upsert:替换或更新整行
  • 部分列更新:仅更新一行中的几列
  • 条件更新:通过组合几个条件过滤掉一些数据,以便替换或删除它
  • Insert Overwrite:重写表或分区

在某些情况下,数据更新是并发发生的,这意味着有大量新数据进入并试图修改现有数据记录,因此更新顺序非常重要。这就是为什么 Doris 允许您通过事务提交的顺序或序列列(您提前在表中指定的内容)来决定顺序。Doris 还支持根据指定谓词删除数据,这就是条件更新的方式。

服务可用性和数据可靠性

除了查询和数据摄取方面的快速性能之外,Apache Doris 还提供服务可用性保证,具体如下: 从架构上来说,Doris 有两个进程:前端和后端。它们都很容易扩展。前端节点管理集群、元数据并处理用户请求;后端节点执行查询并能够自动数据平衡和自动恢复。支持集群升级和扩展,避免服务中断。

跨集群复制

企业用户,尤其是金融或电子商务领域的用户,需要备份其集群或整个数据中心,以防出现不可抗力。所以Doris 2.0 提供了跨集群复制(CCR)。通过 CCR,用户可以做很多事情:

  • 灾难恢复:用于快速恢复数据服务
  • 读写分离:主集群+从集群;一本用于阅读,一本用于写作
  • 集群隔离升级:对于集群扩展,CCR允许用户预先创建备份集群进行试运行,以便清除可能的不兼容问题和错误。

测试表明 Doris CCR 可以达到几分钟的数据延迟。最好的情况下可以达到硬件环境的速度上限。

多租户管理

Apache Doris 具有复杂的基于角色的访问控制,它允许在数据库、表、行和列级别进行细粒度的权限控制。

对于资源隔离,Doris 曾经实施了一个硬隔离方案,将后端节点划分为资源组,并将资源组分配给不同的工作负载。这个硬隔离计划简单又整洁。但有时用户需要更充分地利用其计算资源,因为某些资源组处于空闲状态。

因此,Doris 2.0 引入了工作负载组,而不是资源组。为工作负载组设置了关于其可以使用的资源数量的软限制。当达到该软限制时,同时有一些空闲资源可用。空闲资源将在工作负载组之间共享。用户还可以根据对空闲资源的访问来确定工作负载组的优先级。

便于使用

Apache Doris 提供了许多功能,而且也易于使用。它支持标准SQL,并兼容MySQL协议和市场上大多数BI工具。 我们为提高可用性所做的另一项努力是称为“轻架构更改”的功能。这意味着如果用户需要添加或删除表中的某些列,他们只需要更新前端的元数据,而不必修改所有数据文件。光模式更改可以在几毫秒内完成。它还允许更改索引和列的数据类型。Light Schema Change 与 Flink-Doris-Connector 的结合意味着上游表的毫秒级同步。

半结构化数据分析

半结构化数据的常见示例包括日志、可观测性数据和时间序列数据。这些案例需要无模式支持、较低的成本以及多维分析和全文搜索的能力。

在文本分析中,人们大多使用 LIKE 算子,因此我们花了很多精力来提高它的性能,包括将 LIKE 算子下推到存储层(以减少数据扫描),并引入 NGram Bloomfilter, Hyperscan 正则表达式匹配库和 Volnitsky 算法(用于子字符串匹配)。

我们还引入了用于文本标记化的倒排索引。它是模糊关键字搜索、全文搜索、等价查询和范围查询的强大工具。

据仓一体

为了让用户构建高性能的数据湖和统一的查询网关,Doris 可以映射、缓存和自动刷新来自外部源的元数据。它支持 Hive Metastore 和几乎所有开放数据 Lakehouse 格式。您可以将其连接到关系数据库、Elasticsearch 和许多其他来源。它允许您在外部表上重用自己的身份验证系统,例如 Kerberos 和 Apache Ranger。

基准测试结果显示,Apache Doris 在 Hive 表的查询中比 Trino 快 3~5 倍。它是以下几个特征的共同结果:

  • 高效的查询引擎
  • 热数据缓存机制
  • 计算节点
  • Doris 视图

计算节点是 2.0 版本中新引入的数据湖解决方案。与普通后端节点不同,计算节点是无状态的,不存储任何数据。它们也不参与集群扩展期间的数据平衡。这样,他们就可以在计算高峰期灵活、轻松地加入集群。

另外,Doris还允许将外部表的计算结果写入Doris中形成视图。这与物化视图的思路类似:用空间换取速度。对外部表执行查询后,可以将结果放入Doris内部。当后续有类似的查询时,系统可以直接从 Doris 读取先前查询的结果,从而加快速度。

分层存储

分层存储的主要目的是省钱。分层存储是指将热数据和冷数据分离到不同的存储中,热数据是经常访问的数据,冷数据是不经常访问的数据。它允许用户将热数据放入快速但昂贵的磁盘(例如SSD和HDD)中,将冷数据放入对象存储中。

粗略来说,对于80%冷数据组成的数据资产,分层存储可以降低您70%的存储成本。

Apache Doris 社区

这是对开源实时数据仓库 Apache Doris 的概述。它正在按照敏捷的发布计划积极发展,社区欢迎任何问题、想法和反馈。

网站:https: //doris.apache.org/

GitHub:https: //github.com/apache/doris/ 原文作者:Apache Doris

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Apache Doris ?
  • 表现
  • 架构设计
  • 数据摄取
  • 数据更新
  • 服务可用性和数据可靠性
  • 跨集群复制
  • 多租户管理
  • 便于使用
  • 半结构化数据分析
  • 据仓一体
  • 为了让用户构建高性能的数据湖和统一的查询网关,Doris 可以映射、缓存和自动刷新来自外部源的元数据。它支持 Hive Metastore 和几乎所有开放数据 Lakehouse 格式。您可以将其连接到关系数据库、Elasticsearch 和许多其他来源。它允许您在外部表上重用自己的身份验证系统,例如 Kerberos 和 Apache Ranger。
  • 分层存储
  • Apache Doris 社区
  • 这是对开源实时数据仓库 Apache Doris 的概述。它正在按照敏捷的发布计划积极发展,社区欢迎任何问题、想法和反馈。
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档