SummarizedCollection:使用内存 B+ 树的 Swift 灵活集合

状态

良好的测试覆盖率和基准测试。 尚未编写文档或进行实际应用。 计划用于我自己的项目。 API 可能会有重大更改。

除非你对 B+ 树已经感兴趣,否则你可能不想使用这个项目。 同时,我认为其基础很好,并且可以完成在 Swift 中无法完成的事情,而无需重复大部分工作。

欢迎任何想法或反馈。

概述

该项目提供了一个用 Swift 编写的内存位置(无键)B+ 树实现。 该项目还包括两种有用的集合类型,它们使用 B+ 树作为其底层存储。

为什么选择 B+ 树?

内存 B+ 树是 Array 的快速连续内存和树的对数属性之间的折衷方案。 在 B+ 树中,所有元素都存储在树的叶子中连续内存缓冲区中。 一个小的 B+ 树将只有一个叶子并将所有元素存储在一个缓冲区中。

随着插入更多元素,叶子最终将溢出到多个叶子中。 添加内部节点以创建平衡树。 这种拆分和树管理会增加开销,但也允许以下属性:

  1. 插入和删除需要对数时间。
  2. 拆分和连接需要对数时间和空间。
  3. 写入时复制需要对数时间和空间。
  4. 当你添加和删除元素时,会以粒度方式使用空间
  5. 使用自定义摘要类型,可以在多个属性上以对数方式搜索。

何时使用 B+ 树?

对于少量元素,Array 总是更快,“少量”可能在 1000 左右。 对于大多数变异操作(和搜索),最终会出现一个交叉点,在该交叉点 B+ 树会变得更快。 这些基准测试可以让你了解这些交叉点何时发生。

灵感

未来

我希望 Swift Collections(这是一个开始!)项目将发布类似的数据结构。 它可能会得到更好的实施、记录和支持。

也可能它不会像这个项目那样适合我自己的需求。 我期望我将继续使用这个项目,并尝试从 Swift Collections 代码中复制任何改进。