2016-11-23 3 views
0

Я работал над приложением, которое будет использовать местоположение пользователя и выполнять веб-запрос с их почтовым индексом в URL-адресе. Это было довольно быстро, занимая обычно 1-3 секунды. Я собирался опубликовать приложение, но прочитал условия использования и не смог использовать их сервис с моим приложением. С тех пор я загрузил таблицу индексов размером в 77 тыс. Zip-кодов, преобразовал ее в 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-chronological), поскольку это помогло мне, а также , – waseefakhtar

Смежные вопросы