追溯谷歌的步骤:在 Rust 中重新创建网络表

主要观点:

  • Google 的搜索页面是互联网用户冲浪的起点,需管理巨大搜索索引,存储互联网大量内容需 Petabytes 甚至 Exabytes 级存储。
  • Bigtable 是 Google 为管理增长数据集而开发的大规模可扩展数据库,是分布式宽列数据库,其关键模式为<row key>.<col fam>.<col qual>.<ts>,通过行键排序,无二级索引,自身本质是分布式 LSM-tree。
  • LevelDB 是 Google 基于 Bigtable 代码的可嵌入 LSM-tree 键值存储引擎,2011 年发布,现已进入维护模式,每个 Chromium 浏览器都携带它,Facebook 后来将其 fork 为 RocksDB 并进一步开发,如今在无数项目中使用。
  • Google 构建了 Webtable 来存储互联网内容,它是一个巨大的 Bigtable 表,存储 HTML 页面、链接和一些元数据,行键是页面 URL 反转的域名键,有简单的数据模式,如languagechecksumcontentsanchor等列家族。
  • 用 Rust 重现实例,使用 Fjall 基于 LSM 的键值存储引擎,创建宽列抽象模块来插入和检索单元格,还创建了更友好的WideColumnTableWebtable模块来处理数据,可存储页面和锚点用于搜索引擎。
  • 遇到问题如按语言聚合网页数量时,Bigtable 的“本地组”功能可将某些列家族分组,实现数据分区,提高读取效率。
  • 提供了代码仓库[https://github.com/marvin-j97...],还可加入 Discord 服务器[https://discord.gg/HvYGp4NFFk]讨论数据库等相关内容,感兴趣可查看fjall

关键信息:

  • Bigtable 相关:分布式宽列数据库,关键模式,无二级索引,本质是分布式 LSM-tree。
  • LevelDB 和 RocksDB:LevelDB 是 Bigtable 后代,RocksDB 由 Facebook fork 开发。
  • Webtable 相关:存储互联网内容,行键格式,数据模式,用于搜索引擎。
  • Rust 重现实例:使用 Fjall 引擎,创建相关模块处理数据。
  • 本地组功能:提高读取效率,可分组列家族。

重要细节:

  • 插入单元格需指定行键、列键(列家族+列限定符)和时间戳,列限定符可为空。
  • 行键决定表的顺序,是唯一索引机制。
  • 每个 Chromium 浏览器携带 LevelDB。
  • Webtable 行键示例及各列家族存储内容。
  • Rust 代码中插入和检索单元格的具体实现方式。
  • 本地组功能可提高按语言聚合网页数量等操作的效率。
阅读 11
0 条评论