我有一個叫做 Country 的集合,在這個集合里面,有 25 個檔案(25 個國家)
當用戶按下選擇國家/地區按鈕時,它會將他帶到 CountryFragment,當片段開始時,我將從 Firestore 獲取 25 個國家/地區。
假設用戶多次訪問 CountryFragment 并且每次用戶訪問這個片段將花費我 25 次讀取,因此我決定使用這種方式來降低讀取成本。
我使用 SharedPreferences 創建了一個密鑰,并將該密鑰命名為 lastCountriesUpdate。
我創建了一個檢查上面的鍵是否為空。如果鍵的值為空,則意味著我應該從 Firestore 獲取所有國家/地區。
否則,我將從 Country 集合中獲取 lastUpdate 值大于 lastCountriesUpdate 值的檔案。
一切正常,我降低了讀取成本,但現在的問題是我如何知道是否有任何國家被從 Country 集合中洗掉以將其從客戶端洗掉?
uj5u.com熱心網友回復:
我如何知道是否從 Country 集合中洗掉了任何國家/地區以將其從客戶端洗掉?
默認情況下,您只能通過獲取集合來知道這一點(或者通過獲取您知道可能已被洗掉的特定檔案,但這與我認為的用例不符)。
一種可能的成本較低的替代方法是:
- 在特定集合中的唯一檔案中保留最后一次更新集合的時間戳
Countries(例如 doc 路徑countriesLastUpdate/lastUpdate),以及; - 每次您需要顯示國家/地區串列時,您都會獲取這個唯一的檔案(即它只需要閱讀一次)并檢查時間戳是否已更改。
更準確地說,這意味著:
- 第一次需要顯示國家串列時,您獲取集合并獲取
lastUpdate檔案,讀取時間戳值并將其存盤在您的應用程式中。 - 后續需要顯示國家串列時,您首先要獲取
lastUpdate檔案并檢查時間戳是否已更改。如果沒有改變,你使用保存在你的應用程式中的當前串列,如果它改變了,你就像第一次一樣。 lastUpdate每次集合發生變化時,您都需要在后端更新檔案。最好的解決方案是使用帶有觸發器的云函式。onWrite
Cloud Function 將非常簡單:
exports.countriesLastChangeUpdate = functions
.firestore
.document('countries/{docId}')
.onWrite((change, context) => {
return admin.firestore().doc('countriesLastUpdate/lastUpdate').set({lastUpdate: context.timestamp});
});
請注意,國家/地區檔案洗掉(或創建或更改)與云功能完成(冷啟動和執行時間)之間可能存在微小的時間延遲。如果您想避免這種情況,您可以通過云功能執行國家檔案洗掉,該功能將lastUpdate通過批量寫入同時更新檔案。
另一種變化是在您第一次獲取集合時將當前時間戳存盤在您的應用程式中,隨后的時間檢查存盤在lastUpdate檔案中的時間戳是否在您的應用程式中存盤的時間戳之后。您避免了對lastUpdate檔案的初始閱讀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373193.html
標籤:安卓 火力基地 谷歌云firestore
上一篇:未解決的參考:github,當嘗試在Kotlin中匯入Fuel庫時
下一篇:如何從片段打開活動
