Aerospike:Primary & Secondary Index 如何在内部工作

Aerospike: How Primary & Secondary Index works internally

我们正在使用 Aerospike DB 并且正在阅读文档。
我找不到很好的算法解释来解释主要和次要索引的工作原理。
文档说它使用某种分布式哈希 + B 树。

谁能解释一下。

Aerospike 集群中的 primary index is a mix of a distributed hash and distributed trees. It holds the metadata for every record

每个 namespace has 4096 partitions that are evenly distributed 到集群的节点,通过分区映射。在节点内,主索引是一个内存结构,仅索引分配给该节点的分区。

主索引的散列 table 导致 sprigs. Each sprig is a red-black tree that holds a portion of the metadata. The number of sprigs per-partition is configurable through partition-tree-sprigs

因此,要在集群中查找任何记录,客户端首先使用记录的 digest to find the correct node 对分区映射进行一次查找。然后,持有记录的主分区的节点将在主索引中查找其元数据。如果此命名空间将数据存储在 SSD 上,则元数据包括记录的设备、块 ID 和字节偏移量,因此可以通过单次读取操作读取。无论是在磁盘上还是在内存中,记录都是连续存储的。

主索引用于对单个记录(由其键标识)的操作,或对多个记录(由键列表标识)的批量操作。也是used by scans.

Secondary indexes are optional in-memory structures within each node of the cluster, that also only index the records of the partitions assigned to each node. They're used for query 操作,旨在 return 许多基于非键谓词的记录。

因为Aerospike 是一个分布式数据库,查询必须到所有的节点。并发级别(一次查询多少个节点)通过客户端中的查询策略进行控制。接收查询的每个节点都必须根据适当​​的二级索引查找谓词的条件。此 return 为零到多条记录。此时可选predicate filter can be applied. The records found by secondary index query are then streamed back to the client. See the documentation on managing indexes.