2015-11-26 63 views
1

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

exampele数据结构:

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 

响应:{ “错误”:“数据要求超出了可以用一个请求访问的最大尺寸。请联系[email protected]寻求帮助。“ }

所以没有工作,让我们做一个限制要求:

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

响应:{ “错误”: “查询相关参数不支持这个请求类型” }

到目前为止没有运气:(怎么样写一个脚本,将获得第一个X数的键,然后创建一个补丁请求,每个V alue设置为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()}`)} 
    }) 
    }) 
}) 

这个脚本实际上挂起的权利,但我前面确实收到出头像一个最大堆栈限制从火力警告。我知道这不是一个火力点问题,但我没有看到任何特别简单的方法来解决这个问题。

回答

1

下载一个浅层树,将只下载密钥。因此,不要要求服务器进行排序和限制,您可以下载所有密钥。

然后您可以订购并限制它在客户端,并批量发送删除请求到Firebase。

你可以使用这个脚本的灵感:https://gist.github.com/wilhuff/b78e7391396e09f6c614

-1

使用火力CLI工具,这一点:火力数据库:删除--project。

+0

如果我没有记错,那么挑战只是删除一个节点而不是一个完整的项目。 –

+0

@AndreasOkholm:对不起,我的坏处是 remove --project AshuKingSharma