簡體   English   中英

Firebase Cloud Functions 上的 Firestore 查詢性能問題

[英]Firestore Query performance issue on Firebase Cloud Functions

我在 firebase https function 上遇到超時問題,所以我決定優化每一行代碼並意識到單個查詢大約需要 10 秒才能完成。

let querySnapshot = await admin.firestore()
    .collection("enrollment")
    .get()

注冊集合有大約 23k 個文檔,總計大約 6MB。

據我了解,由於 https function 運行在雲 function 無狀態服務器上,因此它不應該受到查詢結果大小的影響。 Firestore 和 Cloud Functions 都在同一區域 (us-central) 上運行。 然而,10 秒確實是執行這種導致小快照大小的簡單查詢的高時間間隔。

一個有趣的事實是,在代碼的后面,我使用 Bulk Writer 用一個新字段更新了那些 23k 文檔,運行 bulkWriter.commit() 只需不到 3 秒。

另一個事實是 https function 沒有向客戶端返回任何查詢結果,因此不應該有任何影響 function 性能的“下載”時間。

為什么從集合中讀取值比寫入值要長 3 倍? 我一直認為 Firestore 架構適用於具有高讀取率的應用程序,而不是寫入。

您有什么建議可以對此進行優化嗎?

當我們執行 get() 時,會創建一個對所有文檔快照的查詢並返回結果 這些結果在單次執行中按順序獲取,即按順序返回和解析列表,直到列出所有文檔。

雖然數據可能很小,但是否有任何子集合? 這可能會增加一些額外的延遲,因為 API 獲取並解析子集合。

使用批量寫入器更新字段的速度是原來的 3 倍以上,因為批量寫入器操作是並行執行的,並且根據 Promises 進行排隊。 這允許每秒進行更多操作。

此鏈接總結了優化列出所有文檔的最佳方法,Google 的建議遵循相同的准則,即使用索引來加快查詢速度並使用多個閱讀器並行獲取文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM