2016-11-23 11 views
0

私は、ユーザーの場所を使用し、URLに郵便番号を含むウェブリクエストを実行するアプリを開発していました。これはかなり速く、通常1-3秒かかる。私はアプリを公開しようとしていたが、利用規約を読み、自分のアプリで自分のサービスを利用することができなかった。私は77k行の郵便番号のスプレッドシートをダウンロードし、それをJSONに変換してFirebaseにアップロードしました。私は現在、私のアプリのFirebaseに郵便番号を検索するように問い合わせていますが、今は約10-15秒かかります。次のように私のコードは次のとおりです。次のようにFirebaseを最も効率的に照会する方法iOS

func firebaseSearch(zipCode: String) { 
    let conditionRef = FIRDatabase.database().reference().child("locations") 

    let query = conditionRef.queryOrderedByChild("zip").queryEqualToValue(zipCode) 

    query.observeEventType(.Value, withBlock: { snapshot in 

     for child in snapshot.children { 
      print(child.value["state"]) 

     } 

    }) 

    } 

マイfirebaseが構成されています

  • "場所"
    • "1"
      • ジップ: "12345"
      • 状態:「XX」
    • "2"
      • ジップ: "12345"
      • 状態: "XX" は

私は私がするFirebaseを構築する方法を考えることを試みました状態を親にするなど、子エントリを内部に持つなど、より効率的です。私はすべてのエントリーを郵便番号としてアップロードしたいと思っていました。しかし、私のスプレッドシートには重複したコードが非常に多くあり、firebaseは重複を許さないことを知っています。 firebaseを照会するより効率的な方法はありますか?最初の郵便番号から始まるエントリ番号(現在は1から77kまで)を作成した後、郵便番号から+/-値をクエリし、その結果をフィルタリングしましたか?私の唯一の恐怖は、最後の郵便番号を見ると、エントリ番号は実際の郵便番号から約20キロ離れていることです。私はヒント/提案をありがとう、ありがとう!

答えて

0

Firebaseはデータを入れ子にすることを避けることを推奨しています。私が見る限り、データはある場所でフェッチするとすべての子ノードも取得されるため、構造が整っています。あなたのアプリケーションにあなたのデータをどのように表示しますか?

最初に25個のアイテムを照会してから次の25個をロードするなどのページ分割を利用できますか?

query.limitToLast(25).observeEventType(.Value, withBlock: { snapshot in ... 
+0

ありがとうございます!ページネーションはどのように使用しますか?私はlimitToLastが最後の25のエントリだけを使用したと思った?私はfirebaseで新しいですので、私はあまり確信していません。再度、感謝します! – JD2017

+0

私はこのページを見て、ページング(http://stackoverflow.com/questions/37144030/how-do-you-properly-order-data-from-firebase-chronologically)を参考にすることをお勧めします。 – waseefakhtar

関連する問題