热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分布式数据库greenplum详解

前言在数据库诞生到现在,我们所能耳熟能详的数据库如oracle,mysql,sqlserver等,都属于关系型数据库,它们主要是基本的、日常的事务处理,记录即时的增、删、改、查,实

前言

  在数据库诞生到现在,我们所能耳熟能详的数据库如oracle,mysql,sqlserver等,都属于关系型数据库,它们主要是基本的、日常的事务处理,记录即时的增、删、改、查,实时性要求很高,但数据量不会很大,不会做很多复杂的逻辑,这一类归于OLTP(联机事务处理)型数据库,而分布式数据库是对海量的数据进行管理,解决的是海量的数据处理及分析能力,更多的是对数据进行读的操作,增、删、改是比较低频的操作,它对实时性要求不高,更强调的是数据的分析处理能力,属于OLAP(联机分析处理)型数据库。

  以下是OLAP和OLTP的比较:













































 OLTPOLAP
适用场景主要供基层人员使用,进行一线业务操作探索并挖掘数据价值,作为企业高层进行决策的参考
数据特点当前的、最新的、细节的, 二维的、分立的历史的, 聚集的, 多维的,集成的, 统一的
存取能力可以读/写数十条记录读上百万条记录
复杂度简单的事务复杂任务
可承载用户可承载用户数量为上千个上百万个
DB大小大小为100GB可以达到100TB
时效性实时时间的要求不严格

  greenplum属于OLAP型的一种分布式的关系型数据库,应用于数据仓库,它的底层是基于开源的关系型数据库postgresql进行开发完成的,postgresql拥有丰富的数据类型,强容错能力及存储结构等优点,因而也一跃而上,成为目前主流的数据库之一,由于greenplum底层是postgresql的原因,因此greenplum也继承了postgresql的这些优点,并且两者之间进行数据迁移可以做到完全兼容,避免进行数据转换。

  postgresql排名图:

技术分享图片


结构

  主从结构

   greenplum采用一主(Master)多从(Segment)的结构,Master负责查询解析、优化及任务分发,Segment负责查询处理、数据存储,双方通过Interconnect通信,总体架构如下:

技术分享图片


  master节点:

  是整个系统的控制中心和对外的服务接入点,它负责接收用户SQL请求,将SQL生成查询计划并进行并行处理优化,然后将查询计划分配(dispatch)到所有的Segment节点进行并行处理,协调组织各个Segment节点按照查询计划一步一步地进行并行处理,最后获取到Segment的计算结果,再返回给客户端;从用户的角度看Greenplum集群,看到的只是Master节点,无需关心集群内部的机制,所有的并行处理都是在Master控制下自动完成的。Master节点一般只有一个或两个(互为备份),主备方案实现高可用;


  segment节点:

  是Greenplum执行并行任务的并行运算节点,它接收Master的指令进行MPP并行计算,因此所有Segment节点的计算性能总和就是整个集群的性能,通过增加Segment节点,可以线性化得增加集群的处理性能和存储容量,Segment节点可以是1~10000个节点,它的数量决定greenplum的算力,可通过横向扩容提升整个数据库的算力及性能;


  Interconnect:

  是Master节点与Segment节点、Segment节点与Segment节点之间的数据传输组件,它基于千兆交换机或万兆交换机实现数据在节点间的高速传输;


 无共享/MPP架构

  Greenplum数据库软件将数据平均分布到系统的所有节点服务器上,所以节点存储每张表或表分区的部分行,所有数据加载和查询都是自动在各个节点服务器上并行运行,并且该架构支持扩展到上万个节点,做到数据完全的物理隔离。

  Greenplum的架构采用了MPP(大规模并行处理),在 MPP 系统中,每个 SMP节点也可以运行自己的操作系统、数据库等。换言之,每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution) 。

  SMP(SymmetricMulti-Processing),对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。传统的ORACLE和DB2均是此种类型,ORACLE RAC 是半共享状态;

  与传统的SMP架构明显不同,通常情况下,MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为 MPP系统不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。这就是看通信时间占用计算时间的比例而定,如果通信时间比较多,那MPP系统就不占优势了,相反,如果通信时间比较少,那MPP系统可以充分发挥资源的优势,达到高效率。

  技术分享图片

 


 特性

  greenplum是用于海量存储数据进行计算与分析的,它做数据分析跟计算时,往往所做的大量查询都是全表检索的模式进行的,是不建议添加索引的,而是用它分区、分布键的特性结合多个segment的并行将算力达到最大化。


 分区

  分区是对存储的数据进行逻辑划分,通过 "partition by" 子句完成的,它允许将一个大表划分为多个子表。"subpartition by" 子句可以将子表划分为更小的表 。从理论上讲,Greenplum对于根表(root table)可以拥有多少级(level)或多少个分区表(partitioned table)并没有限制,但是对于任一级分区(表的层次结构级别),一个分区表最多可以有32,767个子分区表。

  以时间为例,一个table表可以按字段month(月份)分区成table_01,table_02,... table_11,table_12,但都是在一个segment上。


 分布键

  与分区不同,分布键是进行物理划分,它是分布在不同的segment上,以指定的分布键字段或字段组合进行哈希/随机的策略分布,散布到不同的segment上,将数据平均分布到每一个节点机器上,为了避免数据倾斜导致算力不均,建议使用哈希策略进行分布,创建表使用 “distributed by(column,[…])” 子句。

  同样以时间为例,t_test表中‘2020-01-01‘的数据散布在segment1的t_test_01表上,‘2020-01-02‘的数据散布在segment2的t_test_02表上 ... 


create table t_test
(
id
int,
month varchar(10),
name
varchar(64)
)
distributed by (month)
partition
by range(month)
(
partition
01 start (2020-01-01) inclusive end (2020-01-31) inclusive,
partition
02 start (2020-02-01) inclusive end (2020-02-31) inclusive,
partition
03 start (2020-03-01) inclusive end (2020-03-31) inclusive,
partition
04 start (2020-04-01) inclusive end (2020-04-31) inclusive,
partition
05 start (2020-05-01) inclusive end (2020-05-31) inclusive,
partition
06 start (2020-06-01) inclusive end (2020-06-31) inclusive,
partition
07 start (2020-07-01) inclusive end (2020-07-31) inclusive,
partition
08 start (2020-08-01) inclusive end (2020-08-31) inclusive,
partition
09 start (2020-09-01) inclusive end (2020-09-31) inclusive,
partition
10 start (2020-10-01) inclusive end (2020-10-31) inclusive,
partition
11 start (2020-11-01) inclusive end (2020-11-31) inclusive,
default partition 12
);

 


 存储和执行

  Master和Segment都是一个单独的PostgreSQL数据库。每一个都有自己单独的一套元数据字典。

  Master节点一般也叫主节点,Segment叫做数据节点。

  为了实现高可用,每个Segment都有对应的备节点 Mirror Segment分别存在与不同的机器上。

  Client一般只能与Master节点进行交互,Client将SQL发给Master,然后Master对SQL进行分析后再将其分配给所有的Segment进行操作。

  Greenplum没有Windows版本,只能安装在类UNIX的操作系统上。

  Greenplumn极度消耗I/O资源,所以对存储的要求比较高。

 


推荐阅读
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
author-avatar
殇不起2502909877
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有