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