當觀察FIRDatabaseQuery與觀察方法,有時需要10〜13秒從遠程數據庫獲取數據。這主要發生在應用程序來自後臺或剛剛啓動時。此查詢完成後,隨後的查詢將以遠程數據的超快速度返回。並且問題不再發生。火力地堡數據庫慢速觀察
這是我使用觀察代碼:
public static func observeMatchEvents(match: Match) -> QueryObserver
{
FIRDatabase.database().reference().child("events").queryOrdered(byChild: "match_id").queryEqual(toValue: match.identifier)
log.debug("Started getting match events...")
let observer = query.observe(FIRDataEventType.value, with: { (snapshot) in
log.debug("This sometimes takes 10~13 seconds before it gets executed")
// Handle data
})
return QueryObserver(query: query, handle: observer)
}
這是我在我的火力地堡數據庫結構:
,事件是根的孩子數據庫。
我使用火力地堡規則的文檔中描述,以提高索引:
我想這個事做具有在啓動時打開插座。然而10〜13秒需要很長的時間。有沒有人遇到過這種行爲,有人有一個想法來加快這一點?
編輯: 所以想貼在這裏的建議,並嘗試其他的事情後,我終於找到了解決辦法。實際上有兩個問題:
1)當我開始在同一時間觀測過查詢的放緩發生。由於數據量非常大,因此需要很長時間才能完成這些觀察呼叫。這在timeprofiler中也是可見的,你會發現此時的CPU負載非常巨大。
2)我發現更麻煩的是設置FIRDatabase.database()。persistenceEnabled = true顯着增加了查詢的回調時間。在全新安裝應用程序並從Firebase獲取數據時,速度非常快。但是響應時間會增加每次的火力地堡數據庫會寫更多的數據到磁盤,這是在每個請求10毫秒增加。這樣,應用程序最終需要10秒才能完成對數據庫的請求。我們注意到我們的Android應用程序也有同樣的行爲。這裏唯一的解決方案是完全禁用數據庫的持久性。根據數據庫的大小
感謝您的回答。看到這是一款製作應用程序,它有點難以改變,但我會研究它。你有一個想法,爲什麼最初的搜索可能會很慢,但隨後的搜索真的很快?如果這會是一個問題,我希望所有的搜索都很慢。 –
也許它是索引?不確定。 –