16 个版本
0.5.5 | 2021年5月4日 |
---|---|
0.5.4 | 2021年3月3日 |
0.5.3 | 2021年1月27日 |
0.5.1 | 2020年12月8日 |
0.3.9 | 2020年7月24日 |
#441 in 并发
每月40次下载
470KB
10K SLoC
GoKo
插件
这些将是库的核心。将数学工具附加到覆盖树的每个节点是最有趣的事情之一,也是这个库的目标。目标是拥有零成本的插件,在最快可能的覆盖树实现上。应该不可能编写比你的覆盖树算法实现更快的实现。这是库的第三次几乎完全重写。前两个实现有基础瓶颈和细节阻碍了这一目标。我们觉得这个最新的架构为未来的工作提供了最坚实的基础。
插件目前部分实现。预计将在未来几周内推出!
读写头
goko
将覆盖树存储为层的数组,每层在 evmap
中以竞技场风格分配所有节点的所有节点。这是一个包含所有读取器指向一个常量映射(因此可以安全地、无锁地查询)的哈希映射对,而写入器编辑另一个映射。当写入器完成时,它会交换指针。然后读取者可以看到更新,而写入器将相同的更改(和更多)写入另一个哈希映射。插件无法控制更新顺序,但是树将自叶到根更新,因此您可以使用递归逻辑。
单例子代
只会覆盖的节点的子代存储在单例列表中。这可以显著节省内存(基于Ember构建的树比原来的2-3倍小),您可以选择不查询这些节点以加快KNN和其他查询的速度。在为这种实现的独特子代编写算法时应考虑这些因素。
安装
这取决于protoc,可以在ubuntu上通过安装 protobuf-compiler
来安装。普通开发机应该已经安装了其余的软件,但新机器可能需要安装以下软件,包括Rust
sudo apt install -y build-essential libssl-dev libblas-dev liblapacke-dev pkg-config libprotobuf-dev libprotoc-dev protobuf-compiler
由于 packed-simd
依赖于实验性API,因此还需要nightly。目前已确认可以正常工作的最新版本是
rustup install nightly-2020-09-14
rustup override set nightly-2020-09-14
依赖项
~15MB
~270K SLoC