键范围分区

将数据分区到排序的键范围内,以有效地处理范围查询。

问题

为了将数据拆分到一组集群节点中,每个数据项都需要映射到一个节点。如果用户想要查询一系列键,只指定起始键和结束键,则需要查询所有分区才能获取所需的值。对于单个请求查询每个分区远非最佳选择。

以键值存储为例。我们可以使用基于哈希的映射来存储作者姓名,如 固定分区 中所述。

哈希分区 †节点
alice13329981961369446064419793803145191220800
bob6347973842901524673835900045302204729111
mary3772485630403578937249017108484324112651
philip8398096373121616050667119639833941886622

† 分区 = 哈希 % 分区数 (9)

如果用户想要获取一系列名称的值,例如以字母“a”到“f”开头的名称,则无法知道应该从哪些分区获取数据,因为键的哈希值被用来将键映射到分区。需要查询所有分区才能获取所需的值。

解决方案

为按排序顺序排列的键创建逻辑分区。然后可以将分区映射到集群节点。要查询一系列数据,客户端可以获取包含给定范围内的键的所有分区,并仅查询这些特定分区以获取所需的值。

有关更多详细信息,请访问 oreilly.com 上的在线电子书 第 20 章

此模式是 分布式系统模式 的一部分

2023 年 11 月 23 日