【问题标题】:Understanding SSTable implementation了解 SSTable 实现
【发布时间】:2020-01-18 16:23:19
【问题描述】:

我正在查看有关如何实现 SSTable 的说明。

这意味着您可以跳转到手提包的偏移并从那里扫描 直到你找到手工(或者没有,如果钥匙不在 文件)。

我不明白突出显示的部分。如果我们只知道给定键的偏移量,我们如何扫描直到找到所需的键?当我们在键后面滑动字节时,我们如何知道我们是否已经输入了一个新键,或者我们正在查看一个非常大的值?

【问题讨论】:

    标签: database algorithm theory


    【解决方案1】:

    Scylla 描述了一种实现in their docs。 (我与 Scylla 没有任何联系。我只是碰巧有这个。)他们将索引条目的密钥长度(不完全是您要查找的内容)存储在 index_entry 结构中。

    struct index_file {
        struct index_entry entries[];
    };
    
    struct index_entry {
        be16 key_length;
        char key[key_length];
        varint position; // decoded into a 64-bit integer
        varint promoted_index_length; // decoded into a 32-bit integer
        byte promoted_index[promoted_index_length];
    };
    

    如果您的实现支持不同长度的密钥(我认为所有商业级 SSTable 实现都这样做),那么存储它们的长度是很常见的。通常,存储不同长度“事物”的软件使用包含“事物”长度的数据结构。 (Scylla 可能使用 Java 迭代器。)

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2014-02-23
      • 2019-04-28
      相关资源
      最近更新 更多