【问题标题】:Firestore onSnapshot: One query complex or multiple query simpleFirestore onSnapshot:一个查询复杂或多个查询简单
【发布时间】:2020-09-10 03:20:22
【问题描述】:

使用复杂子句创建 onSnapshot 或创建使用简单子句创建 3 个快照 存在任何成本或性能差异。此外,posts 集合有一个规则,如果登录的用户有权阅读帖子,则检查 posts_permission 集合。这是一个移动项目,所以我关心性能和成本,因为帖子可以不断更新。

复句:

const query = db.collection('posts')
            .where(firebase.firestore.FieldPath.documentId(), 'in', ['id1','id2', 'id3']);
query.onSnapshot(snap => {console.log(snap)});

简单从句:

const query1 = db.collection("posts").doc("id1")
const query2 = db.collection("posts").doc("id2")
const query3 = db.collection("posts").doc("id3")
query1.onSnapshot(snap => {console.log(snap)});
query2.onSnapshot(snap => {console.log(snap)});
query3.onSnapshot(snap => {console.log(snap)});

【问题讨论】:

  • 您还需要考虑它们是三个不同的请求,其中一两个可能会尝试网络延迟。一般来说,由于文档被索引,它们最好一次查询

标签: javascript firebase mobile google-cloud-firestore firebase-security


【解决方案1】:

就成本而言,读取 X 个文档总是花费 X 个文档读取的成本。查询多少次都没关系。您还将为通过评估安全规则读取的每个文档付费。如果您按照documentation 中的信息进行操作,计算成本真的很容易。没有隐藏成本。

在性能方面,多查询和单查询真的没有太大区别。除非您正在处理大量文档,否则您可能会根据文档的大小和数量以及网络连接的质量看到类似的性能。所有读取的文档都通过单个连接进行管道传输,因此从多个侦听器接收文档与从一个侦听器接收文档没有本质区别。如果您有疑虑,您应该自己对此进行基准测试。

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2011-09-12
    • 2013-08-17
    • 2021-11-12
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多