【问题标题】:Best "architecture" to store lots of files per user on server在服务器上为每个用户存储大量文件的最佳“架构”
【发布时间】:2016-06-12 05:47:59
【问题描述】:

我想征求您的意见和建议。 在我的应用程序中,我需要存储从用户上传的文件以提供对数据库的导入 - 它可以是 XML 或 excel 文件(.xlsx),我猜每个文件的最大文件大小约为 500kB。 由于导入到数据库需要存储文件,这不是立即完成的,也因为备份。 我考虑了数千(万)个用户的场景。

场景 - 一个用户可以将多个文件上传到多个类别。表示用户可以上传file_1到category 1,file_2上传到category_2,也可以上传file_3到category_2_1(category_2的子类)。

一般来说,有某种类别树,用户可以将许多文件上传到许多节点。

由于导入应用程序,文件名将始终包含: user_code_category_code_timestamp

我的问题是,我不知道这是存储这些文件的最佳方式。

  • 我应该每个用户有一个目录 -> 每个类别一个目录 -> 相关文件
  • 我应该每个用户有一个目录 -> 所有用户文件
  • 我应该有一个根目录 -> 所有用户和所有文件
  • ?

我的意思是最好的方式 - 必须有导入应用程序,它将按类别和相关用户列出相关文件。正如我上面写的,有很多方法,所以我有点困惑。 我还应该考虑什么?文件系统限制?

希望你理解问题。

谢谢。

【问题讨论】:

    标签: file server store


    【解决方案1】:

    您是否在使用某种框架?最好的情况是你使用插件。

    存储文件的标准基本解决方案是为所有文件(例如图像)设置一个目录。保存文件时,您更改文件的名称,这样它们就不会在目录中重复。您将所有其他数据保存在数据库表中。

    在此基础上,您可以根据业务逻辑改进和更改解决方案。 您可能希望限制对文件的访问,如果您需要浏览它们,您可能希望将它们放在树目录中。 等等……

    【讨论】:

    • 我对问题的描述可能不准确。只需考虑从用户和应用程序上传的文件进行导入。从 excel 导入的应用程序是用 PHP 编写的,XML 可以用一些插件编写等等 - 我认为该框架对我的问题并不重要。业务逻辑不适用于这种情况 - 我正在解决文件中的数据问题,这些数据被解析并导入数据库。文件名总是唯一的,问题在于如何管理目录和文件。
    • 用户名和子目录的方式有以下缺陷——如果用户名改变了他的名字,或者一个类别的名字改变了——你必须重命名目录。
    • 是的,当然......可以说,用户名或类别也总是用一些代码指定,这是不可编辑的,目录应该用那个代码命名 - 我认为,那里重命名将是最小的问题......
    • 所有文件的一个目录是标准的最佳解决方案。我过去曾实施过这样的解决方案,我为所有文件(业务报告)使用了一个目录。除标准解决方案之外的任何其他解决方案 - 都需要额外的规则和用例。
    【解决方案2】:

    感谢您提出这个问题!很难在网上找到答案,但就我而言,我可能有 10k 的图像/pdfs/文件/等。似乎使用散列并保存到一个位置目录是理想的,并且使它变得不那么复杂。

    有用的思考: 1. 添加一些额外的元数据(您可以在 S3 存储桶中执行此操作) 2. 如果相关,我会确保您可以选择调整图像大小,例如?w=200&h=200。 3. 也许保存一个文件名,如果用户下载它可以显示,这样它就不会给他们一些奇怪的哈希值。 4. 如果您根据当前时间的哈希值保存,您可以生成不重复的哈希值。 5. 尝试一次查看所有文件会损害性能,但是当您的应用基于端点一次只请求一个文件时,这应该不是问题。

    【讨论】:

      猜你喜欢
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多