2016-04-22 11 views
0

私はSwiftのどこにユーザーがいるのかを知るためのアプリケーションをビルドしています(各イベントの有効期間は45分です。 。その閾値GeoFireのクエリパフォーマンスを改善する - Firebase

私はこの(場所やイベントが同じIDを共有する - ここでは示されていない)のような私のJSONツリーを構築しました:それから、私は画面上に表示領域に対応するすべての場所を照会

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クエリを使用しています。

ユーザーがマップを移動するたびに、表示されている領域のすべての場所がロードされる場合、私は帯域幅のしきい値をかなり早く超えてしまうので、私の問題の解決策はありますか?

今、あなたは、最近の場所や歴史的な場所のいずれかに対して地理クエリを実行することができます

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

答えて

2

ただ「歴史的な場所」から「最近の場所」を分割します。

+0

こんにちはフランク、あなたの答えをありがとう! Firebaseを使用して、最近のサーバー側から歴史的なサーバー側に場所を移動する方法はありますか?それとも、私はそれをクライアントサイドで行うべきですか? – Viro

+0

「移動」APIはありません。あなたが非常に珍しい場合を除いて、それは必要ではありません。コピー/ペースト/削除は、ほとんどのJSONサイズで十分高速です。 –

+0

そうですね、私はクライアント側でいくつかのロジックを書いて1つのブランチからもう1つのブランチに場所を移動します。再度ありがとうフランク – Viro

関連する問題