使用Firebase数据库中的事务而不是正常写入的原因

时间:2018-01-19 20:51:22

标签: android firebase firebase-realtime-database

Firebase文档声明事务用于可能需要频繁更新字段的情况(例如,像计数器一样)。但我不明白,为什么我不能从数据库中读取数据使用监听器并将数据写入节点?我知道这很粗略,但我想知道使用这种方法有什么缺点。

1 个答案:

答案 0 :(得分:3)

想象一下两个客户端都在尝试同时更新数据库中的某些计数的情况。我们称之为客户A和客户B.他们的行为是这样命令的:

  1. 客户端A读取值为1的计数
  2. 客户B读取值为1的计数
  3. 客户A希望增加计数。它将1 + 1 = 2的计数写回数据库。
  4. 客户B希望增加计数。它将1 + 1 = 2的计数写回数据库。
  5. 在这种情况下,count 为3,但数据库中仍保留值为2的值。现在计数显然是错误的,并且事务可以通过以特定顺序强制写入来阻止该问题,并且在第一个客户端更新它之后强制第二个客户端重新读取计数。这意味着其中一个客户端从1更新为2,第二个客户端从2更新为3.在这种情况下,使用事务是确保正确性的唯一方法。