我们正在使用Aerospike DB,并正在查看文档
我找不到很好的算法解释Primary&二级索引有效
文档中说它使用了某种分布式hash+B树。
有人能解释一下吗?
主索引是分布式哈希和分布式树的混合。它保存Aerospike集群中每个记录的元数据。
每个命名空间有4096个分区,这些分区通过分区映射均匀分布到集群的节点。在节点中,主索引是一种内存结构,它只对分配给节点的分区进行索引。
主索引有一个哈希表,该哈希表指向sprig。每个树枝都是一棵红黑树,它保存着一部分元数据。每个分区的分支数可通过partition-tree-sprigs
进行配置。
因此,要在集群中查找任何记录,客户端首先使用记录的摘要,通过对分区映射的一次查找来查找正确的节点。然后,持有记录的主分区的节点将在主索引中查找其元数据。如果此命名空间将数据存储在SSD上,则元数据包括记录的设备、块ID和字节偏移量,因此可以通过单个读取操作读取。记录是连续存储的,无论是在磁盘上还是在内存中。
主索引用于针对单个记录(由其键标识(的操作,或针对多个记录(由键列表标识(的批处理操作。它也用于扫描。
在集群的每个节点内的内存结构中,辅助索引是可选的,它们也只对分配给每个节点的分区的记录进行索引。它们用于查询操作,用于返回基于非键谓词的许多记录。
因为Aerospike是一个分布式数据库,所以查询必须到达所有节点。并发级别(一次查询多少节点(是通过客户端中的查询策略控制的。接收查询的每个节点都必须对照适当的二级索引查找谓词的标准。这将对多个记录返回零。此时,可以应用可选的谓词过滤器。然后,通过二级索引查询找到的记录被流式传输回客户端。请参阅有关管理索引的文档。