问题描述
创建具有复杂条款的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中的信息,则计算成本确实非常容易。没有任何隐藏费用。
就性能而言,在多个查询和单个查询之间并没有太大的区别。除非您要处理大量文档,否则根据文档的大小和数量以及网络连接的质量,您可能会看到可比的性能。所有读取的文档都通过单个连接进行流水线传输,因此从多个侦听器(而不是一个侦听器)接收文档没有实质性区别。如果您有疑虑,应该自己对此进行基准测试。