Google cloud firestore Google Firebase Firestore使用什么数据结构;s默认索引

Google cloud firestore Google Firebase Firestore使用什么数据结构;s默认索引,google-cloud-firestore,b-tree,inverted-index,b-tree-index,Google Cloud Firestore,B Tree,Inverted Index,B Tree Index,我很好奇,是否有人知道,或者可以猜测,谷歌Firestore使用的数据结构是按每个字段索引任意NoSQL文档的。我希望建立类似的东西,使其尽可能有效 有关其默认索引如何工作的一些信息: 默认情况下,所有字段都编制了索引,但仅适用于相等搜索,不适用于范围() 任何范围搜索都需要额外的索引 资料来源: 这不太可能是每个字段的标准btree索引,因为范围搜索可以在不添加其他索引要求的情况下工作。另外,如果您添加了一个新字段(易于文档存储),那么构建包含数十亿项的索引和集合将需要时间 一个理论是:每

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

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

  • 默认情况下,所有字段都编制了索引,但仅适用于相等搜索,不适用于范围()
  • 任何范围搜索都需要额外的索引
  • 资料来源:
这不太可能是每个字段的标准btree索引,因为范围搜索可以在不添加其他索引要求的情况下工作。另外,如果您添加了一个新字段(易于文档存储),那么构建包含数十亿项的索引和集合将需要时间

一个理论是:每个文档有一个大索引。为每个文档中的每个字段编制“字段名称:值”索引。索引映射到包含该字段/值对的已排序列表文档ID。它将能够进行相等搜索(我为每个相等要求合并排序的文档ID),但不能进行范围搜索。基本上是一个倒排索引


有没有关于更好地实现这种模式的建议?

澄清一下,单字段索引确实支持范围/不等查询,复合索引是关于在一个查询中组合多个字段过滤器的。有关索引类型的更多信息,请参见本页:

每个字段索引都存储在其自己的密钥范围内,并将连续区域分配给服务器,服务器的计算和存储扩展都独立于此。CloudFireStore处理的索引与云数据存储非常相似(但不是100%相同)


您可以看到我去年的基本概述。

我想我理解,但要确认的是,底层的bigtable“index”存储为Key=“builtinIndexPrefix-[kind]-[field]-[value]-[entity Key](不需要属性)。然后,对于相等查询,您使用“builtinIndexPrefix-[kind]-[field]-[value]-”的前缀搜索来获得实体键的排序列表?这将起作用并且速度相当快,但是多重相等查询将需要迭代多个索引部分以查找每个索引部分中的N个键。这将非常快,但在技术上与结果集大小不是线性的。我遗漏了什么吗?请注意,在前面的评论中,[实体键]可能位于一个属性中,而不是键。我更感兴趣的是多过滤器查询结果的线性度,以及我是否了解数据结构。谢谢