Теоретический вопрос: какая стратегия быстрее? Запрос большого количества документов против запроса меньшего количества документов, а затем загрузка некоторых? - PullRequest
0 голосов
/ 04 сентября 2018

Мне интересно, какова лучшая структура моей базы данных Firestore.

Я хочу создать своего рода менеджера по назначению для сотрудника, чтобы я мог показать каждому сотруднику назначение на определенную дату. Я думал об этих двух вариантах:

  1. Опция:

У каждого сотрудника есть коллекция Appointments, где я сохраняю все предстоящие встречи. Документы о назначении будут иметь столбец date.

Когда я хочу загрузить все встречи на определенную дату, мне придется запросить все встречи к этой дате.

  1. Опция:

У каждого сотрудника есть коллекция Workdays с документами на каждый день. Эти рабочие документы будут иметь столбец date. А затем коллекция с Appointments, где я сохраняю встречи на рабочий день.

Когда я хочу загрузить все встречи, мне нужно запросить у коллекции Workdays правильную дату, а затем загрузить все ее Appointments.

Я ожидаю, что средний рабочий день будет содержать 10-20 встреч. И скажем, я сохраняю встречи на следующие 30 дней. Для варианта 1 мне нужно было бы запросить 300-600 документов до 10-20.

Для варианта 2 у меня будет 30 документов и запросить его для 1 документа. Затем загрузите около 10-20 документов.

Таким образом, в варианте 2 мне нужно будет запрашивать меньше документов, но мне придется подождать, пока запрос не будет завершен, и затем загрузить еще 10-20 документов. В то время как для варианта 1 мне нужно будет запросить больше документов, но как только этот запрос будет завершен, мне больше не нужно загружать документы.

Мне интересно, какой вариант быстрее для моего варианта использования - есть мысли?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Первый вариант довольно прост и определенно подходит для реляционной базы данных. Столбец даты может стать естественным внешним ключом для любой потенциальной таблицы рабочего дня, при условии, что она даже необходима.

Второй вариант более сложный, поскольку существует три варианта данных:

  • Рабочий день не существует
  • Рабочий день существует, но в списке нет встреч
  • Рабочий день существует и имеет назначения

С точки зрения производительности они вряд ли будут сильно отличаться, но если будет существенный разрыв, я бы предпочел вариант 1, чтобы быть более эффективным.

0 голосов
/ 04 сентября 2018

Документы не обязательно являются табличными (столбцовыми). Будьте проще, следуйте их документации, Выберите структуру данных и не задумывайтесь об оптимизации поиска. Оставьте оптимизацию запросов платформе / команде Firebase, поскольку существует несколько подходов к поиску, которые могут быть реализованы в зависимости от типа запрашиваемых данных. Примеры включают источник Wikipedia :

алгоритм Дейкстры, алгоритм Крускала, ближайший сосед алгоритм и алгоритм Прима.

Опять же, при условии, что вы в основном следуете руководству по структуре данных, оптимальный подход к поиску должен быть встроен в платформу Firebase / Firestore и может быть оптимизирован ими, когда это возможно. Одним словом, скорость вычислительной платформы поразит вас. Сосредоточьтесь на задачах более высокого уровня, связанных с вашим конкретным приложением.

0 голосов
/ 04 сентября 2018

Если общее количество документов прочитано в каждом случае одинаково, то более быстрым вариантом будет тот, который уменьшает количество циклов между клиентом и сервером. Таким образом, меньше запросов будет лучше. Общее количество документов в коллекции не сильно повлияет на результаты.

В Firestore производительность запросов масштабируется с размером набора результатов (общее количество прочитанных документов), а не с общим размером коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...