Firestore安全规则get()查询缓存机制及读取成本问询
Firestore安全规则中
get()的缓存范围与读取成本问题 我想明确Firestore在执行单个查询或跨查询时,安全规则中get()查找的缓存范围。官方文档虽提及存在缓存,但未说明缓存触发的具体场景及查询产生的读取成本细节。
核心问题:在一次请求多个文档的查询中,若安全规则多次调用针对同一文档的get(),是否总会对该get()结果进行缓存?
场景示例
数据结构
images集合
"imgxyz": { "name": "img1", "url": "xyz.com", "snapshot":"bbb", "project": "aaa" }, "imgzyx": { "name": "img2", "url": "zyx.com", "snapshot":"bbb", "project": "aaa" }
users集合
"uid1": { "userName": "img2", "email": "zyx.com", "projects": ["aaa","bbb"] }
安全规则
service cloud.firestore { match /databases/{database}/documents { function canViewImage() { let userProjects = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.projects; let requestedDocProject = request.resource.data.project; return requestedDocProject in userProjects; } } }
具体疑问
- 若执行查询
.where("snapshot", "==", "bbb")且匹配数千个图片文档,从安全规则成本角度看,用户文档的get()查找仅产生1次额外读取,还是与匹配的图片文档数量相等? - 若连续执行单个文档查询,如先
.get("imgxyz")再.get("imgzyx"),缓存机制会如何运作?
注:已查阅相关讨论,但认为未充分解释安全规则缓存的触发时机及原因。
内容的提问来源于stack exchange,提问作者Patrick Smith
相关产品推荐
相关产品推荐

