iCo*_*101 5 firebase google-cloud-firestore
我的数据库使用冗余数据来加快获取速度,并最大程度地减少某些查询需要读取的文档数量。例如,我会将关注的用户的名称存储在用户文档中的地图中,因此我不必阅读其他文档即可检索每个关注的用户的名称。
User: (Collection) {
userID: (Document) {
//user state
name: ...
followingUsers: (Map) {
followingUserID: nameOfUser,
followingUserID: nameOfUser
}
}
Run Code Online (Sandbox Code Playgroud)
}
如果用户要更改其名称,那么将这些更改与冗余数据一起传播到所有位置的最佳方法是什么?
好问题!对于初学者,我建议在服务器 SDK 或云功能中执行此类管理任务,因为您不希望客户端必须能够开始处理每个用户文档。
好消息是,一旦您开始使用服务器 SDK,就可以将查询放入事务中。因此,假设 user_123 将其名称从“Jenny”更改为“Jen”。您的交易在伪代码中看起来像这样:
transaction.get(usersRef.where("followingUsers.user_123", ">=", ""))transaction.update("/users/<doc_id>/", {"followingUsers.user_123" : "Jen"}) transactions.update("/users/user_123", {"name": "Jen"}) 这种通用方法也适用于客户端,但您无法在事务中执行此操作。(不过,您仍然可以将所有这些更改放入批量写入中。)
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |