我正在制作一个消息应用程序。我想建立一个类似What's应用程序的后端。所以我希望数据库(firestore和storage(能起到缓冲区的作用,即它只保存数据,直到感兴趣的用户读取消息/文件。我怎样才能聪明地做到这一点?
我有两个想法:
-
使用每小时删除一次消息的frebase云功能。但这给我带来了两个问题:如果聊天桶有数千个,这个功能要做多少工作?即使功能扩展,它将如何与其他与它做同样工作的人协调?此外,我如何告诉它只有在阅读后才能删除消息?
-
我可能会使用的方法是:每条消息都有一个发送时间戳。当用户读取消息时,它同时对时间戳<=现在。问题是,每个读数都对应一个消去。它贵吗?它慢吗?此外,如果消息包含对存储的引用(如音频(,我也必须删除它。
有人有更好的策略吗?提前谢谢。
Firestore中没有内置任何功能可以在读取文档时自动删除文档,因此您必须自己在应用程序逻辑中实现这一功能。
最常见的方法是:
-
定期运行一个清理过程,根据每个文档中的时间戳删除过时的内容。您通常会使用计划的云功能来运行此功能,因为这允许您控制运行多少(以及多久(清理进程。由于您在这里使用时间戳进行查询,因此您阅读的文档数量(因此您支付的文档数量(与您需要删除的文档数量完全相同。
-
对文档实现生存时间,在一定时间段后自动删除文档。您可以使用云任务,这意味着您的云功能会为每个需要删除的文档触发。这为您节省了对该文档的阅读,但增加了添加Cloud Taskjs的复杂性。Doug Stevenson写了一篇很棒的博客文章:如何安排云功能在未来使用云任务运行(构建Firestore文档TTL(