云原生数据库系列谈:分片机制引领查询新纪元

常听人说:「不要把鸡蛋放在同一个篮子里」。

这不仅仅是一条经济学定律,IT领域也同样适用。

Eon 模式就使用了分片机制,数据将写入共享存储并可供任何节点访问,好比将鸡蛋分散在了不同的篮子里面。

这样做的好处,就是在响应查询请求上,可以动态选择分片空间上的一组订阅节点进行响应

Eon模式运行Vertica基于成本的分布式优化器来生成查询计划,只有被会话选择为分片服务的节点才会参与查询执行。当执行者节点收到查询计划时,它会为计划附加上会话指示它要服务的分片的相关存储容器(ROS Containers)。 存储容器按分片分段:每个存储容器只包含哈希值映射到某个分片哈希范围的行。

对于来自类似仪表盘这样应用的可预测查询,每个表选择合适的分段方式可以避免网络瓶颈,提升查询性能。

下面我们从4个方面来论述 Eon 模式下的查询机制。

1

选择订阅节点

Eon模式的分片通常有多个订阅节点,每个会话通过负载均衡机制来选参与服务的节点,而不是集群中的所有节点。

同时Eon模式会尽可能尊重容错组(Fault Group)描述的子集群边界,尽量避免在带宽受限的链路上发送网络数据。

2

弹性吞吐

多个节点订阅相同的分段型分片可提高查询吞吐量。

通过只在集群的部分节点上运行查询,增加额外的节点会提高整个系统支持并发查询的能力。

我们来看个简单的例子:

节点的数量是分段型分片的两倍,这相当于生成了两个可以独立运行查询的子集群。即使节点数不是的分段型分片数的整数倍,当每个节点可以同时运行与分片数相同的查询时,并发查询能力也可以实现线性扩展。

对于有S个分段型分片、N个节点、每个节点有E个执行槽的数据库,一个运行的查询需要总的N*E个槽中的S个槽。

如果S阶梯函数。同时也需要适当的负载均衡机制来在集群中分配工作负载。

性能可伸缩性效果的展示,我们将在后续的文章中为大家揭晓。

3

负载隔离

管理员可以将一组节点指定为子集群,并且订阅重新平衡机制会确保每个分片在子集群中都有订阅节点。

当客户端连接到子集群中的某个节点时,该子集群中的节点将被会话的参与订阅选择算法优先选择,从而导致查询只在这些节点上执行。

除强大的基于节点的工作负载隔离可提升对多租户的支持,并可用于隔离查询和数据加载任务,或者隔离精细优化报表和即席查询。

4

性能扩展

虽然弹性吞吐能力扩展对提高吞吐能力有效,但它不会提高单个查询的性能。 工作负载可能混合着短时间请求和长时间请求,这些请求将受益于更多的计算资源。

简易机制:

最简单的机制是运行比节点数目更多的分片; 弹性添加节点将把分片分散到更多节点、把查询分发到更多的节点去处理。但当节点数量超过分片数时,就需要新的机制。 如果修改分片数量需要重新分割和重写分段型分片,代价会非常高。

反向确定:

相反地,如果在读取每行数据时应用新的哈希分段谓词来确定哪个节点来处理该行,这样多个节点就可以协同为同一查询提供同一个分段型分片。

其他方案:

也可以选择把ROS容器在节点之间进行物理拆分,共享分段型分片的每个节点可以各自只扫描属于分片的部分ROS容器、或同一容器的不同区域,以降低每个节点的I/O开销,但代价是容易倾斜、失去数据分布的确定性。

需要注意的是:

如果查询有一个选择性谓词,那么幸运的节点可以快速过滤掉分配给它的容器中的所有行,而其他节点得完成所有的工作。

如果节点负责访问一部分已排序的容器,并且查询在排序列上有一个谓词,这时候会更有效些。

工作窃取(Work-stealing)机制也可以缓解这种倾斜情况。

另外,由于数据不再严格按照分段列分割到节点,本地连接和本地聚合不能直接进行。到底选择哈希过滤器还是容器拆分取决于具体查询,它们都是Vertica基于成本优化器的候选项。

5

数据加载与定义操作

数据修改操作(如INSERT,UPDATE,DELETE,MERGE)会在映射到分片的被选定节点中运行。该计划将在参与节点上执行,这些节点将计算输出每个分片的数据文件或删除向量。

负责多个分片的执行节点在本地为每个分片将输出数据分割为单独的流,从而保证每个ROS容器只包含一个分片的数据。

Vertica从不修改已有数据文件,而是创建新数据文件或删除标记。这些文件首先被写入本地磁盘,然后上传到共享存储。

在这些操作的计划或提交时,如果会话看到并发的订阅修改操作,导致有节点不再订阅它要写入数据的分片,这个事务将被回滚以确保正确性。

▼▼▼

下回书,我们将为您讲解 Eon 模式下存储的那些事儿,敬请期待!

本系列文章摘编自刘定强所著《从无共享MPP列式数据库到弹性的云原生分析平台》

刘定强

Micro Focus 中国资深大数据架构师

讲师小传:Vertica全球顶级技术专家 擅长Vertica、Oracle等平台技术,熟悉Hadoop等开源社区 专注大数据和MPP数据库架构设计, 多个PB级大型MPP数据库项目实施经验

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180607B1B24500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券