主要观点:
- 在 Bluesky 社交网络中,探讨如何更高效地处理用户关注关系数据,从使用 HashMaps 和 HashSets 到引入 Roaring Bitmaps。
- 介绍了位图(bitmap)的概念,包括普通位图和用于压缩的 Roaring Bitmaps。
- 展示了如何用 Go 语言实现基于 Roaring Bitmaps 的 GraphD 服务,用于跟踪用户的关注关系和进行集合操作。
- 比较了使用 Roaring Bitmaps 前后在内存占用、磁盘存储、启动时间、吞吐量和延迟等方面的优化效果。
- 提及下一步可能使用 DGraph 的内存序列化 Roaring Bitmap 库来进一步优化。
关键信息:
- 在 Bluesky 有百万用户和数亿关注关系,原用 in-memory 图存储处理“谁关注了用户 B 且被用户 B 关注”问题。
- 位图是存储整数集合的一位值向量,可节省空间,如用 10,000 位位图记录 10,000 用户的邮件验证状态。
- 处理社交网络问题时,简单位图存储大量用户关注关系需大量空间,如存储“关注用户 A 的人”需约 687KB 空间,同时存储“用户 A 关注的人”则需约 1.37MB 空间。
- Roaring Bitmaps 按 2^16 整数分块存储,稀疏块用排序数组,密集块用位图,能支持密集和稀疏数据,并行操作高效。
- GraphD 用 FollowMap 结构跟踪用户关注关系,添加关注只需设置相应位图位,计算交集可并行处理。
- 用 Roaring Bitmaps 可将 6.5GB 内存中的图序列化到约 1.6GB 的 SQLite 数据库中,加载只需约 20 秒,每秒可处理 70k 请求,且同步数据到磁盘速度快。
重要细节:
- Part 1介绍了 in-memory 图存储,收到用 Roaring Bitmaps 改进的反馈。
- 详细说明了 Run Length Encoding (RLE)的压缩策略及缺点。
- 给出了 GraphD 中添加关注和计算交集的代码示例,展示了 Roaring Bitmaps 的使用方式。
- 对比了使用 Roaring Bitmaps 前后在各种性能指标上的变化数据,如内存减少约 20%、磁盘大小减少约 84%等。
- 提到下一步可能使用 DGraph 的相关库来进一步优化。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。