Vertica系列: 表的分段和分区

本文详细介绍了Vertica数据库中的segmentation和partition的区别及其设计规则。segmentation旨在解决数据节点间的分布不均问题,而partition主要用于优化数据删除和空间回收。分区设计应考虑数据删除策略,避免超过1024个分区。segment策略应选择选择性好的字段,以实现数据在节点间的均匀分布。提供了一个示例展示了如何创建使用sequence作为segment字段和订单年月作为分区的表。

Vertica 有两个数据分布的概念, segmentation 和 partition, 至少有下面几个区别:
1.目的方面:
segmentation 解决各节点数据倾斜问题, 适用于木桶原理, 数据量大的那个节点将会拖慢整个查询.
partition 主要解决的是数据删除和空间回收问题. 列式数据库删除数据的代价较大. 相比一条一条记录的删除动作, 删除整一个partition 的代价要小得多(其实一个partition就是一个文件). 当然一般情况下,分区也会在一定程度上改善查询效率.
2.Data locality 方面:
segmentation 是指数据在集群中各个节点的分布, 理想状态应该是数据均匀分布到各个节点.
partition 是指数据在单个节点上的分布.
3.DDL方面:
segmentation 是可在create table 和 create projection 语句中指定的, superprojection的segment是在建表语句中指定.
partition只能在create table 语句中指定的.


========================
分区设计规则:
========================
1. 按照 purge data的策略确定分区规则. 因为分区一个优势是快速回收空间, 所以可按照删除数据的方式确定如何分区, 比如将来是按月purge data,分区就选择月份; 如果将来可能按照年份purge data, 分区就选择年份. 而且, 建立分区的表达式应该和purge数据(即删除partition)的表达式一致.
2. 确保这个表的分区数量不能超过1024个. Vertica 一个partition就是一个文件, Vertica要求Partition不能超过1024个, 所以一般情况下不推荐直接使用日期字段做分区, 推荐使用月份等较大的时间跨度. Partition 子句可以使用表达式.


========================
s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值