greenplum,teradata,presto,clickhouse四种分布式数据库的对⽐
⽂章⽬录
1. 四种数据库的⽐较
数据库描述
Greenplum开源⼤规模并⾏数据分析引擎。借助MPP架构,在⼤型数据集上执⾏复杂SQL分析的速度⽐很多解决⽅案都要快。应⽤⼴泛。
Teradata⼤型数据仓库系统,产品成熟,价格昂贵。⽤于证券系统。
Presto 分布式SQL查询引擎, 专门进⾏⾼速、实时的数据分析。本⾝不存储数据,但是可以接⼊多种数据源。擅长对海量数据进⾏复杂的分析。⽤
于⼤数据量分析。
Clickhouse⽤于在线数据分析。⽀持功能简单。CPU 利⽤率⾼,速度极快。⽤于⾏为统计分析。
2. Greenplum数据库
2.1 Greenplum架构
2.1.1 采⽤MMP架构
master host:负责与客户端对接, 不包含任何⽤户数据,使⽤postgres数据库内核,保存有元数据,与segment 由局域⽹通讯。
segment:存放数据,监听master的连接,⽤户只能通过master访问,是独⽴的PostgreSQL数据库。⼀个节点可运⾏多个segment实例
Interconnect:协调进程,由局域⽹互连,⽀持TCP or UDP
2.2.2 Hadoop与MPP的应⽤区别
Hadoop MPP
⾮结构化数据,半结构化数据关系数据
海量数据存储查询、批量数据ETL、⽇志分析、⽂本分析多维度数据⾃助分析、数据集市
可将两种架构混合使⽤(MPPDB+Hadoop):⽤MPP处理PB级别的、⾼质量的结构化数据,同时为应⽤提供丰富的SQL和事物⽀持能⼒;⽤Hadoop实现半结构化、⾮结构化数据处理。这样可以同时满⾜结构化、半结构化和⾮结构化数据的⾼效处理需求。
2.2 greenplum 的⾼可⽤性
2.2.1 master冗余
设⽴Standby 节点复制master的系统⽬录表⽇志( catalog tables )
master坏掉时需由管理员触发激活standby成为新master。
使⽤基于预读⽇志(WAL)的流复制来保持primary master和standby master服务器同步。
2.2.2 segment冗余
主segment接收来⾃master的请求以更改主segment的数据库,然后将这些更改复制到相应的mirror segment上。
可选择对主机mirror(group mirroring)或对segment分散mirror(spread mirroring)。
group mirroring:⼀台机器出现问题时,另⼀台机器将有两倍负荷
spread mirroring:可负载均衡
当segment实例或主机发⽣故障,master将记录实例的down状态,并激活与其对应的segment实例。
Mirror segment采⽤物理⽂件复制的⽅案,⽽对于堆表,会先同步⽇志,当主segment的块需要写回磁盘时再同步mirror的⽂件,primary segment失败时,mirror⾃动成为primary,且状态为 Change Tracking。mirror失败时,primary会将状态改为Change Tracking
AO表(Append-optimized)不使⽤内存缓存机制。对AO表的块所做的更改会⽴即复制到mirror segment上。
2.3 greenplum的并⾏查询
⼀个表的数据按hash映射分布在不同segment节点上,每次操作产⽣⼀个slice,slice之间通过 gather、broadcast、redistribution ⽅式传播
gather broadcast redistribution
每个节点数据发⾄master节点表数据分布在各节点上,需每个节点发数据⾄每个节点,使每个
节点都拥有表的完整数据,适⽤于⼩表
join与group by时,⼴播代价⼤时可按键重新将各节点数据打散⾄
各节点再对每个节点操作,适⽤于⼤表
greenplum⽀持有三种存储⽅式: ⾏存储、列存储、外部表
⾏存储列存储外部表
多列更新快⼀次只访问⼏个字段,压缩⽐⾼数据库只保留元数据信息可以对数据进⾏hash分区或范围分区
2.4 greenplum的多版本控制(MVCC)
事务型数据库⽤锁机制控制并发访问,greenplum⽤多版本控制保证数据⼀致性。最⼤的好处是读写不冲突,读的是snapshot。
3 Teradata数据库
3.1 Teradata 数据库架构
每个节点物理上是⼀个SMP处理单元(多CPU计算机),节点硬件包括CPU、内存、磁盘、⽹卡、BYNET端⼝常见mpp数据库
⽹卡:与IBM MainFrame连接的Channel Adapter;局域⽹⽹卡。 ⼀个节点上只会使⽤⼀种⽹卡,但会有多块⽹卡,分别⽤于不同的连接和冗余。
3.1.1 连接层
CLI( call level interface ):请求响应、创建session、缓冲区分配、信息打包
TDP( teradata director program ): 运⾏在客户端系统:session初始化终⽌、登陆、验证、恢复重起、现有⼈员传递⾄PE的session 队列
MTDP( micro TDP ):与TDP的区别是不负责session在PE间分配。
MOSI( micro operating system interface ):实现不同数据库平台上运⾏的隔离层
3.1.2 PE层(parsing engine)
session control:主控logon、logoff
**parser:**解析sql,判断语法语义正确性,查询字典确认请求对象是否存在,⽤户是否有权限
**optimizer:**评估执⾏计划,转为AMP可执⾏步骤
**dispatcher:**分配AMP 所选任务,返回⽤户结果
3.1.3 MPL层(message passing layer)
MPL 层负责 PE 与 AMP之间传送信息、合成的返回结果集传 PE,由 PDE 与 Bynet 软硬件组成
PDE (parallel database extension):
直接架构在操作系统之上的⼀个接⼝层 , 提供并⾏环境, 执⾏虚拟处理器、进⾏Teradata并⾏任务调度、进⾏操作系统内核和Teradata数据库的运⾏时故障处理。
bynet软件、硬件:
⽤于节点之间的双向⼴播(bidirectional broadcast)、多路传递(multicast)和点对点通信(point-to-point
communication),
BYNET还实现SQL查询过程中的合并功能(每个节点或AMP,均匀分布表中⼀部分数据,当查询的时候每个节点并⾏查询,结果汇总到某个节点反馈给查询者,提⾼查询速度。
⼀般典型的teradata有两个BYNET同时⼯作 , BYNET⾃动均衡,避免某⼀个负载太多
PE能⽀持120个session处理,每个session可管理16个请求与相关结果,但每个时间点只有⼀个请求活动
3.1.4 AMP层
AMP(access module process)
ShareNothing架构的核⼼。
⼀个AMP最多控制 64个物理磁盘 (对商⽤OLTP来说,主要由DBA控制记录在磁盘的分布)
hash算法类似矩阵映射,修改AMP数时只需变动hashmap,速度⾮常快。
每个AMP可并⾏处理80个任务
AMP功能:
排序、聚合、格式化、转换操作
可能将数据传给其它 AMP
Lock 数据库或表
返回结果给dispatcher
空间使⽤控制和空间分配
输出数据的编码转换,与PE相反的⼯作
3.1.5 VDisk层
存储数据根据哈希算法被均匀分散存储到磁盘阵列中的不同的磁盘上。RAID0 与 RAID5 为主。因采⽤混合均匀存储⽽不存在数据库重组问题。
3.2 Teradata的并⾏处理能⼒
查询并⾏:每个AMP作为⼀个虚拟进程,独⽴处理⼀部分数据(如查询⼀个表)
步内并⾏:每个运算步骤都由多个进程并⾏处理(如借助于pipline的 join操作)
多步并⾏:优化器分解sql请求原则是尽可能使各步独⽴(如两个表的查询同时进⾏)
传统 OLTP 对于提出的新的问题,DBA 会建⽴⼀条新的索引,可能使数据库占⽤磁盘空间过⼤。⽽ teradata 采⽤将相同执⾏步骤的执⾏结果暂存于系统缓冲区的⽅法, 减少数据库本⾝的⼤⼩。
teradata 提供的并⾏ OLAP 操作有:排序、累计、移动平均、移动和、移动养分、采样、分位、限定
3.3 Teradata做的优化
3.3.1 ⼤数据量与⼩数据量访问⽭盾
teradata 在解决 hash 函数范围查询需要访问所有数据的问题时引⼊⽤户索引(分区主索引PPI),将数据按索引进⾏分区
3.3.2⽤户管理
引⼊⾓⾊来分配权限
引⼊⽤户参数为⽤户配置持久空间(分配的最⼤存储容量)、spool空间(存放中间过程与最后结果 )、临时空间(存放global temporary table被实例化的数据)限制、缺省数据库设定、⽤户密码设定
3.3.3 索引
AMP分组:对⼀个操作只使⽤部分amp单元进⾏处理,提⾼数据吞吐量
利⽤稀疏索引来去除⼤量空值索引
3.3.4 加速处理
解析器与分派器合为⼀
增强插⼊更新能⼒
引⼊合并更新
3.3.5 索引
对于unique key 元组在各磁盘分布
对于none-unique key 元组按key分布
次索引⼀般没有必要,taradata本⾝性能很⾼
3.3.6 锁机制
排它锁(create table):拒绝任意锁
写锁(update):拒绝read、write、exclusive
读锁(select):拒绝write、exclusive
访问锁:只拒绝排它锁(⽤于积累⼤量⾏数据,但结果可能不是最新结果)
4 Presto数据库
presto是facebook为了改进之前基于map-reduce的hive框架查询数据仓库时间过长⽽开发的数据分析⼯具。Presto本⾝不是数据库,⽽是分布式查询引擎。Presto可以访问HDFS,及其他数据源,数据库。但不能处理在线事务。
Presto被设计为数据仓库和数据分析产品:数据分析、⼤规模数据聚集和⽣成报表。这些⼯作经常通常被认为是线上分析处理操作 。4.1 Presto架构:
采⽤ master - slave 模型:
**coordinator:**master,负责meta管理,worker管理,query解析与调度
worker: 计算与读写
discovery server: 通常内嵌于coordinator节点中,也可以单独部署,⽤于节点⼼跳。
4.2 Presto数据模式
catalog:⼀类数据源,如mysql,hive
schema:数据库
table:表
存储单元包括 page,block:
page:多⾏数据集合,包含多列,但只提供逻辑⾏,实际以列存储
block:⼀列数据
1. array类型 int 、long、double
1. valueisnull[] ⼀⾏是否有值
2. value[] ⼀⾏具体值
2. 可变宽 string
1. slice 所有⾏拼接的字符串
2. offset 每⼀⾏的偏移位置
3. valueisnull[] 某⾏是否有值
3. 固定宽string
4. 字典(distinct值较少)
1. 任意类型
2. ids[] 每⼀⾏数据对应字典中编号
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论