【问题标题】:What data structure does Google Firebase Firestore use for it's default indexGoogle Firebase Firestore 使用什么数据结构作为默认索引
【发布时间】:2018-08-28 10:08:43
【问题描述】:

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

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

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

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

对于实现这种模式的更好方法有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我想我理解但要确认,底层的大表“索引”存储为类似 Key="builtinIndexPrefix-[kind]-[field]-[value]-[entity-key]" (不需要属性)。然后对于相等查询,您使用“builtinIndexPrefix-[kind]-[field]-[value]-”的前缀搜索来获取实体键的排序列表?这将起作用并且非常快,但是多等式查询将需要迭代多个索引部分以找到每个索引中的 N 个键。这将非常快,但在技术上与结果集大小不成线性关系。我错过了什么吗?
    • 请注意先前的评论,[entity-key] 可能在密钥的属性中,无论是工作。我对多过滤器查询结果的线性以及我是否了解数据结构更感兴趣。谢谢!
    猜你喜欢
    • 2017-06-08
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2013-02-01
    • 2012-09-06
    相关资源
    最近更新 更多