【问题标题】:How are large keys and values stored in b-trees with small sectors?大键和值如何存储在具有小扇区的 b 树中?
【发布时间】:2021-12-19 23:46:54
【问题描述】:

我一直在制作一个键值存储,作为个人项目保存到磁盘,我一直使用 b-tree 作为我的数据结构,但我想像许多一样对键和值长度添加较大的限制其他键值存储,例如 redis。

当扇区大小只有 512 字节时,应该如何将大键和值存储在 b-tree 中?如果允许更大尺寸的键和值,每个节点应该允许多少个键,我是否应该考虑考虑另一种数据结构来存储可变大小的数据?

【问题讨论】:

    标签: data-structures b-tree


    【解决方案1】:

    您可以定义溢出页面以从页面链接列表中形成节点,或者您可以通过存储在 b-tree 叶节点中的指针来引用键和值。指针可以指向页面的链接列表或特殊类型的子树。如果这样可以减少由于未填充页面造成的浪费,您可以在叶节点中存储一些内联内容。

    进行溢出设计时,每个节点允许多少键?最少的可能。随着链表变大,设计不会扩展。如果由于某种原因您需要存储非常大的值,您可以看到这种设计可能非常昂贵,因为您必须扫描并跳过这么多额外的页面。

    基于指针的方法可以更好地扩展,但要使其对键最有效,必须尽可能多地内联键。否则,您在进行搜索时总是必须遵循指针。您可以潜在地应用一种指针压缩技术,其中一个公共前缀存储一次。这允许更多的键适合页面,减少跟随指针的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2012-12-26
      • 2021-01-28
      • 2012-03-16
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      相关资源
      最近更新 更多