【问题标题】:Building a file upload site that scales构建可扩展的文件上传站点
【发布时间】:2011-06-27 22:14:23
【问题描述】:

我正在尝试将文件上传站点构建为一个辅助项目,但我从未构建过任何需要处理此类大量文件的东西。据我所知,存储和检索文件有三个主要选项(请注意,每次上传可以有多个文件,因此,例如,website.com/a23Fc 可能让您下载单个或多个文件,具体取决于关于用户最初上传的数量 - 类似于 imgur.com):

  • 将所有文件粘贴在一个大文件目录中,并使用(关系)数据库来确定哪些文件属于哪些 URL,然后根据该文件返回一个文件名列表。示例:用户加载 website.com/abcde,因此它会在数据库中查询与 abcde 上传相关的所有文件,返回它们的文件名,然后网站输出这些文件。
  • 使用 CouchDB,因为它允许您将文件实际附加到数据库中的各个记录,因此每个 URL/上传都可以是附加文件的数据库记录。例如,用户加载 website.com/abcde,CouchDB 抓取 ID 为 abcde 的文档,抓取该文档所附加的文件,并将其提供给用户。
  • 完全跳过使用数据库,每次上传时,创建一个新目录并将文件粘贴在其中。示例:用户加载 website.com/abcde,站点查找 /files/abcde/ 目录,从那里抓取所有文件,并将它们提供给用户,因此根本不涉及数据库。

其中哪些似乎最具可扩展性?就像我说的,我在这方面的经验很少,所以如果我完全关闭或者如果有明显的第四个选项,我会更愿意接受。在单个目录中包含数千或数百万个文件(即选项 1)似乎不是很聪明,但在一个目录中包含数千或数百万个目录(即选项 3)似乎也好不了多少。

【问题讨论】:

    标签: performance file file-upload couchdb scalability


    【解决方案1】:

    我曾经工作过的一家公司在处理大约 PB 的图像文件时遇到了这个确切的问题。他们的解决方案是使用 Andrew 文件系统(请参阅http://en.wikipedia.org/wiki/Andrew_File_System 了解更多信息)将文件存储在与 URL 结构匹配的目录结构中。这在实践中可以很好地扩展。

    他们还出于应用程序内部的其他原因记录了数据库中文件的存在。

    【讨论】:

      【解决方案2】:

      我推荐您可以在最短的时间内亲自完成的任何解决方案。如果您已经有工作的 CouchDB 原型,那就去吧!面向关系或面向文件系统的解决方案也是如此。

      上市时间比架构更重要,原因有两个:

      1. 这是一个支线项目,您应该尽量走得更远。
      2. 如果该网站变得流行,由于主要目的是文件上传,您可能会在网站的生命周期中至少重建一次核心服务,也许更多。

      【讨论】:

        【解决方案3】:

        如果您打算使用 ASP.NET,这里有一篇文章描述了如何将分布式文件系统用于网络农场http://weblogs.asp.net/owscott/archive/2006/06/07/DFS-for-Webfarm-Usage---Content-Replication-and-Failover.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 2012-09-25
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          • 2010-11-30
          • 2018-08-14
          相关资源
          最近更新 更多