南大通用GBase 8a 分区表、分布表区别

分区表是根据某些规则将数据划分到多个子表里,而分布表,是在分布式计算出现后,才被广泛使用的一张表保存到多个节点上的方法。本文介绍分区表和分布表的区别。

总结起来就是:分区是因为单表数据量太大,通过分成多个小表来提升性能。分布是因为单个服务器承受不住,系统分布到多台服务器上同时执行来提升性能或者并行数。

参考

业务假设

比如从保存10年的100亿行电话清单,查询2021年2月份的某个电话的通话详单。

为了提高查询性能,减少消耗,就出现了各种技术方案。

分区表

首先要明确,分区表,在底层从物理上,已经是多个表。可以放在不同的表空间,或者不同的目录,不同的文件。

分区表,是将数据,按照某些规则,划分到多个子表里。比如:按照年:这样每个子表,只包含了1年的数据 ,查询时则不必从10年的大表,而是1年数据的子表,涉及的数据量减少,性能提升。

跨年查询呢? 那就查多个分区。如果每次查询所跨分区数量增多,性能提升就越来越不明显了。

分布表

分布表,则是将数据,按照行或记录,将数据保存到不同的机器上。最简单的是循环平均的Round-robin模式。

比如一共10台机器,第一行数据保存在第一台,第二行数据保存在第二台。。。第10行保存在第10台,
第11行,绕回来,保存在第一台,第12行保存在第12台。。。。

查询时,10台集群同时运行,虽然每个机器上还是跨越10年的数据,但每个节点总量却只有以前的1/10的数据。同样的,查询涉及的数据量减少,性能提升。

在查询发起端,将10台服务器的查询结果做汇总,返回调用方。

跨年查询呢?因为每个机器上的数据都是包括跨年的,所以只要10台服务器的结果汇总到一起,就是完整的结果,底层也只需要一次处理即可。

两者关系总结

分布表,是数据分散到多态机器上,充分利用多个硬件并行处理。

分区表,是将数据分散到多个表里,减少资源消耗。

所以二者没有任何直接关联,可以同时实施优化,也就是:将数据按照某些规则,分布到10台服务器上,同时按照年份,做成分区表。

结果就是某年的查询,就是每个节点查询一个分区,其数据量是以前的百分之一。