0

我是Node.js和Firebase雲端函數中的新成員,我將盡力針對我的問題。Cloud Functions Http Request返回緩存的Firebase數據庫

我有一個火力點,數據庫對象,包括「得分」字段。我希望基於此檢索數據,並且可以在客戶端輕鬆完成。

問題是,如果數據庫變得很大,我擔心它要花費太長時間才能返回和/或將消耗大量資源。這就是爲什麼我正在考慮使用雲端函數來存儲緩存時使用的一個http服務,該緩存包含任何對象的分數隨着偵聽器而改變時將自行更新的前N個對象。

然後,客戶端只需調用諸如https://myexampleprojectroute/givemethetoplevels的東西來接收具有前N個級別的Json。

這是否合理?如果是這樣,我該如何解決這個問題?我需要哪些結構來使用此緩存,以及如何通過http以json格式返回它們?

目前我會繼續做客戶端,但我真的很喜歡這兩個表現和學習的目的。

在此先感謝。

編輯:

在我並沒有實現最優化的結束。之所以首先是因爲firebase數據庫不包含「孩子數」,所以我沒有找到用我的新手javascript知識來實現​​這一點的方法。其次,也是最重要的是,我敢肯定它不會擴展到數百萬,最多隻有10K條目,並且firebase具有排序優化的規則。欲瞭解更多信息,請查看this link.

而且,我會發佈一個簡單的代碼片段使用雲計算的功能,以防有人正在尋找它通過HTTP請求來檢索從數據庫中的數據。希望這可以幫助!

// Simple Test function to retrieve a json object from the DB 
// Warning: No security methods are being used such authentication, request methods, etc 
exports.request_all_levels = functions.https.onRequest((req, res) => { 
    const ref = admin.database().ref('CustomLevels'); 
    ref.once('value').then(function(snapshot) { 
    res.status(200).send(JSON.stringify(snapshot.val())); 
    }); 
}); 

回答

2

您在寫入時複製數據以獲得更好的讀取性能。這是一個完全合理的方法。事實上,在NoSQL數據庫中這樣常見的是保留這樣的派生數據結構,甚至有一個名稱:非規範化。

有幾件事情要記住:

  • 雖然更可預測的環境比一般的客戶端運行的雲功能,資源仍然有限。因此,閱讀大量的項目列表以確定最新的10個項目,仍然是次優方案。對於簡單的操作,您需要爲每個寫入操作保留派生數據結構的最新狀態。
  • 所以,如果你有一個「最新的10」,並有新的項目進來,你刪除最舊的項目,並添加一個新的。使用這種方法,您最多需要考慮11個項目,而每次寫入時,您的Cloud Function都會查詢最新的10個項目的列表,這是一個O(與-n一起)操作。
  • 同爲平均運算:你會發現一個moving average是最高效的,因爲它不需要任何以前的數據。
+0

謝謝!所以,而不是使用替代js結構,我只是在數據庫的不同路徑中複製頂部的X.我會試試這個!一旦完成,我會更新帖子! – Carles

相關問題