Как масштабировать функцию Firestore, запрашивающую много данных - PullRequest
0 голосов
/ 06 мая 2020

Данные My Firestore структурированы примерно так:

/ races / {raceID} / {distance: value, members: [runnerID, runnerID]}

и / runners / {runnerID } / {totalDistance: value}

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

У меня есть функция, запускаемая для документа гонки onWrite, которая выполняет следующие действия:

  1. Проверяет, есть ли в документе гонки данные
  2. Проверяет, есть ли в документе гонки участников
  3. Получить идентификаторы участников, которых нет в как до, так и после снимков и добавить их в массив
  4. Если расстояние между снимками до и после изменилось, получите все идентификаторы участников в снимке после и добавьте их в тот же массив
  5. Выведите массив
  6. Для каждого идентификатора в массиве:
  7. Запросите коллекцию 'race', используя where ('members', 'array_contains', id), чтобы получить все расы, в которых участвует бегун. участие
  8. Обходите массив гонок, чтобы суммировать значения «дистанции».
  9. Обновите поле «totalDistance» в документе с идентификатором бегуна.

Я обеспокоен тем, что это станет дорогостоящим, когда и количество участников на гонку, и количество гонок на бегуна со временем увеличатся. 1034 * К вашему сведению - причина, по которой я каждый раз пересчитываю общую сумму, заключается в том, что в случае, если в какой-то момент произошла ошибка, я не хочу просто увеличивать / уменьшать общую сумму и сохранять эту ошибку навсегда.

...