gpt4 book ai didi

java - 如何使用admin sdk更快地批量更新实时数据库?

转载 作者:行者123 更新时间:2023-12-02 03:05:07 26 4
gpt4 key购买 nike

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

我在 firebase 中使用了 python 和 java admin sdk。首先,我尝试使用循环更新数据,但似乎非常慢,因为更新 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,增长速度相当快。所以即使我这样做了, future 也会变得越来越难。

这种批量更新有没有其他方法?或者有什么办法可以将更新时间缩短到5~10分钟?

最佳答案

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

root.update({
`/${data.uid}/name`: data.name,
`/${data.uid}/id`: data.id,
`/${data.uid}/basic/basic`: data.gender
})

使用这种方法将减少网络开销,因为您将多个调用合并为一个。另一方面,处理更新可能需要服务器花费更多时间,因为它需要在将所有更新提交到磁盘之前将它们保存在内存中。因此,您需要衡量使用多位置更新对性能的影响。

我建议将 100 个更新合并到一个调用中,然后测量该调用与 100 个单独调用之间的性能差异。

关于java - 如何使用admin sdk更快地批量更新实时数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57027352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com