数据库是应用和计算机的核心组成,试想,如果没有数据库,就像人的大脑没有了记忆一样,信息也得不到共享,那么,对开发者来说,如何设计一款高效易用的数据库至关重要。
GaussDB是企业级分布式数据库,具备分布式强一致、有效降低容灾成本、支持PB级海量数据、智能诊断等优点,是当下炙手可热的主流数据库,那么如何更好的设计分布式数据库的数据分布策略呢?
首先介绍一下GaussDB的基本架构,便于理解后面的分析。
图 逻辑架构
这个是一个典型的基于数据分片的分布式架构(share nothing),底层数据通过一定的规则比如hash、list或者range等让数据打散分布到不同的数据节点上,计算时底层多个节点共同参与计算。同时数据节点可以扩展,上层由协调节点进行SQL解析和转发。
从图中可以看到,主要包括三类节点:协调节点、数据节点、集群类节点(最重要的是全局事务管理器)。协调节点负责SQL解析转发,充当的是类似proxy的角色,数据节点负责计算和数据存储,全局事务管理器负责全局事务读一致性的保证。
表 关键角色
分布式SQL执行过程
大致执行过程:
业务应用下发SQL给Coordinator ,SQL可以包含对数据的CRUD操作;
Coordinator利用数据库的优化器生成执行计划,每个DN会按照执行计划的要求去处理数据;
数据基于一致性Hash算法分布在每个DN,因此DN在处理数据的过程中,可能需要从其他DN获取数据,GaussDB提供三种stream流(广播流、聚合流和重分布流)实现数据在DN间的流动;
DN将结果集返回给Coordi