Google Firebase Firestore 使用什么数据结构作为其默认索引

What data structure does Google Firebase Firestore use for it's default index

我很好奇是否有人知道或可以猜到数据结构 Google 的 Firestore 用于按每个字段索引任意 NoSQL 文档。我正在寻找构建类似的东西,使其尽可能高效。

有关其默认索引如何工作的一些信息:

它不太可能是每个字段的标准 btree 索引,因为范围搜索可以在不添加对另一个索引的要求的情况下工作。另外,如果您添加了一个新字段(易于文档存储),则需要花费一些时间来构建包含数十亿项的索引和集合。

一个理论:每个文档 1 个大索引。每个文档中每个字段的索引 "field_name:value"。索引映射到包含 field/value 对的排序列表文档 ID。它将能够进行相等搜索(我为每个相等要求合并排序的 doc-id),但不能进行范围搜索。基本上是一个倒排索引。

有没有更好的方法来实现这样的模式的建议?

澄清一下,单字段索引确实支持 range/inequality 查询,复合索引是关于在单个查询中组合多个字段过滤器。有关索引类型的更多信息,请参阅此页面: https://firebase.google.com/docs/firestore/query-data/index-overview

每个字段索引都存储在它自己的键范围内,并将连续的区域分配给服务器,并在幕后独立地进行计算和存储扩展。 Cloud Firestore 处理索引的方式与 Cloud Datastore 非常相似(但并非 100% 相同)。

你可以看到我去年的Cloud Next conference session的基本概况。