GreenPlum简介

GP是一个关系型数据库集群,由数个独立的数据库服务组合成的逻辑数据库,采用Shared-Nothing架构,整个集群由很多个数据节点(Segment Host)和控制节点(Master Host)组成,其中每个数据节点上可以运行多个数据库。简单来说,Shared-Nothing是一个分布式的架构,每个节点相对独立。在典型的Shared-Nothing中,每一个节点上所有的资源(CPU,内存,磁盘)都是独立的,每个节点都只有全部数据的一部分,也只能使用本节点的资源。

基于对Shared-Nothing分布式架构模式的分析,Greenplum高效处理I/O数据吞吐和并发计算的过程就很好理解了。在Greenplum中,需要存储的数据在进入数据库时,将先进行数据分布的处理工作,将一个表中的数据平均分布到每个节点上,并为每个表指定一个分发列(distribute Column),之后便根据Hash来分布数据。基于Shared-Nothing的原则,Greenplum这样处理可以充分发挥每个节点处I/O的处理能力。在这一过程中,控制节点(Master Host)将不再承担计算任务,而只负责必要的逻辑控制和客户端交互。I/O瓶颈的解决为并行计算能力的提升创造了良好的环境,所有节点服务器组成一个强大的计算平台,实现快速的海量并行运算。Greenplum在数据仓库、商业智能的应用上,尤其是在海量数据的处理方面性能极其优异。
Greenplum是面向数据仓库应用的关系型数据库,它是基于目前流行的PosgreSQL开发的,跟PostgreSQL的兼容性非常好,大部分的PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上。
 

  1. 一种重计算,对大数据集进行统计分析的OLAP型
  2. 经常用到多表联合,聚合,全表扫描,涉及数据量比较庞大;
  3. 响应的时间和具体查询关系大,重复查询速度快
  4. 相比其他封闭式数据仓库专用系统及Hadoop分析平台,Greenplum在每TB数据量上的投资是前者的1/5甚至更低
  5. Greenplum通过准实时、实时的数据加载方式,实现数据仓库的实时更新,进而实现动态数据仓库(ADW)。基于动态数据仓库,业务用户能对当前业务数据进行BI实时分析
  6. Greenplum是基于PostgreSQL开发的,语法与PostgreSQL几乎一样,PostgreSQL的工具基本上都能够在Greenplum中使用,比如pgadmin等。Greenplum使用通用的PostgreSQL连接包即可与数据库连接,支持绝大部分开发语言。
  7. Greenplum是基于PostgreSQL开发的,语法与PostgreSQL几乎一样,PostgreSQL的工具基本上都能够在Greenplum中使用,比如pgadmin等。Greenplum使用通用的PostgreSQL连接包即可与数据库连接,支持绝大部分开发语言。
  8. 较好的并发支持及高可用性支持,除了硬件级的Raid技术外,Greenplum还提供数据库层Mirror机制保护,也就是将每个节点的数据在另外的节点中同步镜像,单个节点的错误不影响整个系统的使用。对于主节点,Greenplum提供Master/Stand by机制进行主节点容错,当主节点发生错误时,可以切换到Stand by节点继续服务。
  9. 支持MapReduce
  10. 数据库内部压缩.支持对数据库表进行压缩处理,从而提升数据库的性能。

 



与普通的PostgreSQL数据库的最大不同就是,Greenplum是分布式数据库,所有的数据都切分在Semgment上

 



Greenplum架构

 

greenplum 7 子分区取值范围在哪张表里 greenplum创建分区表_数据库

 

Master                    

Segment

  1. 建立和客户端的会话连接和管理
  2. SQL的解析并形成分布式的执行计划
  3. 将生成好的执行计划分发到每个Segment上执行
  4. 收集Segment的执行结果
  5. Master不存储业务数据,只存储数据字典
  6. Master主机可以一主一备,分布在两台机子上
  7. 为了提高性能,Master最好单独占用一台机子
  1. 业务数据的存储和存取
  2. 执行由Master发布的SQL语句
  3. 对于Master来说,每个Segment都是对等的,负责对应数据的存储和计算
  4. 每台机子可以配置一到多个Segment
  5. 由于每个Segment都是对等的,建议采用相同的机器配置
  6. Segment分primary和mirror两种,一般交错的存放在子节点上



Greenplum日常操作

  • 建表:
create table {table_name} ( {sql1} ) distributed  by ( {uniq_key_str} )
PARTITION BY RANGE (D_DATE) 
( PARTITION year2016mth START('2016-01-01'::date) END ('2016-12-31'::date)
EVERY ('1 mon'::interval));

uniq_key_str一般为主键如:date1,date2

分区表:按月创建12个分区表

  • 增加分区
alter table {table_name} add partition year2017mth_1 
START('2017-01-01'::date) END ('2017-02-01'::date)

增加2017年1月的分区表

  • 删除分区
#查看所有分区
select partitionname from pg_partitions where tablename='url_table';

#删除分区year2017mth_1
ALTER TABLE "url_table" DROP PARTITION "year2017mth_1";

 

  • 导入csv文件
\copy url_table from '/opt/save_file/csv_file/url/20170102.csv' delimiter ',' csv header;