Как оптимизировать Firestore Caching и Querymodeling - PullRequest
0 голосов
/ 13 марта 2020

Я создаю приложение Moneymanagement-App, в котором пользователь может создавать переводы для каждого дня.

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

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

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

Но:

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

Таким образом, проблема в том, что если пользователь выбирает получение статистики за 5 лет go, то Данные не будут существовать в кэше, поэтому мне все равно придется выполнить запрос для этого периода времени, а затем в итоге получился неполный кеш того периода, потому что я получил только некоторые данные, основанные на запросе.

Хотелось бы услышать ваши мысли по этому поводу. Как бы вы справились с этим?

1 Ответ

1 голос
/ 13 марта 2020

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

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

У вас будет структура /users/$uid/totals/$year, а затем вы получите итоговые значения в полях этого документа. Каждый раз, когда вы пишете новую транзакцию, вы обновляете итоговый документ для этого пользователя на текущий год.

Если вы сделаете это, вам нужно будет только прочитать итоговый документ, чтобы показать итоги, и вы нужно только читать отдельные транзакции, если вы хотите показать отдельные транзакции.

Также см .: Можно ли выполнять запросы агрегирования в Firestore?

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