B tree 在aerospike中使用btree作为主要索引的优势是什么?

B tree 在aerospike中使用btree作为主要索引的优势是什么?,b-tree,aerospike,nosql,B Tree,Aerospike,Nosql,我正在浏览Aerospike的文档。发现Aerospike使用散列来存储主键,散列指向一个BTree,BTree包含指向实际记录的指针。 据我所知,Redis只使用哈希(为了解决冲突,他们维护了一个哈希列表),哈希指向实际记录 aerospike使用Btree的优势是什么?难道这不意味着通过主键aerospike访问记录需要O(logn)吗?而redis只需要O(1) 我可能错了,但这就是我所理解的。能不能请一些人对这个话题多解释一下?我不确定问题的重点,但下面是: 实际上,Aerospike是

我正在浏览Aerospike的文档。发现Aerospike使用散列来存储主键,散列指向一个BTree,BTree包含指向实际记录的指针。 据我所知,Redis只使用哈希(为了解决冲突,他们维护了一个哈希列表),哈希指向实际记录

aerospike使用Btree的优势是什么?难道这不意味着通过主键aerospike访问记录需要O(logn)吗?而redis只需要O(1)


我可能错了,但这就是我所理解的。能不能请一些人对这个话题多解释一下?

我不确定问题的重点,但下面是:

实际上,Aerospike是一个分布式散列,每个分区1到4096个(请参阅配置参数)

有4096个逻辑分区跨集群的节点。识别any的键是一个20字节的摘要,通过将
(名称空间、集合、主键)
3元组传递到RIPEMD-160(客户端会自动为您这样做)生成。记录被一致地散列到一个特定的分区,因为这个摘要中的位用于计算分区ID

与Redis不同,Aerospike被设计成一个单核、单线程的应用程序,运行在一个节点上,而Aerospike被构建成一个分布式数据库。的确,用户可以使用应用程序端解决方案或中间件来实现ad-hoc集群Redis。在Aerospike的情况下,集群中的所有节点和所有客户端共享一个

因为客户机知道集群的分区映射,所以它总是离持有主分区的节点(或者持有副本分区的节点——这由主分区控制)一跳。因此,它是群集中正确节点的O(1)。在该节点中,找到分区的rbTree是O(1),然后所有操作都是O(logn)

当一个数据库中没有太多数据时(假设您对Redis使用的数据结构的看法是正确的),查找记录应该是O(1)。但是,一旦哈希表中的元素多于插槽,它就会切换到一个链表,即O(n)。对于rbTree,平均和最坏情况都是O(logn)。Aerospike旨在以可预测的低延迟处理大型数据集,因此rbTree更合适。无论集群中的数据量如何,获取记录的成本都是相同的


添加:从Aerospike DB 4.2版开始,sprigs在内存方面变得更加便宜,每个分区4096个sprigs的限制已经取消。通过分配足够的树苗,可以有效地将树苗转化为深度为1的红黑树,因此O(logn)实际上与O(1)相同。例如,如果您希望sprigs的平均树深度为1,并且您的数据库中有10亿个对象,那么您应该将
分区树sprigs
设置为262144(必须是2的幂),这将花费848MB,平均分布到节点上(在一个3节点集群中为283MB)。

我不确定问题的重点,但下面是:

实际上,Aerospike是一个分布式散列,每个分区1到4096个(请参阅配置参数)

有4096个逻辑分区跨集群的节点。识别any的键是一个20字节的摘要,通过将
(名称空间、集合、主键)
3元组传递到RIPEMD-160(客户端会自动为您这样做)生成。记录被一致地散列到一个特定的分区,因为这个摘要中的位用于计算分区ID

与Redis不同,Aerospike被设计成一个单核、单线程的应用程序,运行在一个节点上,而Aerospike被构建成一个分布式数据库。的确,用户可以使用应用程序端解决方案或中间件来实现ad-hoc集群Redis。在Aerospike的情况下,集群中的所有节点和所有客户端共享一个

因为客户机知道集群的分区映射,所以它总是离持有主分区的节点(或者持有副本分区的节点——这由主分区控制)一跳。因此,它是群集中正确节点的O(1)。在该节点中,找到分区的rbTree是O(1),然后所有操作都是O(logn)

当一个数据库中没有太多数据时(假设您对Redis使用的数据结构的看法是正确的),查找记录应该是O(1)。但是,一旦哈希表中的元素多于插槽,它就会切换到一个链表,即O(n)。对于rbTree,平均和最坏情况都是O(logn)。Aerospike旨在以可预测的低延迟处理大型数据集,因此rbTree更合适。无论集群中的数据量如何,获取记录的成本都是相同的


添加:从Aerospike DB 4.2版开始,sprigs在内存方面变得更加便宜,每个分区4096个sprigs的限制已经取消。通过分配足够的树苗,可以有效地将树苗转化为深度为1的红黑树,因此O(logn)实际上与O(1)相同。例如,如果您希望sprigs的平均树深度为1,并且数据库中有10亿个对象,那么您应该将
分区树sprigs
设置为262144(必须是2的幂),这将花费848MB平均分布到节点上(在3节点集群中为283MB)。

基本上您混淆了实现方法(哈希表和B-树的混合)与主索引的方式。基本上,您混淆了实现方式(哈希表和B-树的混合)与主索引的方式。