#immutability #set-operations #set #map #functional #persistent

immutable-chunkmap

一个快速不可变映射和集合,具有批量插入和更新方法、COW操作以及集合和合并操作的Big O高效实现

30个版本 (12个稳定版)

2.0.5 2024年5月20日
2.0.4 2024年2月4日
2.0.2 2023年10月23日
2.0.0 2023年6月22日
0.1.2 2017年12月26日

#95 in 数据结构

Download history 722/week @ 2024-04-30 925/week @ 2024-05-07 1402/week @ 2024-05-14 1497/week @ 2024-05-21 1446/week @ 2024-05-28 4073/week @ 2024-06-04 3875/week @ 2024-06-11 3918/week @ 2024-06-18 5248/week @ 2024-06-25 7224/week @ 2024-07-02 8249/week @ 2024-07-09 9758/week @ 2024-07-16 14125/week @ 2024-07-23 16406/week @ 2024-07-30 16214/week @ 2024-08-06 17062/week @ 2024-08-13

66,069 每月下载量
381 个crate中(5个直接) 使用

MIT/Apache

150KB
4K SLoC

不可变块映射

一个缓存高效的不可变映射,其查找性能接近BTreeMap,插入性能合理。可选的写时复制(COW)可变操作将修改性能提升到BTreeMap的最佳案例的2倍,同时仍然提供快照功能,以及持久数据结构的Big O高效集合操作。

使用usize键的各种数据结构的查找性能图。完整的测试数据在bench/charts目录中。在Linux操作系统下,使用频率锁定在1.8 GHz的Intel Core i7 8550U上进行测试。

  • OCaml: core map(来自Jane Street核心库),具有不同叶节点的AVL树和宽松的平衡约束。
  • Chunkmap:这个库
  • Chunkmap COW:仅使用COW操作的库
  • BTreeMap:来自Rust标准库
  • HashMap:来自Rust标准库

alt text

Chunkmap在随机访问键时非常接近BTreeMap,如果没有使用哈希。显然,如果你不需要有序数据,则可以使用HashMap。

alt text

插入性能,虽然在仅使用COW模式时不是最好的,但也不是很糟糕。在需要一次进行许多更新时,你可以通过使用insert_many来更快地完成。在某些情况下,例如使用排序输入从头构建映射,这甚至可能比HashMap更快。以下情况更典型,即将数据集的10%添加到映射中。

alt text

关于此图中COW条形图的说明。它表示仅在映射上使用可变COW操作,如果它在你应用程序中更快,则完全可以使用实际的insert_many调用而不是可变COW操作,如你所见,这取决于映射的大小。

许可证

该项目可根据您的选择在MIT或Apache 2下双许可。

依赖关系

~63–500KB
~10K SLoC