我有一个firebase函数,它们在onCreate上为路径/activites/{uid}/{workId}
触发。然后,此函数使用值进行一些处理,然后将结果(数值)更新为/users/{uid}/jobs
。
// value read from the snapshot function gives
// processing on value
// .
// .
// .
db.ref('/users/{uid}/jobs').transaction(currentVal => {
return (currentVal || 0) + workIdValue;
})
当假设函数以1秒每uid
的跨度触发40次,即相同的路径时,会出现我的写入不一致的问题。这使得数据不一致,因为每次执行都具有与路径/users/{uid}/jobs
我厌倦了从db中读取jobs
的值来实现一致性的解决方案,然后启动事务来更新值,但结果仍然相同。
我没有测试的其他解决方案是通过在节点/users/{uid}/jobs/locked
放置布尔值来使用锁定机制,并且在尝试更新时首先检查布尔值是否为假(意味着没有其他执行正在修改数据)然后设置布尔值true更新值,然后释放锁定设置值false。
有没有更好的方法来解决这种不一致?