1.1 起源和发展历程
1.2 OLTP与OLAP
OLAP
- On-Line Anglytical Processing,联机分析处理,是基于数据仓库的信息分析处理过程,是数据仓库的用户接口部分
- 本身不生产数据,其基础数据来源于生产系统中的操作数据
- 基于查询的分析系统
- 复杂查询经常使用多表连结、全表扫描等,牵扯的数据量往往十分庞大
- 响应时间与具体查询有很大关系 用户量相对较少,其用户主要是业务人员和管理人员
- 数据库的各种操作不能完全基于索引进行
OLTP
- On-Line Transaction Procession,联机事务处理,面向前台应用,重吞吐和高并发
- 数据在系统中产生
- 基于交易的处理系统
- 每次交易牵涉的数据量很小
- 对响应的时间要求非常高
- 用户数量非常庞大
- 数据库的各种操作主要基于索引进行
1.3 PostgreSQL与Greenplum的关系
1.3.1 PostgreSQL
PostgreSQL是一种非常先进的对象-关系型数据库管理系统
(1)函数/存储过程
- 内置plpgsql,一种类似于Oracle的PLsql语言
- 支持的脚本语言有:PL/Lua、PL/LOLCODE、PL/Perl、PL/HP、PL/Python、PL/Ruby、PL/sh、PL/Tcl和PL/Scheme
- 编译语言有C、C++和JAVA
- 统计语言有PL/R
(2)索引
- 内置了B-tree、哈希和GiST索引
- 可以从后向前扫描
- 可以创建表达式索引
- 部分索引
(3)触发器
完全支持触发器,可以附着在表上,但是不能在视图上。不过视图可以有规则。触发器按照字母排序,可以用其他过程语言书写触发器函数,不仅PL/PgSQL
(4)并发管理(MVCC)
Lock Free给予每个用户一个自己的“时空”,然后通过原子的“时空”控制来控制时间基线,并以此控制并发更改的可见区域,从而实现无锁的并发,而同时还能在很大程度上保证数据库的ACID特性
(5) 规则
规则允许我们对由一个查询生成的查询树进行改写
(6)数据类型
- 任意精度的数值类型
- 无限长度的文本类型
- 几何原语
- IPv4和IPv6类型
- CIDR块和MAC地址
- 数组
- 用户还可以创建自己的类型,并且可以利用GiST框架把这些类型做成完全可索引的
(7)用户定义对象
因为PostgreSQL使用一种基于系统表的可扩展的结构设计,所以PostgreSQL内部的几乎所有对象都可以由用户定义,这些对象包括:
- 索引
- 操作符
- 聚集函数
- 域
- 类型转换
- 编码转换
(8)继承
PostgreSQL的表是可以互相继承的。一个表可以有父表,父表的结构变化会导致子表的结构变化,而对子表的插入和数据更新等也会反映到父表中
(9)其他特性与扩展
- 二进制和文本大对象存储
- 在线备份
- TOAST 用于透明地在独立的地方保存大的数据库属性,当数据超过一定大小的时候,会自动进行压缩节省空间
- 正则表达式
- Slony-I 数据同步
- pgcluster
- Mammoth replicator
- Bucardo
1.3.2 Greenplum
Greenplum是面向数据仓库应用的关系型数据库
1.4 Greenplum特性及应用场景
1.4.1 特性
(1)支持海量数据存储和处理
(2)高性价比
(3)支持Just In Time BI
(4)系统易用性:支持主流的SQL语法、扩展性好,支持多语言的自定义函数和自定义类型、提供大量的维护工具、丰富的PostgreSQL资源供用户参考
(5)支持线性扩展
(6)较好的并发支持及高可用性支持
(7)支持MapReduce
(8)数据库内部压缩
1.4.2 应用场景
Greenplum数据引擎是为新一代数据库仓库和大规模分析处理而建立的软件解决方案