3 分•作者: mrjn•大约 1 个月前
zroar 是一个从头开始实现的 Roaring Bitmaps 数据结构,使用 Zig 语言编写。zroar 将键(keys)以及(数组、位图)容器存储在单个扁平的字节缓冲区中,使得内存表示与磁盘或网络传输表示相同,从而完全消除了序列化/反序列化步骤。 该设计最初针对将倒排列表(posting lists)存储在磁盘上的系统,但由于 CPU 缓存局部性,zroar 即使在纯内存操作中也比 CRoaring 更快。 与 CRoaring 5.0 的基准测试套件(已移植到 Zig)相比,zroar 在 360 个测试中的 339 个测试中表现更优,速度提升 2 倍至 9 倍(几何平均值),在序列化/反序列化方面甚至快了 600 倍。 zroar 避免了复杂的机制(如自适应基数树),使用了 Zig 原生的 SIMD 操作,并且更简单。主要逻辑代码量约为 2000 行,而 CRoaring 的 64 位位图代码库超过 17000 行。 尚不支持:根据设计选择,zroar 不支持运行容器(run containers),并且仅支持 64 位。 GitHub README 中有更多详细信息。快来试试吧!我非常期待关于 API 和设计的反馈。zroar 是我另一个项目 sroar(Go 语言实现)的 Zig 版本继承者,sroar 也展现了类似的性能提升。因此,我认为这种设计应该能在任何语言中带来性能上的提升。