Firebase 实时数据库中的增量操作如何工作?

Posted

技术标签:

【中文标题】Firebase 实时数据库中的增量操作如何工作?【英文标题】:How does the increment operation on FirebaseRealtimeDatabase work? 【发布时间】:2021-06-17 11:31:54 【问题描述】:

我查看了 Firebase 文档,发现您可以使用以下行增加数据库中的数据:

Database.database().reference().child("Post").setValue([
         "number" : ServerValue.increment(10)
])

文档上还说“增量操作直接发生在数据库服务器上”,我不太明白这是什么意思。这个操作和类似的操作有什么区别:

// We have previously retrieved the value of number which we have stored in a variable
Database.database().reference().child("Post").setValue([
         "number" : numberOldValue + 10
])

【问题讨论】:

【参考方案1】:

而不是您从服务器获取值并执行将整数添加到另一个整数的小“原子”操作,increment 允许您只说出您希望在服务器上增加哪个值。它适用于服务器端,因此您完全无需担心获取当前值。如果它在您发送请求之前在一毫秒内发生变化,它会注意到这一点。

额外信息:它也比transaction 快得多。看看here。

【讨论】:

【参考方案2】:

事务 VS ServerValue

当处理可能被并发修改损坏的数据时,例如增量计数器,您可以使用事务操作,如果多个用户同时对同一个帖子或客户端加注,使用事务可以防止当前增量不正确有过时的数据。

ServerValue.increment(10) 的好处让您不必担心获取当前值来增加它,因为它会获取当前值并自动增加发送值

【讨论】:

以上是关于Firebase 实时数据库中的增量操作如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

我在访问子节点时遇到问题。 (firebase 实时数据库 - 增量报告)

如何在 Swift 中保存实时 Firebase 数据库中的数据?

(solr系列:五) solr定时实时重建索引和增量更新

Firebase 的云函数:增量计数器

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值

如何使用NodeJS中的firebase云功能从firebase实时数据库中找出最近的位置LatLng