Firebase中是否存在(或已经考虑过)"合并"或"批量"设置?

Har*_*old 5 firebase

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

1)合并集:

假设我有一个ref具有该值的firebase {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()
Run Code Online (Sandbox Code Playgroud)

在批处理模式下,.set不会导致调用.on,而是调用.on所有调用的最小数量.endBatch.


我很乐意承认这些想法很新,如果它们与Firebase的现有架构功能发生冲突我也不会感到惊讶,但我认为无论如何我都会分享它们.我发现在使用Firebase时,我不得不花费更多时间来确保客户端之间的一致性,而不是我预期的.

再次感谢,并保持伟大的工作.

Mic*_*uer 8

更新:我们向Firebase Web客户端添加了一个新的update()方法,并为REST API添加了PATCH支持,允许您以原子方式修改特定位置的多个兄弟,同时保持其他兄弟姐妹不被修改.这就是您所描述的"mergeSet",可以按如下方式使用:

ref.update({a: -1, b: -2});
Run Code Online (Sandbox Code Playgroud)

这将更新'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 :-)