我需要从大型对象列表中执行某种计算。当新用户将项目添加/删除/更新到列表时,我需要执行计算。我从列表中检查上次修改的时间戳,并仅在需要时执行计算。因此,例如,我基于时间戳1000生成计算。如果某人修改了列表项,则其时间戳将改变,如果是> 1000,然后我将进行计算。
然而,对于添加和删除,它工作正常。但是,当遇到离线工作失败时,我遇到了一个奇怪的情况。
因此,这是具有用户(用户A和用户B)所具有的初始值的项目列表。总价值为: 600 基于最大的last_modified: 3000
现在,两个用户都处于脱机状态并且离线编辑:
用户A 编辑 item1 ,时间戳 4000 ,值 400 。因此,基于最大的last_modified 4000
用户B 在时间戳 5000 时修改了值 500 的 item3 。因此,基于最大的last_modified 5000
目前两个用户都处于脱机状态,因此服务器没有任何更新。它在用户的本地数据库中看起来像这样:
现在首先用户B 上线。并将其数据同步到firebase数据库。所以在服务器上我们有总价值: 800 。
当用户A 上线时会发生这种情况:
因此,两个用户都包含以下内容:
但是,实际总数应为: 1100 。但是,它将 800 。重新计算不会发生,因为生成的总时间戳表示它是在 5000 时间戳生成的,当前最大的是 5000 。所以它假设总数是从 5000 生成的并且它是正确的。
仅在修改数据是性能时才会进行原因计算。 1000 记录需要几乎 3秒才能执行计算。它会随着时间的推移而变大。因此,它不应该成为瓶颈。
我该如何解决这个冲突?
任何帮助将不胜感激。
非常感谢你。