我想问你的意见和建议。 在我的应用程序中,我需要存储从用户上传的文件以提供对数据库的导入 - 它可以是XML或excel文件(.xlsx),我猜最大文件大小约为每个文件500kB。 由于导入到数据库,需要存储文件,这不是立即完成的,也是因为备份。 我考虑了数千(万)用户的情况。
场景 - 一个用户可以将许多文件上传到多个类别。这意味着用户可以将file_1上传到类别1,将file_2上传到category_2,也可以将file_3上传到category_2_1(category_2的子类别)。
通常,存在某种类别树,用户可以将许多文件上传到多个节点。
由于导入应用程序,文件名将始终包含: user_code_category_code_timestamp
我的问题是,我不知道这是存储这些文件的最佳方式。
我的意思是最好的方式 - 必须有导入应用程序,它将列出类别和相关用户的相关文件。正如我上面所写,有很多方法,所以我有点困惑。 我还应该考虑什么?文件系统限制?
希望你能理解问题。
谢谢。
答案 0 :(得分:1)
您使用某种框架吗?最好的情况是你使用插件。
存储文件的标准基本解决方案是为所有文件(例如图像)提供一个目录。保存文件时,您更改文件的名称,以便它们不会在目录中重复。您将所有其他数据保存在数据库表中。
从该基础 - 您可以根据业务逻辑改进和更改解决方案。 您可能希望限制对文件的访问,如果需要浏览它们,可能需要将它们放在树目录中。 等等...
答案 1 :(得分:1)
感谢您的提问!在网上很难找到答案,但就我而言,我的图像/ pdfs / files / etc可能有10k。似乎使用散列并将其保存到一个位置目录是理想的选择,并且使其变得简单得多。
需要考虑的有用事情:
1.添加一些其他元数据(您可以在S3存储桶中执行此操作)
2.我将确保您可以选择调整图像的大小(如果相关),例如?w=200&h=200
。
3.也许保存一个文件名,如果用户下载它可以显示该文件名,这样就不会给他们一些奇怪的哈希值。
4.如果您基于当前时间以外的哈希值进行保存,则可以生成非重复的哈希值。
5.尝试一次查看所有文件会降低性能,但是当您的应用基于端点一次仅请求一个文件时,这不成问题。