【问题标题】:"error" : "Data to write exceeds the maximum size that can be modified with a single request." Firebase"error" : "要写入的数据超出了单个请求可以修改的最大大小。"火力基地
【发布时间】:2022-02-05 23:51:09
【问题描述】:

我正在尝试删除 Firebase 实时数据库中由许多子节点组成的节点。

我创建了这个可以工作的小功能,但在孩子太多的时候就不行了:

def delete_node_firebase(node):
    node_val = db.child(node).get().val()
    for k, v in node_val.items():
        db.child(node).child(k).remove()

当我在一个有很多孩子(在我的情况下超过 20000 个)的节点上进行调用时,会出现此错误:

"error" : "要写入的数据超过了可以修改的最大大小 一个请求。

请问有人知道解决办法吗?

【问题讨论】:

  • 您好@Doug Stevenson,感谢您的链接。但我想在 python 中而不是通过使用 Firebase CLI 来完成。你知道方法吗?
  • 如果您通读这篇文章,您会得到一些关于 CLI 必须在内部做什么才能使其工作的提示。也许您可以尝试类似的方法。

标签: python python-3.x firebase firebase-realtime-database pyrebase


【解决方案1】:

您试图在单个请求中写入/删除太多数据,这将花费比数据库认为合理的时间更多的时间。与允许此操作并可能阻止其他调用访问您的数据库不同,常见的方法是以更合理的批次删除子节点。这已经讨论过很多次了,所以我建议检查其中一些search results

正如 Doug 评论的那样,这篇博文 How to Perform Large Deletes in the Realtime Database 解释了 Firebase 命令行工具如何/何时实现这种分块删除。如果您想在自己的代码中实现它,可以查看code of the CLI command 以获得灵感。

CLI 和 REST API 还允许您传递参数以指示您不希望它检查大型删除/写入,因此请查看writeSizeLimit 上的文档。据我所知,这个参数是not wrapped in Pyrebase,所以如果你想使用它,你必须自己调用REST API。

另见:

【讨论】:

  • 谢谢弗兰克。确实,在使用与项目关联的凭据登录并运行此命令的 firebase 登录后,它正在与 CLI 一起使用:firebase database:remove /path/nodes --project project_id 我将为您提供 Firebase 的答案并标记您的答案目前已接受。非常感谢。
猜你喜欢
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-03
  • 2021-05-02
  • 1970-01-01
  • 2018-02-27
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多