我正在编写一个在线文本编辑器。我想允许用户将内联图像和视频添加到文档中。我正在努力以可靠的方式实现这一点。
当前基础设施:
S3
)电流:
localStorage
中,因此刷新时不会丢失。S3
(或同等内容)时会显示加载指示器S3
它们的 URL。问题
S3
中将会出现未被任何文档引用的孤立文件。S3
中删除某些内容。由于您无法跨两个完全不同的服务执行事务,因此可以想象这样一种情况:postgres 删除成功,但 S3
删除失败,从而创建更多孤立对象。尝试解决方案
localStorage
中,并在保存文档时将它们全部提交。这样可以解决问题,但是localStorage
限制在5-10mb,太小了。S3
的引用,并将其与存储在 S3
中的对象交叉引用以查找孤立对象,并自动删除这些对象。收割者守护进程可以工作,但感觉就像是黑客攻击。我真的不想管理一个全新的服务只是为了存储一些文件。有一个更好的方法吗?行业标准是什么?
如果重要的话,我正在使用 React+Typescript,并且文本编辑器是基于 DraftJS 构建的。
这是我遇到的同一问题的解决方案。
首先,一些一般规则:
数据库存储有关对象的以下信息:
只要有上传时间戳且没有删除时间戳,该对象就可以使用。
它有效地经历以下状态:
数据库:不存在。对象存储:不存在。
创作:
分配 ID。
添加下载时间戳。
该对象已从对象存储中删除。这是纯粹的清理,因为数据库已经考虑要删除的对象。