2016-04-22 56 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