存储大文件的最佳数据库解决方案

3
我必须提供一个解决方案,使用户可以上传文件,并且这些文件必须与一些元数据一起存储,而且可能会变得非常大。
需要控制对这些文件的访问,因此他们要求我只将它们存储在DB的BLOB中,但我担心随着时间的推移,PostgreSQL无法正确处理它们。
我的第一个想法是使用一些NoSQL DB解决方案,但我找不到任何可以取代良好的关系型数据库并优雅地存储文件的解决方案。然后我考虑只是在Web服务器不提供服务的某个地方将这些文件保存在硬盘上,以其表ID命名,然后在RAM中加载它们并使用适当的内容类型打印它们。
有没有人能为我提供更好的解决方案?

请定义“非常大”的含义 - 比如最大文件大小、平均文件大小和预期文件数量(或者至少整个数据集的总大小)。 - mvp
假设从用户上传到Web服务器的PDF、ODT和其他文档。随着时间的推移,存储的文件数量将会增长,如果需要删除旧文件,用户将不会感到满意。 - Hikari
1个回答

1
我需要存储许多图像(带有一些元数据),并允许对它们进行受控访问,以下是我的做法。 将其上传至云端
我将图像文件保存在Amazon S3中。我的本地数据库保存了元数据和文件的S3位置作为一个列。当经过身份验证和授权的用户需要查看文件时,他们会在我的系统中点击一个URL(身份验证和授权检查发生在此处),然后生成一个预签名、过期的URL以获取该图片,并将重定向返回到浏览器。浏览器可以在指定时间内(在URL中的签名中指定)加载图像。
通过这种解决方案,我可以在用户级别上访问资源,并且不必将它们存储为BLOB或其他可能难以管理的内容。我也不使用自己的带宽将文件流式传输到客户端,并获得了便宜而冗余的存储空间。显然,这种解决方案的适用性取决于您要存储的二进制文件的性质以及您对Amazon的信任水平。如果有人看到了他们不应该看到的图像,世界也不会灭亡。您的情况可能有所不同。

有趣,但我不能将它存储在其他地方,它必须留在我的服务器上。我考虑只是打开它并打印,使用一些HTTP头来设置其名称和内容类型。 - Hikari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接