如何基于lastRefreshTime高效更新Firestore中的用户最后活跃日期
实现方案参考
很多开发者都实现过同类需求,比每日全量批量检查更高效的方案是触发式更新,能把写入、读取次数降到最低:
- 核心触发逻辑:在每次校验用户ID令牌的环节同步检查活跃时间
不管是自有后端还是Firebase Cloud Function,每次处理需要用户鉴权的请求时,直接取出用户元数据的lastRefreshTime字段,和Firestore的users表中存储的用户最后活跃日期比对,只有前者时间更新时才执行写入操作。
这个时机对应真实的用户活跃行为:用户打开应用、调用接口、刷新登录态时才会触发检查,完全不需要主动扫描全表,99%的无效读操作都可以省去。 - 追加防抖逻辑进一步降低写入次数
如果你的业务只需要统计到天粒度的活跃数据,可以设置至少间隔24小时才允许更新一次用户的活跃日期,即使用户单日多次触发鉴权,也只会执行1次写入,写入量还能再降一个量级。 - 低频率批量补全做兜底
针对长期没有触发鉴权请求的僵尸用户,可以每1-3个月跑一次小范围批量任务,仅筛选上次活跃时间超过30天的用户做检查补全,资源消耗远低于每日全量扫描。
原每日全量批量方案的缺陷:用户量达到万级以上时,全表扫描的读成本很高,且绝大多数用户的当日活跃日期没有变更,超过90%的读取、比较操作都是无效消耗。
内容的提问来源于stack exchange,提问作者MadMac
相关产品推荐
相关产品推荐

