firebase - Firebase Firestore 和存储:每次读取数据时如何删除数据?
问题描述
我正在制作一个消息传递应用程序。我想构建一个类似于 What's app 的后端。所以我希望数据库(firestore 和 storage)用作缓冲区,即它只保留数据,直到感兴趣的用户阅读消息/文件。我怎样才能聪明地做到这一点?
我有两个想法:
使用 frebase 云功能,每小时删除一次消息。但这给我带来了两个问题:如果聊天桶有数千个,这个函数要做多少工作?即使该功能向外扩展,它如何与其他与它做同样工作的人协调?另外,我如何告诉它仅在已阅读消息时才删除消息?
我可能会使用一个:每条消息都有一个发送时间戳。当用户阅读消息时,它同时对时间戳 <= NOW 的所有消息发起删除请求。问题是每个读数都对应一个消除。这个很贵吗?慢吗?此外,如果消息包含对存储的引用(例如音频),我也必须删除它。
有人有更好的策略吗?提前致谢。
解决方案
Firestore 中没有内置功能可以在读取文档时自动删除它们,因此您必须自己在应用程序逻辑中实现这一点。
最常见的方法是:
定期运行清理过程,根据每个文档中的时间戳删除过时的内容。您通常会使用计划的 Cloud Function运行它,因为它允许您控制运行多少(以及多久)清理进程。由于您在此处使用时间戳进行查询,因此您阅读的文档数量(因此您支付的费用)与您需要删除的文档数量完全相同。
对文档实施生存时间,在特定时间段后自动删除它们。您可以为此使用 Cloud Tasks,这意味着您的 Cloud Function 会针对需要删除的每个单独文档触发。这样可以节省您阅读该文档的时间,但会增加添加 Cloud Taskjs 的复杂性。道格·史蒂文森(Doug Stevenson)为此写了一篇很棒的博文:如何安排一个云函数在未来使用云任务运行(构建一个 Firestore 文档 TTL)
推荐阅读
- php - Stripe 没有显示这样的令牌:tok_xxxxxxx 用于目的地费用
- django - Django如何在模板中做model1.model2_set.all()?
- php - 命令拒绝、允许、拒绝来自 IP 不阻止 IP 地址,不工作
- ios - SwiftUI NavigationLink 会自动弹出,这是出乎意料的
- mongodb-java - 设置更新提示以使用索引
- javascript - 反应上下文 API
- assembly - 显示所需指令扩展的 x86 反汇编程序
- python - 带有“quad”和“args”的积分 - 杨氏双缝干涉仪
- python - youtube api 的最新视频
- c++ - C++ IDE 不会推断/自动完成模板类中 std::array 下标表达式的成员访问