#lock-free #knn #cover-tree

nightly grandma

无锁、最终一致的并发隐树

10 个版本

0.3.1 2020年6月26日
0.3.0 2020年6月25日
0.2.0 2020年4月13日
0.1.6 2020年2月27日

并发 中排名 #778

自定义许可协议

275KB
5.5K SLoC

奶奶

插件

这些将是库的核心。将数学设备附加到隐树每个节点上是你可以用它们做的最有趣的事情,也是这个库的目标。目标是拥有最快的隐树实现上的零成本插件。你应该不可能编写比你的隐树算法实现更快的实现。这是库的第三次几乎完全重写。前两个实现有基础瓶颈和细节,阻碍了这个目标。我们感觉这个最新的架构为未来的工作提供了最坚实的基础。

插件目前仅部分实现。请期待未来几周内推出!

读写头

grandma 将隐树存储为一个层的数组,每层在 evmap 中以竞技场风格分配所有节点。这是一个包含所有读者指向一个常量映射(因此它可以安全、无锁地查询)的哈希表对,而写者编辑另一个映射。当写者完成时,它交换指针。然后读者可以看到更新,而写者将相同的更改(以及更多)写入另一个哈希表。插件不能控制更新顺序,但是树将从叶子到根更新,因此您可以使用递归逻辑。

单例子节点

仅覆盖的节点的子节点存储在单例列表中。这可以显著节省内存(基于 Ember 构建的树比 2-3 倍小),您可以选择不查询这些节点以加快 KNN 和其他查询的速度。在编写针对此实现的算法时应考虑这些独特的子节点。

计划中的功能

当前工作

  • 插件!每个节点附加数学设备。
  • 基准测试
  • 插入

近期

  • 神经编码以潜在 TDA,并利用 ||isation
  • 神经的插件支持。

未来

  • 迁移到 stdasynctokio 以处理协程,以便更容易地与服务集成。

依赖项

~12MB
~224K SLoC