Cloud Firestore缓存机制下删除操作运行逻辑及多客户端同步解决方案问询
解决方案:增量同步+定时清理墓碑机制
完全满足你的缓存、多端同步、存储空间释放需求,不需要对现有业务逻辑做过度修改,也不需要提前合并大文档这类过早优化操作:
核心架构调整步骤
- 新增两类辅助数据结构
- 为每个用户单独维护1个
user_sync_meta私有文档,仅存储2个字段:latest_tombstone_clear_time(最近一次清理删除标记的时间戳)、last_sync_version(全局同步版本号,也可直接用时间戳代替) - 新增
tombstones用户私有子集合,所有删除操作生成的墓碑记录仅存在该集合中,每条墓碑仅保留deleted_doc_id(被删除的原文档ID)、delete_time(删除操作时间戳)两个字段,单条记录体积远小于1KB
- 删除操作逻辑调整
用户触发删除时,先在tombstones集合写入对应墓碑记录,再直接删除原业务文档,不需要给原文档加deleted软删字段,原文档的存储空间会被立即释放。 - 同步逻辑调整
所有客户端启动同步前,先比对本地存储的last_full_sync_time和服务端user_sync_meta中的latest_tombstone_clear_time:
- 若本地
last_full_sync_time<latest_tombstone_clear_time:说明本地缓存可能包含已经被永久清理的删除记录,直接拉取当前用户的全量业务文档覆盖本地缓存,同步完成后更新本地last_full_sync_time为当前时间 - 若本地
last_full_sync_time>=latest_tombstone_clear_time:走增量同步,拉取两类数据:- 业务集合中
last_modified大于本地上次同步时间的新增/更新文档 tombstones集合中delete_time大于本地上次同步时间的墓碑记录,拿到后直接删除本地缓存中对应ID的文档即可
- 业务集合中
- 墓碑定期清理逻辑
在服务端配置定时运行的云函数,执行周期可设置为30/90天(可根据你的用户活跃特性调整),每次运行时:
- 清理所有用户
tombstones集合中delete_time早于当前时间减去运行周期的墓碑记录 - 更新对应用户
user_sync_meta中的latest_tombstone_clear_time为当前运行时间
适配性验证
完全匹配你的业务需求:
- 离线缓存能力不受影响:本地始终保留用户全量历史记录,离线状态可正常读写,不影响统计计算逻辑
- 同步效率高:99%的活跃用户每次打开应用仅走增量同步,仅超过清理周期未登录的用户才需要执行一次全量同步,单用户1万条记录全量拉取体积不足10MB,完全无性能压力
- 存储空间完全释放:原业务文档删除后立即释放空间,墓碑记录仅保留最多一个清理周期,不会永久占用服务端存储
冲突处理补充
多端同时操作同一条记录时,直接使用Firestore原生事务校验last_modified时间即可,冲突时默认取最新版本的操作结果,符合时间记录类产品的使用逻辑。
内容的提问来源于stack exchange,提问作者Lionel Foxcroft
相关产品推荐
相关产品推荐

