2015-04-26 6 views
1

В целях простоты позволяет сказать, что у меня есть схема Firebase, которая выглядит примерно так:Нужно ли мне тянуть полный список пользователей, чтобы получить случайного пользователя из Firebase?

  • USERLIST
    • User1
      • Возраст - 22
      • Пол - М
    • user2
      • Возраст - 26
      • Пол - М
    • User3
      • Возраст - 20
      • Пол - F

Скажем, я хотел, чтобы получить случайный пользователь из этого списка в пределах желаемого возрастного диапазона и желаемого пола. Сейчас я вынимаю полный список пользователей, отфильтровывая тех, кто не соответствует моим предпочтениям, а затем получает случайного пользователя из тех, которые соответствуют на стороне клиента. Это отлично работает для небольшого числа пользователей, но что, если у меня 10 000 пользователей?

Есть ли способ сделать это, не загружая полный список ВСЕХ пользователей, так как это очень большая пропускная способность. С реляционной базой данных было бы просто просто использовать предложение where, но, поскольку я не могу с Firebase, я предполагаю, что мне нужно сделать все клиентское, что означает получение полного списка данных. Каков правильный подход к минимизации полосы пропускания?

ответ

2

Одно решение (и, я думаю, в настоящее время единственное решение) состоит в том, чтобы сохранить отдельный список в вашей базе данных только с именами пользователей («User1», «User2», ...). Затем, чтобы получить случайного пользователя, извлеките список имен пользователей и возьмите из него случайный элемент. Затем извлеките соответствующего полного пользователя из полного списка пользователей.

+0

Это действительно то, что я буду делать. Единственное различие заключается в том, что я создавал бы отдельные списки (в Firebase мы часто называем их * indexex *) для каждого фильтра. Таким образом, список «menList» с только идентификаторами мужчин, «womenList» с только женщинами и, если необходимо, «teenList» с только подростками и т. Д. –

+1

Хотя это жизнеспособное решение, есть ли планы по внедрению более простых способов делать что-то вроде получения только первого уровня пути Firebase? Мне кажется негибким требовать создания новых структур баз данных каждый раз, когда вы хотите просматривать данные по-другому. – Marein

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

  • Нет связанных вопросов^_^