GreenPlum 使用

原创
2017/01/10 16:52
阅读数 811

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架构

 

 

Master 和Segment对比
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;

 

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部