内容提要
Neki的数据拓扑采用JSON配置,定义PostgreSQL分片方案,包括分片索引(哈希、模、范围策略)、分片组(物理分片及键范围)和数据库绑定。该配置指导路由器将查询映射到正确分片,支持灵活数据放置,并可在重分片时动态更新,使多服务器如同单一数据库。
延伸解读
数据拓扑的三大核心组件
数据拓扑由分片索引、分片组和数据库绑定三部分构成。分片索引决定如何将行映射到路由键,支持哈希、模和范围三种策略;分片组将路由键范围分配给物理分片,并支持相关表共置以优化连接和事务;数据库绑定则遵循PostgreSQL的数据库、模式、表层级,允许表直接或继承默认分片组。理解这三者的协作是掌握Neki路由机制的关键。
路由键的生成与分片选择
路由键的生成方式直接影响数据分布。哈希策略(如xxhash)将任意值均匀映射到路由空间,适合高基数键;模策略按取模结果分配,简单但可能产生数据倾斜;范围策略直接使用整数值,便于按范围查询。示例中,customer_id 42经不同策略得到不同路由键,落入不同分片,说明选择策略需考虑数据特征和查询模式。
灵活的数据放置与动态更新
数据拓扑是实时配置,可在重分片、表移动或导入时动态更新,且不影响应用服务。这种灵活性允许工程师根据性能需求调整逻辑表到物理分片的映射,而无需应用感知底层变化。但需注意,拓扑本身不管理物理分片,分片需单独配置,并通过稳定ID引用,这要求运维人员协调拓扑与分片生命周期。
Q&A
什么是数据拓扑?
数据拓扑是Neki中用于描述PostgreSQL分片方案的JSON配置,它定义了分片索引、分片组和数据库绑定,从而指导路由器将查询映射到正确的分片。
数据拓扑由哪些部分组成?
数据拓扑由三个构建块组成:分片索引(指定分片键和路由键的生成方式)、分片组(定义物理分片及键范围)和数据库绑定(将表绑定到分片组)。
Neki支持哪些分片索引策略?
Neki支持三种分片索引策略:哈希(使用xxhash)、模(对整数取模)和范围(直接使用整数值)。
数据拓扑如何帮助路由查询?
数据拓扑通过定义分片索引和分片组,将逻辑表映射到物理分片。路由器根据查询中的分片键值,通过分片索引计算路由键,然后根据路由键在分片组中找到对应的物理分片,从而将查询路由到正确的分片。
数据拓扑中的分片组是什么?
分片组定义了一组物理分片,并为每个分片分配一个路由键范围。它还指定了组内表的默认分片索引。相关表如果使用相同的分片键,可以放在同一个分片组中,以便本地执行连接和事务。
数据拓扑中的数据库绑定是如何工作的?
数据库绑定遵循PostgreSQL的数据库、模式、表层次结构,将表绑定到分片组。表可以直接指定分片组,也可以从模式、数据库或集群继承默认分片组。未列出的表会继承默认分片组,从而简化配置。
数据拓扑是否负责管理物理分片?
不,数据拓扑不负责配置或管理物理分片。物理分片是单独配置的,数据拓扑通过稳定的ID引用它们。在Neki中,一个分片由一个PostgreSQL主节点及其副本组成。
数据拓扑在重分片时如何更新?
数据拓扑是一个动态配置,在重分片、表移动和导入过程中会进行更新,同时应用程序可以继续提供服务。这使得Neki能够在不中断服务的情况下调整数据分布。