具有大数据集的Firestore where子句

时间:2018-09-27 09:36:58

标签: database firebase google-cloud-firestore

我的Firestore数据库中具有以下结构:

messages:
    m1:
        title: "Message 1"
        ...
        archived: false
    m2:
        title: "Message 2"
        ...
        archived: true

假设我有2万条消息,并且我想使用“ where”子句获取已归档的消息,查询的速度是否会比按以下结构构建数据库慢?

nonArchivedMessages:
    m1:
        title: "Message 1"
        ...
archivedMessages:
    m2:
        title: "Message 2"
        ...

在我看来,使用第二种结构似乎更适合于大型数据集,但在某些情况下却隐含着问题,例如在不知道消息是否已归档的情况下获取消息。

1 个答案:

答案 0 :(得分:2)

Cloud Firestore的保证之一是,检索一定数量的文档所花费的时间不取决于集合中文档的总数。

这意味着在您的第一个数据模型中,如果您加载100个存档文档并且(例如)花费1秒,则您知道加载100个存档文档将始终花费大约1秒,无论有多少文档里面有。

有了这些知识,两个数据模型之间的唯一区别是,在第一个模型中,您需要查询以捕获已归档的消息,而在第二个模型中,您不需要查询。 Cloud Firestore上的查询通过访问索引来运行,因此区别在于在第一个数据模型中读取了一个(多个)索引。尽管这对执行时间的影响很小,但与实际读取文档并将文档返回给客户端所花费的时间相比,这将是微不足道的。

所以:可能还有其他原因更喜欢第二种数据模型,但是两者之间读取存档消息的性能将是相同的。