首页 > 解决方案 > 如何优化 Firestore 缓存和查询建模

问题描述

我正在制作一个 Moneymanagement-App,用户可以在其中创建每天的转账。

我目前正在主屏幕上列出所有数据。目前这并不重要,因为没有太多数据,但想象一个用户使用该应用数年并跟踪他的所有支出。

我的第一个想法是缓存该用户的所有可用数据,但这会导致太多不必要的读取,因为用户很可能不需要 5 年前的数据。

所以我认为解决方案是只为那个屏幕实现分页。

但 :

用户可以通过选择类别和时间段在另一个屏幕上获取有关他的消费历史的统计信息。目前,我每次更改这些参数时都会对它们进行查询,但这显然也会导致大量不必要的读取。

所以问题是,如果用户选择从 5 年前获取统计信息,那么缓存中将不存在该数据,所以我仍然必须在这段时间内运行查询,然后最终得到该时期的不完整缓存因为我只得到了一些基于查询的数据。

很想听听您对此的看法。你会怎么处理?

标签: firebasefluttergoogle-cloud-firestore

解决方案


一般来说:不要按需从客户端运行聚合查询。而是将聚合数据存储在数据库中,并在写入数据时对其进行更新。

因此,假设您保留了一些年度总计,例如他们在年初和年底的余额,他们当年的总收入和支出,可能按类别细分。这就是您每年可以放入文档中的所有信息。

您将拥有一个结构/users/$uid/totals/$year,然后您可以在该文档的字段中获得总计。每次编写新事务时,都会更新该用户当年的总计文档。

如果您这样做,您只需要阅读总计文档即可显示总计,如果您想显示单个交易,您只需阅读单个交易。

另请参阅:是否可以在 Firestore 中运行聚合查询?


推荐阅读