如何使用admin SDK更快地批量更新到实时数据库?

时间:2019-07-14 12:20:10

标签: java python firebase-realtime-database

我需要定期向我的实时数据库中更新一组数据(大约1100-1200数据),该数据库可能存在也可能不存在。

我已经将python和java admin sdk用于firebase。首先,我尝试使用循环来更新数据,但是它看起来非常慢,因为更新1100个数据需要40多分钟。我无法批量更新,因为它将覆盖现有数据。我需要一种方法来更新每个节点内的数据,如果数据不存在,则只需创建一个新节点即可。

我一直在这样做,但这要花很多时间

for data in datalist:
    if data.id and data.uid:
        obj = {
            'name': data.name,
            'id': data.id
        }

        grd = {}
        grd['basic'] = data.gender
        ref = root.child(data.uid).update(obj)
        ref = root.child(data.uid).child('basic').update(grd)

我认为我可以从实时数据库下载整个数据库并进行修改。然后,我可以更新整个数据。但是目前我的数据库大小约为4 mb,并且增长很快。因此,即使我这样做,将来也会越来越难。

这种批处理更新是否有其他替代方法?还是有什么方法可以将更新时间减少到5〜10分钟?

1 个答案:

答案 0 :(得分:0)

我唯一想到的方法是使用here所示的多位置更新。在其中,您正在创建要更新的确切属性的深层路径,因此可以将细化更新应用于数据库中的任何内容。在JavaScript语法中,您当前作为多位置更新进行的写入应如下所示:

Compatibility matrix

使用这种方法将减少网络开销,因为您可以将多个呼叫组合到一个呼叫中。另一方面,在服务器上处理更新 可能需要更多时间,因为它需要在将所有更新提交到磁盘之前将其保留在内存中。因此,您需要评估使用多位置更新对性能的影响。

我建议您将100个更新合并到一个通话中,然后测量与100个独立通话之间的性能差异。