2013-03-21 203 views
3

我必须提供一个解决方案,用户可以上传文件,并且它们必须与metadata一起存储,这可能会变得非常大。存储大文件的最佳数据库解决方案

必须控制对这些文件的访问,所以他们希望我只将它们存储在DB BLOB s中,但是我担心PostgreSQL将不会正确处理它。

我的第一个想法是使用一些NoSQL数据库解决方案,但我找不到任何可以替代一个好的RDBMS和优雅地将文件存储在一起。然后,我想只将这些文件保存在HD的某个地方,WebServer将不会为它们提供服务,将它们命名为它们的表ID,并将它们加载到RAM中并使用适当的内容类型打印它们。

任何人都可以为我提供更好的解决方案吗?

+0

请定义“非常大” - 如最大文件大小,平均文件大小和预期文件数(或至少是整个数据集的总大小)。 – mvp 2013-03-22 07:57:06

+0

假设从上传到WebServer的用户接收到的PDF,ODT和其他文档。随着时间的推移,存储文件的数量将不断增长,如果需要删除旧文件,用户将不会感到满意。 – Hikari 2013-03-23 02:34:32

回答

1

我有要求存储许多图像(与一些元数据),并允许控制访问他们,这是我所做的。

To the cloud

我保存在亚马逊S3的图像文件。我的本地数据库将元数据与文件的S3位置保存为一列。当经过身份验证和授权的用户需要查看文件时,他们会在我的系统中发现一个URL(身份验证和授权检查发生),然后为该映像生成一个预先签名的到期URL,并将重定向发送回浏览器。然后,浏览器可以在指定的时间内加载图像(如URL中的签名中所指定的那样)。

使用此解决方案,我具有用户级访问资源的权限,并且不必存储它们作为BLOB或类似随着时间的推移可能会变得笨重的东西。我也不使用我的带宽将文件流式传输到客户端,并为他们获得便宜且冗余的存储。显然,这个解决方案的适用性将取决于您希望存储的二进制文件的性质以及您对亚马逊的信任程度。如果出现故障并且有人从我的系统看到一张他们不应该看到的图像,这个世界就不会结束。因人而异。

+0

有趣,但我不能将它存储在别处,它必须留在我的服务器。我打算打开它并打印,用一些HTTP标头设置它的名称和内容类型。 – Hikari 2013-03-22 02:06:47

相关问题