Firebase 是否存在(或是否考虑过)类似于';合并';或';批次';在火炉基地设置?

Firebase 是否存在(或是否考虑过)类似于';合并';或';批次';在火炉基地设置?,firebase,Firebase,今天,我用Firebase进行了更多的编程,我发现自己希望有几个功能: 1) 合并设置: 假设我有一个firebaseref,它的值为{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”).se

今天,我用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时,我必须花费比预期更多的时间来确保客户端的一致性


再次感谢,请继续完成这项伟大的工作。

更新:我们向Firebase web客户端添加了一个新的()方法,并为添加了补丁支持,允许您在特定位置自动修改多个同级,而不修改其他同级。这就是您所描述的“合并集”,可以按如下方式使用:

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:-)