Greenplum的是一个分布式数据库系统。这意味着,在数据库系统中存储的数据物理上位于多个数据库服务器(简称为Greenplum的segement)。

这些单独的数据库服务器通过通信网络连接(简称Greenplum的互连)。
一个真正的分布式数据库的一个重要特点是,用户和客户端程序在本地机器上访问一个数据库(在Greenplum这被称为master数据库)进行工作
实际上是数据库分布在几台机器,对用户来说就像个无缝的系统.
The fact that the database is distributed across several machines is seamless to the users of the system. 
 
Understanding How Data is Stored 
要了解Greenplum数据如何在各个不同的主机和segment实例存储数据,考虑下面这个简单的逻辑数据库。
在图2.1中,主键中黑色粗体表示,外键用线连接
foreign key relationships are indicated by a line from the foreign key in the referring relation to the primary key of the referenced relation
数据仓库中的术语,这被称为星型架构。在这种类型的数据库架构,sale表通常被称为一个事实表其他表(顾客,供应商,产品),通常被称为维表。
 
在gp中所有的表都是分布的(distributed),这意味着表被分成非重叠的行或者部分(parts)
每个部分(parts)都属于一个单独的数据库(称为gp数据库系统的一个segment)
这些部分(parts)通过一个复杂的hash算法分布在所有的可以的segments上
数据库管理员在定义表时刻选择hash键(一个或多个表列)。
 
Greenplum数据的物理数据库实现逻辑数据库在单个独立的数据库的一个阵列上
The Greenplum Database physical database implements the logical database on an array of individual database instances 
一个master实例和两个或两个以上的segment实例
master实例不包含任何用户数据,只有全局的目录表。
segment实例包含每个分布表的不重叠的行集.
 
 
Understanding Greenplum Distribution Policies
当您创建或改变Greenplum数据表,有一个额外的DISTIBUTED子句定义表的分布规则。
分布规则决定如何在Greenplum的sgement中划分整个表中的行。 Greenplum数据库提供了两种类型的分配政策:
 
Hash Distribution-对于hash分布,表的一个或多个表列被用作分布键。
(以单行为单位放在每个子节点上)
分布键使用哈希算法,分配每行到一个特定的segment。值相同的分布键将总是分配到同一个segment.
选择一个独特的分布键,如主键,将确保最均匀的数据分布。
(如果有个表以性别进行分布,如果男女之间比例不相同就会导致每个子节点的数据量不同)
Hash Distribution是默认的表分布选择.
如果一个表的分布键没有选择,或者不是主键,那么表中的第一列将作为分布键.
 
Random Distribution-数据将会在segment之间循环插入
(安装插入行的先后顺序依次放到每个节点中)
 rows are sent to the segments as they come in, cycling across the segments in a round-robin fashion
一列具有相同的值不一定会被位于同一segment上。
虽然随机分布,确保数据的分布,尽可能选择哈希分配政策因为它性能上的优势。