Android 在Firebase数据库中,当同时需要推送和更新操作时,如何保持数据一致性?
假设我在Android 在Firebase数据库中,当同时需要推送和更新操作时,如何保持数据一致性?,android,json,firebase,firebase-realtime-database,Android,Json,Firebase,Firebase Realtime Database,假设我在Firebase中有以下数据库,当一个用户向另一个用户发送新消息时,它需要将新消息推送到“ChatThreads/hash(User1,User2)”并更新“UserChats/User1/User2”和“UserChats/User2/User1” 在这种情况下,如何保持数据的一致性? 在Firebase的文档中,介绍了创建对多个更新的公共父项的引用并将所有更新放在地图中的方法。但是,在这种情况下,不仅需要更新,还需要推送。当您在没有任何参数的情况下调用push()时,您会得到一个始终
Firebase
中有以下数据库,当一个用户向另一个用户发送新消息时,它需要将新消息推送到“ChatThreads/hash(User1,User2)”
并更新“UserChats/User1/User2”和“UserChats/User2/User1”
在这种情况下,如何保持数据的一致性?
在Firebase
的文档中,介绍了创建对多个更新的公共父项的引用并将所有更新放在地图中的方法。但是,在这种情况下,不仅需要更新,还需要推送。当您在没有任何参数的情况下调用push()
时,您会得到一个始终在客户端上生成的唯一密钥。(推送ID始终在本地生成。)使用该键,您可以构造到要在其中添加数据的位置的路径以及用于该更新的所有其他数据。当您在没有任何参数的情况下调用Push()
时,您会得到一个始终在客户端上生成的唯一键。(推送ID总是在本地生成。)使用该键,您可以构造到要添加数据的位置的路径,以及用于该更新的所有其他数据。这是相当棘手的。如果任何一步失败,如何进行回滚?这是相当棘手的。如果任何步骤失败,如何进行回滚?
"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"
}
}
}