主要观点:
- 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 反转的域名键,有简单的数据模式,如
language
、checksum
、contents
、anchor
等列家族。 - 用 Rust 重现实例,使用 Fjall 基于 LSM 的键值存储引擎,创建宽列抽象模块来插入和检索单元格,还创建了更友好的
WideColumnTable
和Webtable
模块来处理数据,可存储页面和锚点用于搜索引擎。 - 遇到问题如按语言聚合网页数量时,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 代码中插入和检索单元格的具体实现方式。
- 本地组功能可提高按语言聚合网页数量等操作的效率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。