#map #concurrency #lockless #data-structures #key-value

nightly bin+lib cmap

使用 trie 的并发多写哈希表

3 个版本 (破坏性更新)

0.3.0 2021年9月18日
0.2.0 2021年3月10日
0.1.0 2021年3月8日

#1020 in 数据库接口

每月下载量 27 次

MIT 许可证

345KB
2.5K SLoC

Documentation

并发哈希表

包实现并发哈希表。

引用自 维基百科

如果所有版本都可以访问但只能修改最新版本,则数据结构是 部分持久化 的。如果每个版本都可以访问和修改,则数据结构是 完全持久化 的。如果还有一个合并操作可以从两个先前版本创建新版本,则该数据结构称为 汇聚持久化 的。非持久化结构称为 临时 数据结构。

此哈希表的实现不能严格归类为上述任何一种定义。它支持并发写入,在底层使用原子加载、存储和 Cas 操作,但不 提供 事务操作或迭代操作的时点快照。

如果需要时点快照,请参考 ppom 包,该包实现有序映射,具有多读者并发和序列化写入。

  • Map 实例中的每个条目都对应一个 {键,值} 对。
  • 泛型于 key-typevalue-type
  • 泛型于应用程序定义的哈希的哈希构建器。
  • API - 使用键的 set()、get()、remove()。
  • 使用所有权模型和借用语义来确保安全性。
  • 实现自定义基于周期的垃圾回收来处理写入并发和内存优化。
  • 没有持久性保证。
  • 线程安全,适用于并发写入和并发读取。

有关详细信息,请参阅 rustdoc

性能

机器:Gen-1 Thread-ripper 16/32 核心和 64GB RAM。所有测量都使用 cmap 的 U32Hasher 32 位键和 64 位值和 10 百万数据集。

在有 16 个并发线程的情况下,cmap 可以执行 ~12 百万次 get 操作。

  • 关于 hamt 的维基百科链接。
  • 关于 ctrie 的研究论文。
  • 默认哈希算法是 city-hash

贡献

  • 简单的工作流程。Fork - 修改 - 提交请求。
  • 在创建 PR 之前,
    • 运行 make build 以确认所有构建版本均通过 0 警告和 0 错误。
    • 使用 check.sh 运行,无警告、无错误且所有测试用例均通过。
    • 运行 perf.sh,无警告、无错误且所有测试用例通过。
    • 安装 并运行 cargo spellcheck 以删除常见的拼写错误。
  • 首选 开发者来源证书

依赖项

约 1.7–2.7MB
约 54K SLoC