【发布时间】:2021-04-22 18:46:33
【问题描述】:
我有点困惑。我找不到任何关于如何对排序字符串表执行范围查询的信息。
LevelDB 和 RocksDB 支持范围迭代器,允许您在范围之间进行查询,这对于 NoSQL 来说是完美的。我不明白的是它是如何实现高效的。
表在内存(和磁盘)中排序 - 什么算法或数据结构允许在范围查询中有效地查询排序字符串表?您是否只是遍历条目并依赖缓存行充满数据?
通常我会在前面放一个前缀树,这给了我键的索引。但我猜排序字符串表会做一些不同的事情,并以某种方式利用排序。
【问题讨论】:
-
答案可能一无所有。它只是一个以范围为条件的 for 循环。 github.com/google/leveldb/blob/master/doc/index.md#iteration
-
如果表的长度是已知的,是否只是二分查找找到入口点,然后从那里线性扫描元素?在许多情况下,物理元素本身并没有以有序的方式存储。创建索引以提供数据的有序视图。我很抱歉,因为我不记得数据结构的名称,但它基本上是一个 B+Tree,具有所有叶节点形成一个链表的附加功能:您沿着 B+Tree 向下查找起始节点,然后然后继续遍历链接列表以获取您的范围。
-
查看二叉树和排序良好的二叉树。
标签: algorithm data-structures okvs