firebase - 如何优化 Firestore 缓存和查询建模
问题描述
我正在制作一个 Moneymanagement-App,用户可以在其中创建每天的转账。
我目前正在主屏幕上列出所有数据。目前这并不重要,因为没有太多数据,但想象一个用户使用该应用数年并跟踪他的所有支出。
我的第一个想法是缓存该用户的所有可用数据,但这会导致太多不必要的读取,因为用户很可能不需要 5 年前的数据。
所以我认为解决方案是只为那个屏幕实现分页。
但 :
用户可以通过选择类别和时间段在另一个屏幕上获取有关他的消费历史的统计信息。目前,我每次更改这些参数时都会对它们进行查询,但这显然也会导致大量不必要的读取。
所以问题是,如果用户选择从 5 年前获取统计信息,那么缓存中将不存在该数据,所以我仍然必须在这段时间内运行查询,然后最终得到该时期的不完整缓存因为我只得到了一些基于查询的数据。
很想听听您对此的看法。你会怎么处理?
解决方案
一般来说:不要按需从客户端运行聚合查询。而是将聚合数据存储在数据库中,并在写入数据时对其进行更新。
因此,假设您保留了一些年度总计,例如他们在年初和年底的余额,他们当年的总收入和支出,可能按类别细分。这就是您每年可以放入文档中的所有信息。
您将拥有一个结构/users/$uid/totals/$year
,然后您可以在该文档的字段中获得总计。每次编写新事务时,都会更新该用户当年的总计文档。
如果您这样做,您只需要阅读总计文档即可显示总计,如果您想显示单个交易,您只需阅读单个交易。
推荐阅读
- javascript - 实现一个函数,它接受 2 个整数并返回它们之间(包括)它们之间的每个数字的总和
- google-ads-api - AW API 的查询生成器?
- r - 如何通过 tibble 列表循环脚本并将它们加入一个 tibble?
- javascript - 使用计时器在节点中随时间增加变量值
- html - 具有最大宽度的移动响应表
- android - Android Studio 首次安装和默认设置。“构建您的第一个应用程序”指南在首次运行时失败
- javascript - 使用 Graph API 获取用户信息返回错误
- angular - Angular GET 返回 Object 而不是 Array
- stripe-payments - Stripe API,根据位置本地化产品价格
- arraylist - 用户在数组列表中输入 10 次