在服务器上存储大量文件 - 数据库还是仅仅是文件系统?

时间:2014-01-22 00:25:42

标签: python database web flask

我正在开发一个Web应用程序,需要提供大量用户上传的所有类型的文件。我不确定是否应该将文件完全存储在文件系统中并像这样访问它们,或者将名称或文件本身存储在数据库中。哪个更快,哪个更好?我不知道这可能是愚蠢的,但我对这种类型的应用程序是一个完全的初学者,但是如果我选择去那条路线,怎么可以在文件系统中存储多个具有相同名称的文件?例如,如果两个人上传了不同的文件,都命名为stuff.zip,我怎样才能将它们存储在文件系统中并提供服务呢?对于图像文件,我用缩短的UUID替换文件名,但对于拉链和文档等,我确信用户实际上希望文件保留其原始名称。我是否将文件名存储在数据库中,将磁盘上的文件名更改为唯一的文件名,然后在将文件提供给用户/下载时将其更改回来,还是有更简单的解决方案?我应该使用哪些具体工具的建议?我正在使用Flask进行应用程序。

2 个答案:

答案 0 :(得分:2)

我个人将文件存储在文件系统上,将它们存储在一个本身驻留在文件系统上的数据库中似乎效率低下,除非您想使用任何特定于数据库的功能。

此外,您可以使用文件上的现有实用程序,使用您必须首先提取它们的数据库。例如,gzip实用程序不能直接读取数据库中的文件,但可以在文件系统上读取文件。

对于多个文件的问题,在上传时根据文件的内容计算文件的哈希值。然后根据哈希重命名它,并将文件名哈希映射以及用户ID和上载日期存储在数据库中。这样做的好处是,如果多次上载同一个文件,那么磁盘上只有一个副本。

答案 1 :(得分:1)

如果您正在对文件内容执行全文搜索(通过数据库查询),那么数据库就是您的选择。否则,数据库充当文件系统是一种不必要的负担,也是DBA维护膨胀数据存储的负担。

如果是文件,请将其视为一个并相应地存储。使用智能目录结构(如user / date / file.ext),这样您就可以将文件集中在一起,并轻松移动/删除它们。