【问题标题】:How do "collisions" occur on Firebase data updates?Firebase 数据更新如何发生“冲突”?
【发布时间】:2021-08-22 13:40:56
【问题描述】:

在我的应用程序中,我将用户的数据存储在 Firebase 的实时数据库中。我可能会通过setValue 修改它的一个数据,然后直接对相同数据进行另一次修改(例如在用户向此操作按钮发送垃圾邮件时),因此我认为在同一时间同一地点。 我已经想知道我所说的是否属实,或者无论如何由于两次点击之间的时间滞后,这些更改不能同时发生。 目前我通过隐藏按钮直到修改完成来解决这个问题,但事实证明这个问题已经由 Firebase 解决了,我不知道。

如果有人可以帮助我,那就太好了:)

【问题讨论】:

  • 您需要查看Firebase Transactions 哪个状态在处理可能被并发修改损坏的数据时,例如增量计数器,您可以使用事务操作
  • 如果我们对用例有更多了解,或许可以提供更完整的答案;您是否试图避免并发写入同一时间可以在同一个地方有两个写入还是别的什么?

标签: ios swift firebase firebase-realtime-database transactions


【解决方案1】:

在 Firebase 实时数据库中,最后一次更改将被保存。如果您不想覆盖路径上的其他字段,请使用 update 而不是 set。你可以阅读更多关于它的信息here

【讨论】:

  • @MarwanTragha 这个答案虽然准确,但与防止冲突没有任何关系——这是通过 Firebase Transactions 处理的(请参阅我对您问题的评论)。这个答案只是说明如何不覆盖特定路径上的数据,而您希望能够覆盖路径上的数据,但不能同时覆盖。它仍然是很好的信息,只是不直接适用。此外,该链接适用于 Web,而不是 iOS,还请注意您可以使用 .set 更新特定字段而不覆盖其他字段 - .update 用于更新多个节点,即“扇出”更新
  • @Jay 感谢额外的输入。我已经更新了ios 文档的链接。据我所知,他只需要澄清 Firebase 是否正在管理并发写入。有时简单的问题就足够了。从这个问题我看不出他有任何理由需要使用交易。也许如果他能告诉我们他试图写什么样的数据,我们可以告诉更多关于它的信息。
  • 同意。这是引起我注意的事情同一时间可能有两篇著作。但也许他们会澄清。
  • 很抱歉没有看到你的反应,确实只是同时写的情况。事实上,如果用户连续按下一个按钮两次,那么它会向数据库中的同一位置写入两次。
猜你喜欢
  • 2011-04-01
  • 2014-04-24
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
相关资源
最近更新 更多