Google Firebase Firestore使用哪种数据结构进行默认索引

时间:2018-03-19 18:22:06

标签: google-cloud-firestore b-tree inverted-index b-tree-index

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

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

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

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

是否有更好的方法来实现这样的模式?

1 个答案:

答案 0 :(得分:1)

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

每个字段索引都存储在其自己的密钥范围内,其中连续区域分配给服务器,并且在封面下独立地进行计算和存储扩展。 Cloud Firestore处理与Cloud Datastore非常相似的索引(但不是100%相同)。

您可以在去年查看我Cloud Next conference session的基本概述。