云时代已至,新一代数据分析平台是如何实现的?

news2024/10/7 19:27:28

2023 年 5 月,由 Stackoverflow 发起的 2023 年度开发者调查数据显示,PostgreSQL 已经超越 MySQL 位居第一,成为开发人员首选。PostgreSQL 在国内的热度也越来越高。6 月 17 日,PostgreSQL 数据库技术峰会在成都顺利召开。本次大会以 “新机遇、新态势、新发展” 为主题,邀请众多行业大咖参与本次活动。PieCloudDB 产品总监陈金豹也受邀在大会中发表演讲《云原生虚拟数仓 PieCloudDB 的架构和关键模块实现》。 

随着云计算时代的到来,云平台提供了近似无限丰富的计算资源,同时也使得计算成本极大的降低,释放出数据计算产生智能的更多机会。早在 2019 年,Gartner 便做出预测:数据库市场的未来在云上。随着云计算技术的发展,企业也都在向这一趋势靠拢,越来越多的将自己的业务数据往云上迁移。我们相信数据库的未来在云上,这也是我们打造 PieCloudDB 这款云原生数据仓库的原因。

PieCloudDB 于 2022 年 10 月正式问世。它是一款云原生分布式数据仓库,提供完备的 SQL 语言支持,高效的分布式计算能力和完备的事务支持。同时又实现了单一数据集的多集群,秒级的弹性和只为必要的计算和存储付费的能力。 

1. Why We Need PieCloudDB?

1.1 NoSQL 和数据湖已不能满足用户的分析需求

在过去的很长一段时间里,NoSQL + 数据湖解决方案在数据分析领域占据了主流市场,而 Hadoop、HDFS 等 NoSQL 数据库也是主要的数据分析平台。然而,随着 Cloudera 宣布停止对 CDH 技术支持,对 Hadoop 等 NoSQL 平台的质疑声音也越来越大。

这一现象正是因为 NoSQL + 数据湖体系在复杂查询支持、高并发隔离性和一致性等重要数据分析特性方面存在明显不足,现有基于标准 SQL 的 BI 工具难以集成,且 NoSQL 本身对高级分析(如图形分析、地理信息分析等)的支持较弱。因此,NoSQL 开始被人们贴上 “过时” 的标签,不再占据数据分析领域的主要市场份额。 

此外,基于 NoSQL 和数据湖的基础设施所需的分析工具不容易集成和部署。使用数据湖进行数据分析需要整合部署多个组件,而这需要大量的开发工作。由于缺乏对 ANSI SQL 的支持,用户通常需要具备专门的技术技能,并且需要承担较高的技术和成本要求。此外,平台所需的专用引擎 / 工具(如图形数据库)往往难以与记录系统集成,降低了数据分析的可操纵性和创新性。

这些限制和挑战推动了对更强大、更易于集成、更易于使用的数据分析平台的需求。企业和组织越来越倾向于采用基于标准 SQL 的分析平台,这些平台能够满足用户广泛的分析功能、易于集成和部署等需求,并且与现有的数据存储和处理技术相兼容,对技术和成本的要求更低。

1.2 以关系型数据库为基础的数据仓库很难适应云环境

包括 Teradata、Greenplum 等众多主流传统数据仓库都是以关系模型来组织数据的关系型数据库。这些数据仓库具有许多优点,包括良好的 SQL 兼容性、高效运行复杂查询以及支持事务 ACID 特性。然而,这些传统的 MPP 数据库也存在一些缺陷,例如弹性性能较差、高可用性方面不够满足要求、数据孤岛等问题。

这些问题导致传统的数据仓库在云环境中无法充分利用公有云的优势。公有云相对于私有环境具有许多优势,其中最显著的两个是:

  • 近乎无限的弹性计算资源:公有云提供了弹性计算资源,用户可以根据实际需求按需分配资源,并根据需要进行弹性扩缩容。用户可以根据业务需求申请所需的计算资源,而不需要维护和管理自己的硬件基础设施。
  • 廉价且无限容量的对象存储:公有云提供廉价且具有几乎无限容量的对象存储。对象存储的价格相对较低,可以为用户提供大规模的存储容量,帮助用户降低成本并提高效率。 

为了更好地适应云环境并充分利用公有云的优势,新一代的数据仓库逐渐崛起。新一代云原生数据仓库具有云原生的架构设计,能够更好地利用公有云的弹性计算和对象存储能力。它们可以在公有云中快速部署和扩展,并提供高性能的数据处理和分析能力,以满足现代数据分析的需求。 

1.3 一个兼顾关系型数仓和公有云优势的产品

用户需要一个能够兼顾关系型数仓和公有云优势的产品,来适应云时代的到来。计算引擎方面,需要具有关系型数仓的众多优势,能够具备支持完备的 SQL 语言,具有高效的分布式计算能力,且能够具有完备的事务 ACID 特性。公有云特性方面,实现存算分离,提供弹性的计算集群,让用户得以只为必要的计算付费,充分利用公有云带来的优势。这就是 PieCloudDB 的设计目标。

2. PieCloudDB 能给用户带来什么?

作为新一代的云原生数据仓库,PieCloudDB 实现了云上数仓计算与存储的分离,兼顾了传统关系型数仓的众多优势和公有云带来的众多利好。

2.1 对 SQL 的完备支持

PieCloudDB 对 PostgreSQL 进行了重大改进,实现了分布式计算和存算分离的功能。并对锁、事务、日志、系统表和用户表的存储等模块进行了彻底重写,带来了颠覆性的变革。同时,PieCloudDB 也保留了 PostgreSQL 对 SQL 标准的完整支持,包括复杂查询如聚合(Agg)、子计划(Subplan)、子链接(Sublink)、外连接查询(Outer Join)、窗口聚合函数(Window agg)和物化视图(Materialized View)等。这些改进使得 PieCloudDB 能够提供更高效、更强大的查询功能,同时保持与 SQL 标准的兼容性。

2.2 高效的查询优化和与之匹配的执行器

PieCloudDB 实现了专为复杂查询设计的优化器和与之匹配的高效执行器。

  • 专为复杂查询设计的优化器

PieCloudDB 的优化器提供了一系列全面的逻辑优化功能,其中包括谓词下推、子查询子连接提升和外连接消除等。此外,优化器基于纯粹的代价模型进行深度优化,在多阶段聚集过程中对每个节点进行代价估算,并利用动态规划等算法生成多条路径,最终选择代价最低的路径来执行查询。这些功能旨在提高查询性能和效率,从而优化 PieCloudDB 的查询执行过程。

作为一款分布式数据库,PieCloudDB 需要实现众多分布式运算,包括多次数据重分布(reshuffle)和分布式聚合运算(agg)。为了能够在跨表查询时进行高效的分布式表连接,PieCloudDB 的优化器需要全面描述数据分布特性,以便进行分布式代价估算。

通过全面的数据分布特性描述,PieCloudDB 的优化器能够考虑到数据在不同节点上的分布情况,从而更准确地估算跨表查询的代价。这使得优化器能够生成高效的查询计划,避免不必要的数据重分布操作,提高查询性能和效率。

  • 分布式环境高效执行器

为了配合专为复杂查询设计的优化器,PieCloudDB 实现了高效的执行器,以在分布式环境下执行查询操作。通过采用多组别多阶段执行模型,并进行大量的数据交换,PieCloudDB 的执行器能够在分布式环境下高效地执行查询操作。这种执行模型可以充分利用分布式系统的计算资源,并提高查询的并行性和整体性能。同时,通过与优化器的紧密配合,PieCloudDB 可以根据优化器生成的查询计划特性来优化执行器的执行策略,进一步提高查询性能和效率。

2.3 对事务(ACID)的完备支持

PieCloudDB 提供了对事务的完备支持,包括事务的 ACID 特性:原子性、一致性、隔离性和持久性。

  • 原子性(Atomicity):PieCloudDB 确保事务中的操作要么全部成功完成,要么全部失败回滚。如果一个事务中的某个操作失败,那么该事务中的所有操作都将被回滚,数据库状态会回到事务开始之前的状态,保持数据的一致性。
  • 一致性(Consistency):PieCloudDB 在事务提交之前,会检查事务的操作是否符合预定义的约束和规则,以确保数据库的一致性。如果事务执行完成后,数据库仍然保持一致性,那么该事务被认为是成功的。
  • 隔离性(Isolation):PieCloudDB 支持两个常用的隔离级别:Read Committed(读提交)和 Repeatable Read(可重复读)。在 Read Committed 级别下,事务只能看到其他事务已经提交的修改,而在 Repeatable Read 级别下,事务在整个事务过程中能够看到一个一致的快照,不受其他并发事务的修改影响。
  • 持久性(Durability):PieCloudDB 确保一旦事务提交成功,其对数据库的修改将永久保存,即使发生系统故障或崩溃。这是通过将事务日志记录在稳定的存储介质上来实现的,以便在恢复过程中可以重放事务日志。

通过提供对事务 ACID 特性的完备支持,PieCloudDB 提供了可靠和一致的数据管理机制。无论是在并发环境中还是在面临故障的情况下,PieCloudDB 都能确保数据的完整性和可靠性。

2.4 极致的计算集群弹性

PieCloudDB 具备极致的计算集群扩缩容能力,能够实现计算集群快速的扩展和收缩操作。PieCloudDB 的 Executor 节点并不持有持久化的数据,扩展和收缩操作不涉及数据的移动。此外,Executor 节点也不直接访问系统表、事务和锁。在进行计算集群的扩展时,PieCloudDB 只需要在新的虚拟机节点上部署二进制并向元数据服务注册。这样的设计确保了扩缩容操作的高效性。

PieCloudDB 为用户提供了一个独立的计算池,该计算池是为了支持快速的扩缩容而准备的。在这个计算池内,PieCloudDB 可以在一定范围内实现秒级的扩容和收缩操作。这意味着当用户需要增加计算资源时,PieCloudDB 可以迅速添加新的计算节点,使得整个集群能够处理更多的并发请求。反之,当用户需要减少计算资源时,PieCloudDB 也能够快速地收缩计算节点,以节省成本和资源。

2.5 多集群与高可用

PieCloudDB 支持多集群。用户可以在同一个数据集上起多个集群。在生产环境中,常常会遇到不同的部门对集群大小的需求不一样。这种情况下,如果只有单集群,就需要根据最大的集群需求来创建集群,造成资源的浪费。在多集群场景下,不同部门可根据自身需求创建不同大小的集群,任务结束时可以关闭集群,多个集群访问同一个数据集,并共享同一个 ACID 特性。

由于 PieCloudDB Executor 是无状态的,当某个 Executor 出现故障,Coordinator 会执行下个 Query 时,由剩下的 Executor 来执行任务。此过程中,用户无感知,不会对业务产生影响。

通过这些特性,PieCloudDB 在 OLAP 场景下,可以让用户像使用 PostgreSQL 一样使用 PieCloudDB。用户只需为已经发生的计算和存储付费。用户可以按需启动和关闭多个不同大小的集群,以适应不同类型的任务,从而取得性能和开发效率的平衡。

3. PieCloudDB 云原生架构的实现

为了适应云环境,PieCloudDB 实现了弹性伸缩的集群和多集群这两个主要的云原生特性,打造了完全无状态的 Executor 节点、独立的系统表和分布式的锁。

3.1 虚拟数仓

PieCloudDB 为了实现在扩缩容过程中无需移动数据,将用户数据分离到对象存储中。此外,Executor 节点上不存储系统表、事务和锁信息,而是依赖 Coordinator 来解决这些问题,从而使 Executor 节点成为无状态的节点,实现秒级扩缩容。

为了实现 Multi-master 架构,并实现有状态的 Coordinator 节点,PieCloudDB 使用元数据服务来完成这些功能。系统表以 Key-Value 的形式存储在 KV 数据库 FoundationDB 中,并通过 FoundationDB 的短时间、小体量的事务特性,实现了分布式锁和分布式事务。这样,PieCloudDB 能够在 Coordinator 节点上处理分布式锁和事务,并保证系统的一致性和可靠性。

通过这一系列的设计和操作,PieCloudDB 实现了完全无状态的虚拟数仓。用户可以根据需要创建和关闭虚拟数仓,而在扩缩容过程中无需移动数据,并且能够快速进行节点的扩展和收缩。这使得 PieCloudDB 能够高效地适应不同规模和负载的需求,并提供灵活的数据存储和计算资源管理。

  • 系统表:mStore

PieCloudDB 将元组以 Key-Value 的形式存储到 FoundationDB 中,并利用 FoundationDB Key 的自然排序来实现索引。在 PieCloudDB 中,每个元组都被编码为一个 Key-Value 对,其中 Key 表示元组的索引信息,而 Value 则包含了元组的数据内容。通过利用 FoundationDB Key 的自然排序,可以高效地进行范围查询和索引查找,从而实现快速的数据检索和访问。

为了实现多版本并发控制,PieCloudDB 使用了 Xmin、Xmax 和 cid 等机制。Xmin 和 Xmax 记录了事务对元组的可见性信息,其中 Xmin 表示最早可见的事务,而 Xmax 表示最晚可见的事务。cid(Commit ID)则表示事务的提交标识。通过这些机制,PieCloudDB 可以实现并发事务的隔离性和一致性,并支持多版本的查询和回滚操作。

通过将元组存储为 Key-Value 对,利用 FoundationDB 的自然排序和采用 MVCC 机制,PieCloudDB 能够高效地处理数据的存储、索引和并发访问,从而提供高性能和可靠的数据库服务。

  • 数据表:oStore

PieCloudDB 通过将数据分离到对象存储(如 S3)上,利用 oStore 构建了对象存储上的用户表。由于对象存储本身只支持插入(insert)和删除(delete)操作,而不支持更新(update)和追加(append)操作。PieCloudDB 在 mStore 中创建辅助表来实现 MVCC(多版本并发控制)的特性。

在 mStore 的辅助表中,每 个 tuple 对应 oStore 的一个 block,oStore 的 block 中存储了一部分的用户数据。这样,辅助表的每个 tuple 的可见性就与对应的 block 的可见性相关联,从而实现了 MVCC 的特性。当执行更新(update)或删除(delete)操作时,PieCloudDB 会生成一个新的 block,将未发生变化的 tuple 放入新的 block 中,并将更新后的用户数据放入新的 block 中(例如,在 block 4 上执行更新操作后,生成一个新的 block 5,将更新后的用户数据放入新的 block 5 中)。最后,辅助表将完成更新(update)操作。 

通过这种设计和操作,PieCloudDB 能够在对象存储上实现 MVCC 特性,并通过辅助表来管理数据的版本和可见性。这使得 PieCloudDB 能够支持更新和删除操作,同时保持数据的一致性和并发控制的正确性。

  • 分布式锁和事务

PieCloudDB 利用 FoundationDB 的事务提交冲突(commit conflict)机制来实现锁的共享区的正确访问,从而实现了分布式的锁。

在 PieCloudDB 中,多个事务需要访问共享区时,它们会通过 FoundationDB 的事务机制进行竞争和协调。每个事务尝试获取锁并执行对共享资源的操作。如果多个事务同时请求同一个共享锁,FoundationDB 的事务提交冲突机制会确保只有一个事务能够成功获取锁并进行操作,而其他事务将被阻塞或回滚。

通过利用 FoundationDB 的事务提交冲突机制,PieCloudDB 能够实现分布式的锁管理,确保对共享区的正确访问和资源的互斥操作。这种机制保证了多个事务之间的隔离性和一致性,避免了数据竞争和冲突的发生,并提供了可靠的分布式锁功能。

此外,PieCloudDB 还在 FoundationDB 上实现了分布式的事务,并通过 mStore、oStore、分布式锁和事务的实现,构建了一个云原生的分布式架构。这样的架构能够提供高可靠性、高性能的数据库服务,并支持分布式的数据操作和管理。

优秀的架构设计是一款数据库产品成功的第一步,OpenPie 研发团队将对 PieCloudDB 产品进行不断迭代,针对性能推出了聚集下推、预计算、Block Skipping 等功能,并很快将推出 Time Travel、Branch、Data Sharing 等系列提高用户的使用体验。PieCloudDB 将继续前进,在 eMPP 分布式专利技术、服务器无感知(Serverless)及 透明数据加密(TDE)等多项核心技术加持下,为企业构建高安全性,高可靠性,高可用性的「坚如磐石」的云原生虚拟数仓,助力企业实现数据价值最大化,欢迎关注! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解 Golang: 锁

本文通过对 Go 中源码层面的加锁、解锁实现细则来介绍锁的操作,包括 Mutex 互斥锁、RWMutex 读写锁,以及它们底层依赖的 sema 信号锁。 atomic 原子操作 正常情况下,多个协程同时操作 num 时,不能保证 num 值得最终一致性&#x…

锈湖新作地铁繁花试玩版正式上线啦

地铁繁花是锈湖厂商新作点击式解谜冒险解谜游戏,英文名称为“Underground Blossom”,在游戏中你将深入锈湖的地下,扮演并追溯Laura Vanderboom的人生和记忆吧!从一个车站到另一个车站,每个地铁站都象征着劳拉的一段过去…

语音芯片WT2003H-B003,集成压力传感与语音提示的按摩器创新方案

​在如今追求健康、舒适生活方式的时代,压力传感技术与语音提示功能的结合正引领着按摩器行业的创新浪潮。WT2003H-B003语音芯片IC作为一款独具价值的语音芯片,以其集成了先进的压力传感算法和语音提示功能,为按摩器压感方案带来了全新的体验…

Selenium修改HTTP请求头三种方式

目录 什么是HTTP请求头 需要更改HTTP请求请求头 Selenium修改请求头 Java HTTP请求框架 代码实战 使用反向代理 使用 Firefox 扩展 下载火狐浏览器扩展 加载火狐扩展 设置扩展首选项 设置所需的功能 完整自动化用例 总结: 什么是HTTP请求头 HTTP请求头…

科普 | 什么是5G消息平台功能完备性认证,怎么才能获得5G消息平台功能完备性证书

5G消息平台功能完备性测试是由中国信息通信研究院同中国通信企业协会在5G消息工作组共同发起,旨在提升CSP的5G消息平台质量,促进5G消息业务发展。 测试针对5G消息平台的Chatbot下行消息交互、Chatbot接收消息、消息平台业务配置管理、消息平台业务统计管…

智能故障诊断的深度学习模型复杂度指标计算(MACs、Params)

引言: 对于智能故障诊断任务而言,受限于现场工业设备设施的算力,模型在轻量化上具有典型需求。因此,在保证模型精准性的同时尽量降低模型的复杂度是必要的,本博客对模型的复杂度概念进行了剖析,并在pytorch框架下对相关热门轻量级模型的复杂度评估进行了分析。 深度学习…

容智信息荣获2023第三届中国RPA+AI开发者大赛多项大奖

近日,历时数月的「2023第三届中国RPAAI开发者大赛」在苏州圆满收官。本次大赛由RPA中国联合全球人工智能产品应用博览会主办,容智信息作为顶级联合主办单位,主旨挖掘人才,促进RPA和AI技术在社会各领域的融合性应用。 这次大赛的主…

计算机网络————应用层

文章目录 概述域名系统DNS域名结构域名服务器解析过程常见的DNS记录DNS报文格式基础结构部分问题部分资源记录(RR, Resource Record)部分 万维网WWWURLHTTPHTTP发展HTTP报文结构请求报文响应报文 cookie 内容分发网络CDN 概述 应用层的具体内容就是规定应用进程在通信时所遵循的…

JS中常用内置对象

真正原创的东西很少,能抄明白就很不容易了 文章目录 数组常用方法❗push 数据增加到尾部并返回unshift 数据增加到头部并返回pop 删除最后一个数据并返回shift 删除第一个数据并返回sort 数组排序reverse 数组逆序concat 合并多个数组的数据并返回join 数据连接成字…

SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(四) 表格中断问题

接上一篇 SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(三) 给pdf加水印、页眉页脚、页眉logo 设置表格的css样式 table {/*分页时表格换行, 可不用, 使用表格行换行即可*//*page-break-before: always;*/border-…

QT简易加法计算器项目实现

完整代码见GitHub:点击进入 在该项目中,使用了三个文件,分别是CalculatorDialog.h, CalculatorDialog.cpp, main.cpp CalculatorDialog.h:在该头文件里定义了一些成员变量和槽函数,用于实现计算器基本功能。Calculator…

Springboot的自动装配解读

目录 1.Springboot的自动装配 1.1 组件装配 1.1.1 组件 1.2 Spring Framework 的模块装配 1.2.1 Import注解 1.2.2 BeanDefinition 1.3 Spring Framework 的条件装配 1.3.1 Profile 1.3.2 Conditional 1.3.3 MetaData元数据接口(补充) Annot…

4、离线数仓数据同步策略(全量表数据同步、增量表数据同步、首日同步、采集通道脚本)

1、离线数仓同步数据 1.1 用户行为数据同步 1.1.1 数据通道 用户行为数据由Flume从Kafka直接同步到HDFS,由于离线数仓采用Hive的分区表按天统计,所以目标路径要包含一层日期。具体数据流向如下图所示。 1.1.2 日志消费Flume配置概述 按照规划&…

【选择排序】手撕八大排序之直接选择排序和堆排序

目录 一.选择排序 1.直接选择排序 2.堆排序 一.选择排序 1.直接选择排序 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每次遍历找到最小(或最大)的元素,然后将其放置在已排序序列的末尾。在…

实操接口自动化测试项目之项分层设计

本文以笔者当前使用的自动化测试项目为例,浅谈分层设计的思路,不涉及到具体的代码细节和某个框架的实现原理,重点关注在分层前后的使用对比,可能会以一些伪代码为例来说明举例。 接口测试三要素: 参数构造发起请求&a…

JS 1.如何实现继承 2.原型和原型链

1_使用class实现继承 /** 继承 */ class Person { constructor(name) { this.name name;}drink() { console.log(喝水)} }class Student extends Person{ constructor(name, score) { // new Personsuper(name);this.score score;}introduce() { console.log(我是${this.nam…

EasyCVR播放设备录像出现部分视频不能播放的原因排查与解决

EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力。平台支持多协议接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等,对外可分发多格式视频流,包括RTSP、…

栈和队列(二) 队列的实现,用栈实现队列,用队列实现栈,设计循环队列

文章目录 队列的实现用队列实现栈用栈实现队列设计循环队列 队列的实现 这里的队列我们使用链式队列,好处就是可以很方便的取出队头的元素。 使用顺序队列取出队头元素所花费的时间复杂度为O(N),把后面的元素向前移动一个下标所花…

CentOS Linux的最佳替代方案(二)_AlmaLinux OS 8.6基础安装教程

文章目录 CentOS Linux的最佳替代方案(二)_AlmaLinux OS 8.6基础安装教程一 AlmaLinux介绍和发展历史二 AlmaLinux基础安装2.1 下载地址2.2 安装过程 三 AlmaLinux使用3.1 关闭selinux/firewalld3.2 替换默认源3.3 安装一些必要工具 CentOS Linux的最佳替…

瓶盖扫码回收APP系统 废旧物品创造价值收益

资源回收再利用是近些年国家大力倡导的,人们也在积极践行,从垃圾回收、废旧衣物回收、烟盒回收等等.....今天小白要带大家了解的是瓶盖回收APP软件开发的相关事项。瓶盖回收APP是本着资源回收的初衷,可以时间废旧瓶盖的多次利用,减…