Firestore onSnapshot:一个查询复杂或多个查询简单

问题描述

创建具有复杂条款的onSnapshot 或创建具有简单子句的 3快照,在成本或性能上均存在差异。此外,帖子集合具有一条规则,该规则可以检查 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)});

解决方法

就成本而言,读取的X文档总是成本为X文档。接受多少查询都没有关系。您还将为通过评估安全规则阅读的每个文档付费。如果您仅遵循documentation中的信息,则计算成本确实非常容易。没有任何隐藏费用。

就性能而言,在多个查询和单个查询之间并没有太大的区别。除非您要处理大量文档,否则根据文档的大小和数量以及网络连接的质量,您可能会看到可比的性能。所有读取的文档都通过单个连接进行流水线传输,因此从多个侦听器(而不是一个侦听器)接收文档没有实质性区别。如果您有疑虑,应该自己对此进行基准测试。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...