如何在firebase实时数据库中实现原子性.我的问题



对于给定的代码,我尝试实现原子性。在这种情况下,如果第一次push被执行,那么如果失败,则执行第二次push,然后回滚第一次push并从顶部重新开始。如果第一次推送成功执行,那么执行第二次推送;如果成功执行,那么执行第三次推送;如果第三次推送失败,那么回滚第一次和第二次推送。再从头开始执行。如果通过,则将数据保存到实时数据库。

"if(message){
ref.push({
mobNo : senderMobNo,
message : message,
time : d
});
ref2.push({
mobNo : senderMobNo,
message : message,
time : d
});
ref3.push({
mobNo : senderMobNo,
message : message,
time : d
});
}"

听起来您想要执行多路径更新,这是一种在单个API调用中组合多个更新的方法:

if(message){
const updates = {};
let id = ref.push().key; // generate a push key
updates[key] = {
mobNo : senderMobNo,
message : message,
time : d
});
id = ref.push().key; // generate another push key
updates[id] = {
mobNo : senderMobNo,
message : message,
time : d
});
id = ref.push().key; // generate a third push key
updates[id] = {
mobNo : senderMobNo,
message : message,
time : d
});
ref.update(updates); // send them all to the database in one go
}

如果递归不适合您,并且您希望提交所有数据,那么您应该考虑通过调用update()来同时对JSON树中的多个位置执行添加。

通过这种方式,您可以同时将新消息写入所需的位置。这些操作是原子性的,要么所有更新成功,要么所有更新失败。在这种情况下,没有必要回滚某些内容。

最新更新