Append-only及其使用

  • Post author:
  • Post category:其他




Append-only

维基百科:

Append-only 是计算机数据存储的一种属性,将新数据附加到存储中,但现有数据是不可变的。

许多数据结构和数据库实现了不可变对象,有效地使它们的数据结构只能追加。实现仅追加数据结构有很多好处,例如确保数据一致性、提高性能和允许回滚。

典型的仅附加数据结构是日志文件。日志结构化文件系统和数据库中的日志结构化数据结构以类似的方式工作:数据发生的每个更改(事务)都由程序记录,并且在检索时程序必须组合在此找到的数据片段日志文件。

仅追加数据结构随着时间的推移而增长,越来越多的空间专门用于仅在历史记录中发现的“陈旧”数据,并且在解析这些数据上浪费了更多时间。许多仅附加系统实现了重写(复制垃圾收集),以便创建一个仅包含当前版本和一些旧版本的新结构。



clfB-tree 中的 append-only

在这里插入图片描述

clfB-tree 设计了两种叶子结点:

  • (1)与内部节点(Fig.1.a)一样采用差分编码,大小为 cache line(64字节)。

    缺点:叶子结点不能容纳大量条目。
  • (2)如 Fig.1.b ,

    使用 bitmap 来标记条目是否有效

    。采用了

    wB+Tree



    NV-Tree

    中的只追加修改策略(append-only),

    但 wB+Tree 比 NV-Tree 更先进

在 clfB-tree 的仅追加叶版本中,将一个新条目追加到第一个可用的空槽中。

一旦新的条目通过 cache line flush 和 store fence 指令安全地写回 NVRAM,就会自动地将条目在有效性位图数组中的位设置为 1,并调用另一个 cache line flush 和 store fence 指令。

对于删除和更新操作,NV-tree 会

附加

一个负

标志

使现有的条目无效,

这需要像插入操作一样执行两条刷新缓存行指令

但是 wB+tree 和 clfB-tree 只是通过

翻转叶节点位图数组中的有效性位

来使现有条目无效。仅追加的方法被证明在

减少缓存行刷新次数

方面是有效的(wB+Tree 和 NV-Tree 证)。但是这种方法的一个明显的

缺点是键是没有排序的

,除非树节点有关于排序的额外信息,否则不能使用二叉搜索。因此,wB+tree 管理两个元数据数组,一个用于

有效性位图数组

,另一个用于条目排序的

槽数组

在树节点中有两个元数据数组(bitmap+slot array wB+Tree)的缺点是,它需要额外的缓存行刷新(wB+Tree 证)。wB+Tree 的一个变体是

slot-only wB+Tree

,它在更新响应时间方面优于 bitmap+slot wB+Tree,因为它

减少了缓存行刷新的次数



slot-only wB+Tree 减少了缓存行刷新的次数的

原因

:将 bitmap+slot 的作用集中到 slot 身上(判断条目有效+条目排序)。但因此限制了节点最大条目数不超过 7(slot array 可容纳 8 字节)。


在这里插入图片描述

说明:标黄部分还未理清。

参考文献:

维基百科

clfB-tree: Cacheline Friendly Persistent B-tree for NVRAM



版权声明:本文为Tian_pp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。