Можно ли выполнять запросы агрегации в Firestore? - PullRequest
0 голосов
/ 29 октября 2019

Stack:

Ionic
Nodejs/Express
Cloud Firestore

Мне поручено написать приложение, которое принимает даты в формате «день», с балансом на этот день и отображать эти данные на графике с помощью Chart.js. Есть кнопки интервалов, которые позволяют вам переключаться между «днем», «неделей» и «месяцем», которые должны группировать даты в соответствующие интервалы.

В настоящее время это работает нормально, используя 1 коллекцию. «дни» и «недели» работают, но как только мы получаем «месяц» с большими объемами данных, Firestore убивает себя в моем бэкэнде. Объем данных, которые он пытается опросить, слишком велик. В настоящее время я выполняю агрегацию для «недель» и «месяцев» в бэкэнде, используя «дни».

Единственная документация по агрегации, которую я мог найти в документах, была: https://firebase.google.com/docs/firestore/solutions/aggregation, которая не даетВ результате он хранится в коллекции, которая мне не помогает. Приложение может изменить баланс в одну дату, что вызывает эффект ряби в балансах после факта - поэтому я должен сгенерировать значения при изменении интервала.

Имеется ли что-то подобное, или я застрял в создании3 отдельные коллекции, дни / недели / месяцы и опрос нужной коллекции?

1 Ответ

1 голос
/ 29 октября 2019

Из документов , которые вы связали:

Облачное хранилище файлов не поддерживает собственные запросы агрегации.

Так что это в значительной степени отвечает на вопрос вВаш заголовок: Firestore не имеет встроенной возможности запуска агрегатов на сервере базы данных.

Распространенные решения:

  1. Запуск агрегатов на клиенте

    Похоже, это то, что вы делаете сейчас: вы загружаете все данные для внутреннего использования, а затем агрегируете их на клиенте. Этот подход может хорошо работать для небольших наборов данных, но если вы только отображаете агрегаты на клиенте, вы, вероятно, загружаете гораздо больше данных, чем необходимо. Вот почему вы должны рассмотреть альтернативы, если ваш набор данных может быть большим, который обычно будет (приходить) при использовании Firestore.

  2. Обновлять агрегаты при каждом изменении данных

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

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

  3. Использовать другую базу данных для агрегациизапросы

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

    Типичным примером этого является экспорт данных из Firestore в BigQuery, затем выполнение вычислений в BigQuery и запись результатов обратно в Firestore, чтобы клиенты могли их прочитать. Здесь вы используете оба продукта для достижения наилучших результатов: Firestore для обслуживания данных в масштабе и BigQuery для обработки данных в масштабе.

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