2016-04-22 78 views
0

我在Swift中構建了一個應用程序,用戶(可以發佈他們在街上見到的事件的位置,每個事件的生命週期爲45分鐘,然後它不會在地圖上顯示。該閾值改進GeoFire查詢性能 - Firebase

我建我的Json樹像這樣(地點和事件共享相同的ID - 在這裏沒有代表):

firebaseapp { 
    locations { 
    g 
    l { 
     0: "latitude" 
     1: "longitude" 
    } 
    } 
    events { 
    timestamp: "UTC timestamp" 
    description: "my description" 
    user: "id of user" 
    } 
    users { 
    // User data 
    } 
} 

我查詢對應的區域顯示在屏幕上的所有位置,然後我查詢不到45分鐘前發生的事件,我這樣做:

regionQuery = geoFire.queryWithRegion(mapView.region) 
regionQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 

// I query my events based on the key here 

}) 

這個方法的問題是,對於一個特定的區域,我查詢過去發生的事件的所有位置(可以是一個LOT),然後我查詢那些發生少於45分鐘的事件之前使用tradionnal Firebase查詢。

有沒有更好的解決方案,我的問題,因爲恐怕我會很快穿越帶寬的閾值,如果每次用戶移動地圖,顯示的區域的所有位置都加載...

回答

2

剛剛從「歷史的地點」分裂「最近的位置」:

recent_locations 
    g 
     l { 
     0: "latitude" 
     1: "longitude" 
     } 
historic_locations 
    g 
     l { 
     0: "latitude" 
     1: "longitude" 
     } 

現在你可以運行任何針對最近位置或歷史位置地理查詢。

+0

嗨,弗蘭克,謝謝你的回答!有沒有辦法將最近到歷史服務器端的位置與Firebase轉移?或者我應該做客戶端? – Viro

+0

沒有「移動」API。除非你有非常不尋常的情況,否則不應該需要。複製/粘貼/刪除對於大多數JSON大小來說足夠快。 –

+0

對,我要在客戶端編寫一些邏輯將位置從一個分支移動到另一個分支。再次感謝弗蘭克 – Viro