【问题标题】:How to delete a large node in firebase如何删除firebase中的大节点
【发布时间】:2020-12-24 03:41:06
【问题描述】:

我有一个 Firebase 子节点,其中包含大约 15,000,000 个子对象,总数据大小约为 8 GB。

示例数据结构:

firebase.com/childNode/$pushKey

each $pushKey contains a small flat dictionary: 
{a: 1.0, b: 2.0, c: 3.0}

我想尽可能高效、轻松地删除这些数据。怎么样?

我尝试了什么: 我的第一次尝试是 put 请求:

PUT firebase.com/childNode.json?auth=FIRE_SECRET
data-raw: null

回复:{ “错误”:“请求的数据超出了单个请求可以访问的最大大小。请联系 support@firebase.com 寻求帮助。” }

那不行,让我们做一个限制请求:

PUT firebase.com/childNode.json?auth=FIRE_SECRET&orderBy="$key"&limitToFirst=100
data-raw: null

回复:{ "error": "查询此请求类型不支持的相关参数" }

到目前为止运气不好 :( 编写一个脚本来获取前 X 个键然后创建一个补丁请求并将每个值设置为 null 怎么样?

GET firebase.com/childNode.json?auth=FIRE_SECRET&shallow=true&orderBy="$key"&limitToLast=100

{ “错误”:“不支持混合‘浅’和查询参数” }

这个真的不容易吗?我可以删除肤浅的要求并获得密钥,然后完成脚本。我只是希望有一种更简单/更有效的方法???

我尝试的另一件事是创建一个节点脚本来侦听 childAdded,然后直接尝试删除这些孩子?

ref.authWithCustomToken(AUTH_TOKEN, function(error, authData) {
  if (error) {console.log("Login Failed!", error)}
  if (!error) {console.log("Login Succeeded!", authData)}

  ref.child("childNode").on("child_added", function(snap) {
    console.log(`found: ${snap.key()}`)
    ref.child("childNode").child(snap.key()).remove( function(err) {
      if (!err) {console.log(`deleted: ${snap.key()}`)}
    })
  })
})

这个脚本现在实际上挂起,但早些时候我确实收到了来自 firebase 的最大堆栈限制警告。我知道这不是 firebase 问题,但我没有看到任何特别简单的方法可以解决该问题。

【问题讨论】:

    标签: firebase


    【解决方案1】:

    下载浅树,只会下载密钥。因此,您可以下载所有密钥,而不是要求服务器订购和限制。

    然后您可以在客户端对其进行排序和限制,并将删除请求批量发送到 Firebase。

    您可以使用此脚本获得灵感:https://gist.github.com/wilhuff/b78e7391396e09f6c614

    【讨论】:

      【解决方案2】:

      为此使用 firebase cli 工具:firebase database:remove --project 。

      【讨论】:

      • 如果我没记错的话,挑战只是删除一个节点而不是一个完整的项目。
      • @AndreasOkholm:对不起,我的错是删除 --project
      • 仅供参考,旧 CLI 版本无法删除大型节点,但最新版本可以。
      【解决方案3】:

      在浏览器控制台中这是最快的方法

      database.ref('data').limitToFirst(10000).once('value', snap => { var updates = {}; snap.forEach(snap => { updates[snap.key] = null; }); database.ref('data').update(updates); });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        • 2019-10-29
        • 2017-01-07
        • 1970-01-01
        • 2018-07-18
        相关资源
        最近更新 更多