我在使用预签名 URL 将文件存储到 BackBlaze 并在 PostgreSQL 中跟踪上传的文件引用时遇到了问题。我面临的主要问题是 BackBlaze 在预签名上传完成时没有像 S3 或 minio 这样的事件。如何在 PostgreSQL 中查明文件是否已成功上传并将其标记为已上传。请问有人能给我一个高层次的想法来实现这个吗?另外,我提前使用了 Backblaze 的 s3 兼容性 API
提前感谢您的帮助。
现有系统依赖于客户端发送上传完成确认。在某些情况下,这会失败并在 BackBlaze 中留下悬空文件,在 PostgreSQL 中留下孤立记录。
这是一个非常常见的最终一致性问题,最好通过事后清理流程来解决。
这里有两个不同的问题:
如果您需要真正的事务一致性,您将需要一个更昂贵的过程,您需要为数据库服务器端打开一个事务并等待文件上传完成。棘手的部分是重新连接到该事务,这肯定是第二个客户端调用。如果您无法使用上述清理过程来实现最终一致性,我建议您放弃预签名 URL 并在服务器端上传文件,以便可以在数据库事务内上传文件。尝试将两个不同的请求连接到同一连接/事务是可能,但相当困难。