gpt4 book ai didi

firebase - Cloud Firestore - 确保数据一致性

转载 作者:行者123 更新时间:2023-12-03 00:17:47 25 4
gpt4 key购买 nike

我的数据库使用冗余数据来加快获取速度并最大限度地减少某些查询需要读取的文档数量。例如,我会将关注用户的姓名存储在用户文档的 map 中,这样我就不必阅读另一个文档来检索每个关注用户的姓名。

User: (Collection) {
userID: (Document) {

//user state
name: ...

followingUsers: (Map) {
followingUserID: nameOfUser,
followingUserID: nameOfUser
}
}

}

如果用户要更改其名称,将这些更改传播到具有冗余数据的所有位置的最佳方法是什么?

最佳答案

好问题!对于初学者,我建议在服务器 SDK 或云功能中执行此类管理任务,因为您不希望客户端必须能够开始处理每个用户文档。

好消息是,一旦您开始使用服务器 SDK,您就可以将查询放入事务中。假设 user_123 将他们的名字从“Jenny”更改为“Jen”。您的交易在伪代码中看起来像这样:

  • 开始交易
    • transaction.get(usersRef.where("followingUsers.user_123", ">=", ""))
    • 循环查询结果。从每个文档中获取 doc_id 并使用它开始构建事务中的写入。
      • transaction.update("/users/<doc_id>/", {"followingUsers.user_123" : "Jen"})
    • 另请确保添加 transactions.update("/users/user_123", {"name": "Jen"})
  • 结束交易

这种通用方法也适用于客户端,但您无法在事务中执行此操作。 (不过,您仍然可以将所有这些更改放入批量写入中。)

关于firebase - Cloud Firestore - 确保数据一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com