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

时间:2012-06-18 23:40:34

标签: 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)的操作来实现此结果,但至少在某些情况下,我更愿意只调用{{1} 1}}处理程序。

这是我的第二个想法。

2)批量设置:

在我的应用程序中,我想要一种强制对.on()进行任意数量调用的方法,只能在其他客户端中调用.set。类似的东西:

.on

在批处理模式下,ref.startBatch() ref.child("a").set(1) ref.child("b").set(2) .... ref.endBatch() 不会调用.set,而是.on的最小调用次数都会因调用.on而产生。


我欣然承认这些想法很新,如果它们与Firebase的现有架构功能发生冲突我不会感到惊讶,但我想我还是会分享它们。我发现在使用Firebase时,我不得不花费更多时间来确保客户端之间的一致性。

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

1 个答案:

答案 0 :(得分:8)

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

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

将更新'a'和'b',但不要修改'c'。


OLD ANSWER

感谢您提供详细的功能!我们希望能够更多地了解您的用例以及这些原语如何帮助您。如果您愿意分享更多详细信息,请发送电子邮件至support@firebase.com,我们可以深入了解您的情况。

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

在某些情况下,您可以通过重新组织树来大致获得所需内容。例如,如果你知道你总是想要将'a'和'b'放在一起,你可以把它们放在一个共同的'ab'父母下面并做ref.child('ab').set({a:-1, b:-2});,这不会影响'c'孩子。

就像我说的,我们希望能够更多地了解您的情况。我们正处于测试阶段,因此我们可以向开发人员了解他们如何使用API​​以及它的不足之处! support@firebase.com: - )