Doris学习笔记

目录

简介

特点

MPP数据库

PB和EB都是用来衡量数据存储量的单位。

秒级响应

        Google Mesa

        Apache Impala

支持标准sql且兼容mysql协议

ROLAP

        OLAP(On-Line Analytical Processing,联机分析处理)

        ROLAP(Relational On-Line Analytical Processing,关系型联机分析处理)

自动上卷

简单的部署模式

FE

BE

MGW

OLAP分析引擎对比

设计要点

range分区、hash分桶两级数据分布

Schema

多副本管理、副本自动均衡

两阶段提交

MVCC版本控制

MVCC(Multi-Version Concurrency Control)

Base Compaction

累积压缩(Cumulative Compaction)

读放大(Read Amplification)

写放大(Write Amplification)

空间放大(Space Amplification)

Doris使用LSM树

支持AggregateUniqDuplicate三种数据模型

什么是数据模型

3类数据模型

Doris导入基本原理

StreamLoad

SparkLoad


简介

特点

  • 支持大数据量的分布式数据管理:MPP数据库

  • 支持事务

  • 对分析型查询友好

  • 高吞吐

  • MPP数据库

分布式存储+分布式执行,提供大数据量的存储和计算能力

MPP(Massively Parallel Processing,大规模并行处理)数据库是一种分布式系统,它通过并行运行大量处理器或服务器来执行查询,从而实现高速、高吞吐量的数据处理。

在MPP数据库中,数据被分布在多个节点(服务器或处理器)上,每个节点都有自己的存储和计算资源。当执行查询时,查询会被分解成多个子查询,每个子查询在一个节点上并行执行。这样,大量的查询可以同时进行,大大提高了查询速度和系统吞吐量。

MPP数据库非常适合处理大数据,因为它可以轻松扩展到数百甚至数千个节点,处理PB级别的数据。此外,由于每个节点都有自己的存储和计算资源,因此MPP数据库具有很高的容错性。

PB和EB都是用来衡量数据存储量的单位。
  • PB:PB是PetaByte的缩写,1PB等于1024TB(TeraBytes),也就是1,048,576GB(GigaBytes),或者说是1,125,899,906,842,624字节。
  • EB:EB是ExaByte的缩写,1EB等于1024PB,也就是1,048,576TB,或者说是1,152,921,504,606,846,976字节。

这两个单位通常用于描述大数据存储和处理的规模。例如,一些大型互联网公司可能需要处理PB甚至EB级别的数据。

常见的MPP数据库有Greenplum、Redshift、Teradata、Vertica等。在开源领域,有ClickHouse、Doris等。

  • 秒级响应

设计基于Google Mesa和Apache Impala,具有良好的查询性能

Google Mesa和Apache Impala都是大数据处理工具,但它们的设计目标和使用场景有所不同。

        Google Mesa

Mesa是Google开发的一种高度可扩展的数据仓库系统,用于存储和查询大规模的结构化数据。Mesa的主要特点是能够提供一致性保证和高可用性,这使得它非常适合用于处理Google的广告业务等关键任务。Mesa支持PB级别的数据存储,并且可以处理来自全球数百万台服务器的更新请求。然而,Mesa并未开源,我们只能通过Google发布的论文来了解它的设计和实现。

        Apache Impala

Impala是Apache Software Foundation开源的一种大数据查询工具,它提供了对Apache Hadoop数据的高性能、低延迟的SQL查询功能。Impala支持在Hadoop集群上进行交互式的分析查询,而无需将数据转移到其他系统或使用其他特定的查询引擎。Impala的主要优点是查询速度快,支持标准的SQL语法,以及与Hadoop生态系统的良好集成。

总的来说,Google Mesa和Apache Impala都是大数据处理的重要工具,但Mesa更注重数据的一致性和可用性,而Impala更注重查询的性能和与Hadoop的集成。

  • 支持标准sql且兼容mysql协议

学习成本低,方便易用

  • ROLAP

相对于纯预计算系统,建模更灵活,同时消耗更少存储成本,提供更加丰富灵活的查询能力(如两大表JOIN等)

        OLAP(On-Line Analytical Processing,联机分析处理)

是一种快速获取多维数据库信息的方法。它能够提供一种用户视图,使用户能够以一种直观的方式查看企业的全局,并能够进行复杂的分析。OLAP的主要功能包括:多维分析、钻取、切片和旋转等。

        ROLAP(Relational On-Line Analytical Processing,关系型联机分析处理)

是OLAP的一种实现方式。ROLAP使用传统的关系数据库来存储和管理数据,以及进行计算。ROLAP的优点是可以处理大量的数据,而且可以使用SQL进行查询,易于理解和使用。但是,由于ROLAP依赖于关系数据库,因此其性能和可扩展性可能会受到数据库性能的限制。

总的来说,OLAP是一种分析处理的方法,而ROLAP是实现OLAP的一种技术。

  • 自动上卷

用一定空间换取性能提升

简单的部署模式

FE

元数据管理、查询计划生成和下发、数据副本管理

FE(Master)通常不执行查询

BE

副本存储、查询计划执行、数据写入

MGW

负载均衡,转发客户端请求到FE

OLAP分析引擎对比

设计要点

  • range分区、hash分桶两级数据分布

一个分区有多个schema

副本总数=分区数*schema数*副本倍数

不同副本在不同机器上,如果机器数不满足分区分桶要求,建分区分桶失败

Schema

在数据库中指的是数据库的结构和组织方式,它定义了数据库中表的组织、表之间的关系、每个表中字段的属性等。简单来说,Schema就是数据库的蓝图,它描述了数据在数据库中如何存储和组织。

Schema的数量取决于数据库的设计和需求。在一个数据库中,可以有一个或多个Schema。例如,如果一个公司的不同部门需要使用不同的数据集,那么可能会为每个部门创建一个单独的Schema。每个Schema都有自己的命名空间,可以包含表、视图、索引、序列等数据库对象。

在实际应用中,Schema的数量没有固定的标准,完全取决于具体的业务需求和数据库设计。

  • 多副本管理、副本自动均衡

集群扩容或BE宕机可能造成副本不均衡

  • 两阶段提交

prepare-commit-published

  • MVCC版本控制

MVCC(Multi-Version Concurrency Control)

多版本并发控制,是一种常用的并发控制技术。它的主要目标是在保证数据一致性的同时,尽可能地提高数据库的并发性能。

在MVCC的设计中,每一条记录在数据库中不只有一份实例,同时存在多个版本,每个版本都有自己的版本号。当读取数据时,数据库会返回版本号最新且事务已经提交的数据,这样就避免了读操作等待写操作的情况,提高了并发性能。

当进行写操作(更新或删除)时,数据库并不直接覆盖原有记录,而是创建一个新的版本,同时保留旧的版本。这样,即使有新的写操作,读操作也可以继续读取旧的版本数据,避免了读写冲突。

MVCC的优点是提高了并发性能,减少了锁的竞争。但是,由于需要保存多个版本的数据,所以会占用更多的存储空间。

Base Compaction

是Doris数据库中的一种压缩策略,主要用于处理大量的小文件问题。在Doris中,数据被分成多个版本,每个版本都对应一个delta文件。当这些delta文件数量过多时,就会影响查询性能。

Base Compaction的工作原理是将多个小的delta文件合并成一个大的base文件,从而减少文件的数量。这个过程会对数据进行排序和重组,以提高查询效率。它是一个后台的、低优先级的任务,不会影响到正常的查询和写入操作。当系统空闲时,Base Compaction会自动运行,从而提高系统的整体性能。

Doris在进行Base Compaction后,原来的delta文件会被删除。这是因为Base Compaction的过程实际上是将多个小的delta文件合并成一个大的base文件,合并后的base文件已经包含了原来delta文件的所有数据,因此原来的delta文件就没有必要保留了,会被系统自动删除,以节省存储空间。

累积压缩(Cumulative Compaction)

是一种常见的压缩策略,主要用于LSM(Log-Structured Merge-tree)类型的数据库,如RocksDB和LevelDB等。这种策略的主要目标是减少存储空间的使用和写放大,但它可能会导致读放大。

在累积压缩中,数据被分成多个层级,每个层级都包含一些SSTable文件。当一个层级的数据量达到一定阈值时,就会将这个层级的数据和下一个层级的数据合并,形成新的SSTable文件。这个过程被称为Compaction。

Compaction可以有效地减少存储空间的使用,但是它可能会导致读放大。这是因为在读取数据时,可能需要在多个层级中查找数据,甚至可能需要读取多个SSTable文件。此外,由于Compaction过程中可能会产生新的SSTable文件,这也可能导致数据的物理位置发生变化,从而增加了数据读取的难度。

为了降低读放大,可以通过调整Compaction策略、优化数据布局、使用Bloom Filter等方法进行优化。

读放大(Read Amplification)

是一个描述在存储系统中,为了读取一定量的数据,实际需要读取的数据量的指标。这个概念通常用于描述基于LSM(Log-Structured Merge-tree)的数据库系统,如RocksDB和LevelDB等。

在LSM树型数据库中,数据被存储在多个层级(Level)的SSTable文件中。当进行数据读取时,可能需要在多个层级中查找数据,甚至可能需要读取多个SSTable文件,这就导致了读放大。

读放大会影响系统的读取性能和效率。为了降低读放大,可以通过调整Compaction策略、优化数据布局、使用Bloom Filter等方法进行优化。

写放大(Write Amplification)

写放大这是一个描述数据实际写入硬盘的量与应用程序写入的数据量之比的指标。在LSM树型数据库中,由于Compaction过程,同一份数据可能会被多次写入硬盘,从而导致写放大。写放大会影响硬盘的寿命和系统的写入性能。

空间放大(Space Amplification)

空间放大是一个描述硬盘上实际使用的空间与应用程序数据量之比的指标。在LSM树型数据库中,由于数据版本和删除标记的存在,硬盘上的实际数据量可能会大于应用程序的数据量,从而导致空间放大。空间放大会影响硬盘的使用效率和系统的存储成本。

为了降低写放大和空间放大,可以通过调整Compaction策略、优化数据布局、使用压缩技术等方法进行优化。

Doris使用LSM树

LSM(Log-Structured Merge Tree)是一种用于磁盘存储的数据结构,主要用于解决随机写入性能问题。LSM树最初是由Google的Bigtable使用的,现在已经被广泛应用于许多其他的存储系统,如LevelDB,RocksDB,Cassandra,HBase等。

LSM树的主要思想是将随机的写入操作转化为顺序的写入,从而大大提高了写入性能。在LSM树中,所有的写入操作首先会被存储在内存中的一个结构(通常是跳表或者红黑树)中,当这个结构的大小达到一定阈值时,就会将这个结构的数据写入到磁盘中。这样,大部分的写入操作都是在内存中进行的,只有少部分的写入操作会涉及到磁盘,从而大大提高了写入性能。

另外,LSM树还有一个合并(Compaction)的过程,这个过程会定期地在后台运行,将磁盘中的旧数据和新数据进行合并,删除无用的数据,从而保持磁盘的空间使用率。总的来说,LSM树是一种非常高效的磁盘存储结构,特别适合于写入操作比较频繁的场景。

在Doris中,LSM树被用于存储表的数据。当数据被插入到Doris中时,首先会被写入到内存中的MemTable中。当MemTable的大小达到一定阈值时,就会将MemTable的数据刷写到磁盘中,形成一个新的Segment。这些Segment会被组织成一个LSM树,以支持高效的数据查询和更新。同时,Doris还会定期地进行Compaction操作,将磁盘中的多个Segment合并成一个大的Segment,以提高查询性能和节省磁盘空间。

  • 支持AggregateUniqDuplicate三种数据模型
什么是数据模型

数据模型定义了Doris副本在单个版本中的组织形式和多个版本在compaction和查询时的聚合方式。

数据主要包含维度(Key)和指标(Value)两种列,Key在前,Value在后。单个版本中,数据按Key排序放置,前36字节会构建前缀索引,查询条件落在前缀时,可极大加快查询速度。

3类数据模型

Aggregate模型:根据预定义的聚合函数,将含有相同key的数据聚合成一条数据。

Uniq模型:特殊的Aggregate模型,数据合并时,如遇到相同key的value,会使用高版本数据替换低版本数据。

Duplicate模型:也称之明细模型,数据按key排序,不作聚合,相同key的数据会全部保留下来。

Doris导入基本原理

StreamLoad

Kafka2Doris以及Hive2Doris的默认导入方式

SparkLoad

减小Doris压力,适用于大数据量的Hive2Doris

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

理解Mysql索引原理及特性

作为开发人员,碰到了执行时间较长的sql时,基本上大家都会说”加个索引吧”。但是索引是什么东西,索引有哪些特性,下面和大家简单讨论一下。 1 索引如何工作,是如何加快查询速度 索引就好比书本的目录,提高数…

智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.差分进化算法4.实验参数设定5.算法结果6.…

FTP、U盘等传统数据安全摆渡方法的6个弊端

数据安全摆渡,即数据在不同的网络之间,进行安全流转。做网间隔离的初衷,就是为了保护数据安全,但是在数据摆渡时,除了安全,企业还是需要考虑其他的要素,比如可靠性、易用性、兼容性等等。而传统…

linux 防火墙systemctl (个人笔记)

查看 systemctl status firewalld 开启 systemctl start firewalld 关闭 systemctl stop firewalld.service 查看所有 firewall-cmd --zonepublic --list-ports 开放端口:// --permanent 永久生效,没有此参数重启后失效 firewall-cmd --zonepublic --add-port9527/…

c语言 词法分析器《编译原理》课程设计 文本形式保存

词法分析器的功能输入源程序,按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位,包括关键字、标识符、运算符、界符和常量等。 (1) 关键字:是由程序语言定义的具有固定意义的标识符。例如begin,end&#xf…

SpringBoot中日志的使用log4j2

SpringBoot中日志的使用log4j2 1、log4j2介绍 Apache Log4j2 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改 进,同时修复了 Logback 架构中的一些问题,主要有: 异常处理…

GPDB - 高可用特性 - 同步复制与异步复制

GPDB - 高可用特性 - 同步复制与异步复制 GreenPlum是基于PostgreSQL的分布式数据库,master用于接收用户请求并生成执行计划与分发,当然也可以参与计算;而segment则用于存储数据,将计算的结果传递给master。Segment本身具有高可用…

5.4 Linux KickStart 无人值守安装

1、概念介绍 搭建无人执行安装服务器需要从装网络引导安装操作系统,这样我们就可以不必走到机器那里插入CD-ROM光盘或者U盘手动一台一台安装操作系统,使用网络引导批量部署服务器操作系统。 服务架构:PXE DHCP TFTP Kickstar…

dockerfite创建镜像---INMP+wordpress

目录 搭建dockerfile---lnmp 创建nginx镜像 运行 创建数据库镜像 运行 ​编辑 创建php镜像 运行 搭建dockerfile---lnmp 在192.168.10.201 服务IP地址nginx 172.111.0.10 dockernginxmysql172.111.0.20dockermysqlphp172.111.0.30dockerphp 创建nginx镜像 路径 vim /…

python基本数据类型(一)-字符串

1.字符串 字符串就是一系列字符,在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示: "This is a string." This is also a string.这种灵活性让你能够在字符…

【产品经理】产品增效项目落地,项目反哺产品成长

产品和项目是相辅相成的关系,产品的规范、成熟,为项目的快速落地提供支撑,项目的落地反哺产品,促进产品的成长成熟。 软件工程的初期是,我们需要什么,就立项项目,通过项目实现需要。 随着项目的…

用实例域代替序数

在Java中,枚举类型的ordinal()方法返回枚举常量的序数(即其在枚举声明中的位置)。在某些情况下,使用实例域(instance field)代替序数可能更加安全和易读。以下是一个示例,演示如何使用实例域代替…

低代码开发如何快速构建AI应用

随着人工智能(AI)的快速发展,越来越多的企业和开发者开始意识到AI在业务和应用中的重要性。然而,AI应用的开发通常被认为是复杂和耗时的过程,需要大量的编码和数据科学知识。为了解决这个问题,低代码开发平…

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站,它可以基于截图生成站点代码,生成速度快且准确。

Linux-----2、虚拟机安装Linux

# 虚拟机安装Linux # 一、学习环境介绍 # 1、虚拟机概述 1、什么是虚拟机软件? 虚拟机软件,有些时候想模拟出一个真实的电脑环境,碍于使用真机安装代价太大,因此而诞生的一款可以模拟操作系统运行的软件。 虚拟机软件目前有2…

DSP定时器0笔记

首先了解开发板TMS320f28335是150Mhz的频率 定时器结构图和概要 定时器0对应的中断是TINT0 大概是这样,时钟sysclkout 进入和TCR控制时钟进入 ,经过标定计数器(stm32的预分频),标定器挂这自动装载寄存器&#xff0c…

Unity中实现ShaderToy卡通火(移植篇)

文章目录 前言一、准备好我们的后处理基础脚本1、C#:2、Shader: 二、开始逐语句对ShaderToy进行转化1、首先,找到我们的主函数 mainImage2、其余的方法全部都是在 mainImage 函数中调用的方法3、替换后的代码(已经没报错了,但是效…

基于ssm旅游网站的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&#x…

rocketmq window测试小Demo 解决找不到或无法加载主类的问题

文章目录 rocketMQ启动1.下在相关的二进制文件2.配置环境变量3.启动NameServer4.启动broker5. MQ 启动!5.1 测试发送数据 6.关闭服务 rocketMQ启动 1.下在相关的二进制文件 下载地址,点击即达 2.配置环境变量 3.启动NameServer 在文件夹下执行cmd进…

嵌入式奇妙之旅:Python与树莓派编程深度探索

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在这个数字化的时代,嵌入式系统的应…