我们正在使用Aerospike DB,并正在阅读文档。
我找不到很好的算法解释来解释主索引和次索引的工作原理。
该文档说,它使用某种分布式哈希+ B树。
有人可以解释一下吗?
答案 0 :(得分:3)
primary index是分布式哈希和分布式树的混合。它保存Aerospike群集中每个record的元数据。
每个namespace都有4096个分区,通过分区图均匀地distributed到群集的节点。在节点内,主索引是一种内存结构,仅对分配给该节点的分区进行索引。
主索引具有一个哈希表,该哈希表指向sprigs。每个小枝都是一棵红黑树,其中包含部分元数据。可以通过partition-tree-sprigs
配置每个分区的小树枝数量。
因此,要查找集群中的任何记录,客户端首先使用该记录的digest至find the correct node,并对分区图进行一次查找。然后,拥有记录主分区的节点将在主索引中查找其元数据。如果此命名空间将数据存储在SSD上,则元数据包括设备,记录的块ID和字节偏移,因此可以通过一次读取操作将其读取。记录连续存储在磁盘或内存中。
主索引用于针对单个记录的操作(由其键标识),或针对多个记录的批处理操作(由键列表标识)。也是used by scans。
Secondary indexes是群集中每个节点内的可选内存结构,也仅index个分配给每个节点的分区的记录。它们用于query操作,这些操作旨在根据非键谓词返回许多记录。
由于Aerospike是分布式数据库,因此查询必须转到所有节点。并发级别(一次查询多少个节点)是通过客户端中的查询策略控制的。接收查询的每个节点都必须对照适当的二级索引查找谓词的条件。这将返回零到许多记录。此时,可以应用可选的predicate filter。然后,通过二级索引查询找到的记录将流回客户端。请参阅managing indexes上的文档。