Firebase实时数据库与Firebase功能的写入不一致

时间:2018-02-28 12:36:53

标签: firebase firebase-realtime-database google-cloud-functions firebase-admin

我有一个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

不同的currentValue

我厌倦了从db中读取jobs的值来实现一致性的解决方案,然后启动事务来更新值,但结果仍然相同。

我没有测试的其他解决方案是通过在节点/users/{uid}/jobs/locked放置布尔值来使用锁定机制,并且在尝试更新时首先检查布尔值是否为假(意味着没有其他执行正在修改数据)然后设置布尔值true更新值,然后释放锁定设置值false。

有没有更好的方法来解决这种不一致?

0 个答案:

没有答案