在 Firebase 数据库中,当需要推送和更新操作时,如何保持数据一致性?
Posted
技术标签:
【中文标题】在 Firebase 数据库中,当需要推送和更新操作时,如何保持数据一致性?【英文标题】:In Firebase database, how to keep data consistency when both push and update operations are needed? 【发布时间】:2018-04-09 00:37:41 【问题描述】:假设我在Firebase
中有以下数据库,当用户向另一个用户发送新消息时,它需要将新消息推送到"ChatThreads/hash(User1,User2)"
并同时更新"UserChats/User1/User2"
和"UserChats/User2/User1"
。
"ChatThreads" :
"hash(User1,User2)" :
"1" :
"message" : "Hello",
"sender" : "User2",
"time" : 9835592
,
"2" :
"message" : "hi",
"sender" : "User1",
"time" : 10000000
,
"3" :
"message" : "I am boss",
"sender" : "User2",
"time" : 14835592
,
"UserChats" :
"User1" :
"User2" :
"lastTime" : 14835592,
"latestMessage" : "I am boss"
,
"User2" :
"User1" :
"lastTime" : 14835592,
"latestMessage" : "I am boss"
在这种情况下如何保持数据的一致性?
在Firebase
的文档中,介绍了创建多个更新的公共父级的引用并将所有更新放在一个映射中的方法。但是,这种情况下,不仅需要更新,还需要推送。
【问题讨论】:
【参考方案1】:当您不带任何参数地调用push()
时,您会得到一个始终在客户端上生成的唯一密钥。 (推送 id 始终在本地生成。)使用该密钥,您可以构建路径到要添加数据的位置以及该更新的所有其他数据。
【讨论】:
这很棘手。如果任何步骤失败,如何回滚?以上是关于在 Firebase 数据库中,当需要推送和更新操作时,如何保持数据一致性?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Firebase 云消息传递中删除或更新推送通知?