小编shi*_*jin的帖子

范围查询如何在 LSM(日志结构合并树)上工作?

最近我一直在研究数据库中常见的索引结构,比如 B+-trees 和 LSM。我对点读/写/删除/压缩如何在 LSM 中工作有一个可靠的处理。

例如(在 RocksDB/levelDB 中),在点查询读取时,我们将首先检查内存索引(memtable),然后是从最近到最近的一些 SST 文件。在 LSM 的每个级别上,我们将使用二分搜索来帮助加快查找给定密钥的每个 SST 文件的速度。对于给定的 SST 文件,我们可以使用布隆过滤器快速检查密钥是否存在,从而节省更多时间。

我没有看到范围读取具体是如何工作的。LSM 是否必须在每个 SST 级别(包括 memtable)上打开一个迭代器,并在所有级别上同步迭代,以返回最终的排序结果?它是否仅作为一系列点查询实现(几乎绝对不是)。是否先拉出所有潜在的键,然后再排序?希望有人在这里有任何见解。

我无法找到有关该主题的太多文档,任何见解在这里都会有所帮助。

indexing key-value-store range-query lsm-tree

2
推荐指数
1
解决办法
1244
查看次数

给定一对整数,达到目标 N 所执行的最少操作数

给定一对数字(A,B)。您可以执行操作 (A + B, B) 或 (A, A + B)。(A, B) 被初始化为 (1, 1)。对于任何 N > 0,找到需要对 (A, B) 执行的最少操作数,直到 A = N 或 B = N

在 glassdoor 的采访摘要中遇到这个问题。通过几种方法进行思考,在网上搜索但找不到解决此问题的任何文章/答案。我有一个如下所示的强力方法,但是它必须遍历 O(2^N) 路径,想知道是否有一个我没有看到的优雅的解决方案。

def pairsum(N):
    A = 1
    B = 1

    return helper(N, A, B, 0)

def helper(N, A, B, ops):
    # Solution found
    if A == N or B == N:
        return ops

    # We've gone over, invalid path taken
    if A > N or B > N:
        return float("inf") …
Run Code Online (Sandbox Code Playgroud)

algorithm math

1
推荐指数
1
解决办法
9406
查看次数