2015-11-26 61 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