针对不可变日志数据的空间高效索引

主要观点:在 Rust 中实现用于索引诊断产品 Seq 中高基数谓词的磁盘-backed 哈希表,介绍其工作原理、与其他方法的比较等。
关键信息

  • Seq 是用于诊断事件的数据库,通过写入前日志合并来存储大量不可变事件记录。
  • 传统上 Seq 以位图形式存储索引,不适合高基数情况,为此实现了可插拔的磁盘-backed 哈希表索引方案。
  • 磁盘-backed 哈希表以数组形式实现,通过哈希确定存储桶,可减少插入和查找复杂度。
  • 哈希表在磁盘上的表示为 32 位整数,只存储哈希值避免存储实际值大小,允许哈希冲突。
  • 比较了磁盘-backed 哈希表与其他两种方法(diskmapodhtbincode)在磁盘大小、从内存映射读取和直接从磁盘读取等方面的性能。
    重要细节
  • Seq 中写入前日志合并后计算索引,索引可像位图一样合并。
  • 磁盘-backed 哈希表在内存中构建,最后格式化为磁盘表示,可根据值数量选择最优桶数。
  • 示例展示了哈希表的字节表示及存储内容的解析。
  • 测试中diskmap在磁盘大小和直接从磁盘读取方面表现较好,odht在从内存映射读取方面有优势,bincode是直接序列化的内存哈希表。
  • 代码可在GitHub上查看。
阅读 14
0 条评论