firebase - Firebase 中是否有(或考虑过)类似 'merge' 或 'batch' 设置的内容?

标签 firebase

今天在使用 Firebase 进行更多编程时,我发现自己希望获得以下几个功能:

1) 合并集:

假设我有一个 firebase ref,其值为 {a:1,b:2,c:3}

如果我执行类似 ref.set({a:-1,b:-2}) 的操作,新值将(不出所料)为 {a:-1,b: -2}

相反,想象一下 ref.mergeSet({a:-1,b:-2}) 其结果是 ref 的值为 {a:-1, b:-2,c:3}.

现在,我意识到我可以做类似 ref.child("a").set(-1)ref.child("b").set(- 2) 来实现此结果,但至少在某些情况下,我更愿意只调用一次对我的 .on() 处理程序的调用。

这就是我的第二个想法。

2) 批量设置:

在我的应用程序中,我希望有一种方法可以强制对 .set 进行任意数量的调用,从而仅导致其他客户端对 .on 进行一次调用。像这样的东西:

ref.startBatch()
ref.child("a").set(1)
ref.child("b").set(2)
....
ref.endBatch()

在批处理模式下,.set 不会导致对 .on 的调用,而是对 .on 的最小调用次数> 都是调用 .endBatch 的结果。

<小时/>

我承认这些想法还很新生,如果它们与 Firebase 现有的架构特征相冲突,我也不会感到惊讶,但我想无论如何我都会分享它们。我发现在使用 Firebase 时,我必须花费比预期更多的时间来确保客户端之间的一致性。

再次感谢,继续努力。

最佳答案

更新:我们添加了新的 update Firebase Web 客户端的 () 方法以及对 REST API 的 PATCH 支持,它允许您在特定位置原子地修改多个同级,同时保持其他同级不变。这就是您所描述的“mergeSet”,可以按如下方式使用:

ref.update({a: -1, b: -2});

这将更新“a”和“b”,但保持“c”不变。

<小时/>

旧答案

感谢您提出详细的功能请求!我们很想了解更多有关您的用例以及这些原语如何帮助您的信息。如果您愿意分享更多详细信息,请发送电子邮件至 support@firebase.com,我们可以深入研究您的场景。

为了回答您的问题,我们没有这些功能的主要原因与我们的架构以及我们试图维护的性能/一致性保证有关。不要太深入,但如果您想象您的 Firebase 数据分布在许多服务器上,那么我们在修改树中靠近的数据时比修改远处的数据时更容易获得更强的保证(原子性、顺序等)离开。因此,通过将这些保证限制为可以用单个 set() 调用替换的数据,我们将您推向一个在 Firebase 架构中表现良好的方向。

在某些情况下,您只需重新组织树就可以大致得到您想要的结果。例如,如果您知道总是希望将“a”和“b”设置在一起,则可以将它们放在共同的“ab”父项下,然后执行 ref.child('ab').set({a: -1, b:-2});,这不会影响“c”子级。

就像我说的,我们很想了解更多有关您的场景的信息。我们处于测试阶段,以便我们可以向开发人员了解他们如何使用 API 以及它的不足之处! support@firebase.com :-)

关于firebase - Firebase 中是否有(或考虑过)类似 'merge' 或 'batch' 设置的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11092577/

相关文章:

ios - Firebase 数据库结构 - 需要建议

java - 打开卡片 View 时如何获取特定用户的数据

android - 让未经身份验证的用户访问 FIrebase 中的数据库的缺点?

database - Firebase - 使用云功能定位特定的 Firestore 文档字段

javascript - Firebase:连接表

java - Firebase 数据库检索值,这可能吗

android - 错误 : Failed to resolve: com. google.firebase :firebase-crash:17. 2.2

android - Android Studio 中的几个 Gradle 错误

Firebase 存储 - 限制用户上传到 Firebase 存储的图像大小

javascript - 每次用户单击按钮时,将 'time' 存储在 firebase 中