在集群上需要部署海量数据,如果集群部署失败后,再重新部署,成本将很高。因此,在实际部署集群前,需要对将在集群上部署应用的数据模型(schema),数据容量,数据更新率,数据生命周期,数据安全策略,查询性能等诸多方面进行分析和优化。 本篇主要讲GBase 8a MPP Cluster的数据模型规划
GBase 8a MPP Cluster 中, 数据是按表存放的, 因此数据模型规划阶段需要对数据表的分布策略进行仔细规划。 GBase 8a MPP Cluster 中的表可以分为如下类别:
- 复制表:在集群中复制表所在的 Distribution 中的每个节点都保存一份全量数据, 在与其它表进行关联查询时可以直接在本节点上完成,无需与其它节点进行交互,因此性能最优。但由于各个节点上数据完全相同,导致存储空间增加,因此通常用于数据量较小的表、维度表或经常需要 JOIN 关联的数据表。
- 分布表:将数据分布存储到不同的节点上。每个节点上存储一部分数据(分片存储),根据不同应用场景, GBase 8a MPP Cluster 提供如下两种分布表:
1)哈希分布表:将表中某列指定为哈希列,然后将数据按照哈希算法的取值存储到不同的节点上。每个节点上只存储一部分数据。这种存储策略,将数据量较大的表数据进行拆分,实现分布式存储。哈希分布
表,经常用于对哈希列进行等值查询的场景,是大型数据中心最常用的数据分布方式。
2)随机分布表:将数据随机存储到不同的节点上,每个节点只存储一部分数据,各个节点上的数据量接近。这种数据分布方式,通常用于对数据进行汇总计算的场景。
例如,在星型模型中,一般将维度表设为复制表,事实表创建为分布表(哈希分布或者随机分布)。在下图 ssb模型中, lineorder表设为分布表,其他维度表设为复制表。
ssb 星型模型结构图
对于分布表,还需要考虑数据的高可用,即需要确定备份个数及备份策略,最多支持备份个数为两个,满足不同的高可用需求。
- nocopies 表: nocopies 表的引入是为了提供一种作为中间表使用的表,用以消除副本存储带来的开销,并且 nocopies 表也可以转换为带副本的普通分布表。
- 临时表:当创建表时,使用关键词 TEMPORARY。临时表被限制在当前连接中,当连接关闭时,临时表会自动地删除,这样两个不同的连接可以使用同一个临时表名而不会发生冲突,也不会与同名现有的表冲突(现有表将被隐藏,直到临时表被删除)。
可以联合使用 NOCOPIES 关键字来创建临时的 nocopies 表;
可以联合使用 REPLICATED 关键字来创建临时复制表;
可以联合使用 DISTRIBUTED BY 关键字来创建临时哈希分布表;