1

我的應用程序需要在處理用戶的請求之前建立幾個大的hashmaps。理想情況下,我希望將這些hashmaps存儲在機器的內存中,這意味着它不必執行任何昂貴的處理,並且可以快速處理任何傳入的請求。如何將對象存儲在Firebase雲功能RAM中?

但是這對於firebase不起作用,因爲用戶觸發新的實例會引發非常耗時的預處理步驟。

所以,我試着設計我的應用程序來使用firebase數據庫,並且每次只從數據庫中獲取所需的數據,而不是將所有數據保存在內存中。但是,由於雲功能正在從數據庫中下載大量數據,現在我已經在本月下載了超過1.7 GB的下載量,僅僅通過測試即可。這超過了配額。

必須有我遺失的東西;我想要的只是一些hashmaps的永久存儲器。我想要的只是在函數調用請求的時候,這些hashmaps已經準備就緒。這似乎是這樣一個簡單的要求;怎麼沒有辦法做到這一點?

+0

你在同一天有3次不同的問題。我會建議堅持一個問題,並更新它,並參與評論,因爲更多的數據顯示。要回答這個問題 - 如果向Firebase添加數據會導致您的應用每次下載大量數據,那麼您可能會做錯了。 childAdded事件在這些情況下很有用。該事件只是將新添加的數據呈現給應用程序,然後您可以將其集成到您的內存數據集中。投票結束,因爲這是一個多餘的問題。 – Jay

+0

另外,如果您使用singleEvent實現觀察者,那麼您的數據將只下載一次,而不會再下載。即使數據是從Firebase添加,更改或刪除的,應用程序在下次運行和調用singleEvent時纔會收到事件。 – Jay

回答

2

如果要將數據存儲在運行雲功能的容器中,則可以使用its local tempfs,該值實際上保存在內存中。但是當容器被回收時,這會消失,當你的函數暫時不能訪問時會發生這種情況。所以,無論容器什麼時候啓動,這個本地文件系統都必須重建。

如果要永久存儲您生成的值,請考慮使用Google雲端存儲。這可能是一個更具成本效益的選擇,並且是最具擴展性的選項。

+0

感謝您的回答。我確實嘗試過使用雲存儲,我用它來存放一堆csvs,然後讀入/ tmp目錄,然後將它們變成hashmaps。問題就像你剛纔提到的那樣,當容器重新設置時,它必須重新完成它的權利?我沒有看到雲存儲如何避免這種情況,因爲我仍然需要將數據讀入服務器以將其處理爲hashmaps。 – pete

+0

我終於意識到,我的代碼太慢的原因是它在聲明之前在雲端函數之外運行(我不知道爲什麼它會變慢)。一旦我將其放入雲端功能中,它運行得非常快。問題是,如果我必須在每次請求時重新下載整個數據庫來構建hashmaps,那麼這是一種非常不可持續的解決方案,因爲我將很快耗盡存儲帶寬。當然必須有更好的方法? – pete

+0

很高興聽到你想通了。如果沒有看到再現問題的代碼,我不能評論任何更好的方法。這就是爲什麼我只解釋系統是如何工作的。 –

相關問題