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.
我们正在使用 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.