2011-02-15 57 views
5

我试图建立一个文件上传网站作为一个侧面项目,我从来没有建立任何需要处理大量这样的文件。据我所知,存储和检索文件有三个主要选项(请注意,每个上传文件可能有多个文件,因此,例如,website.com/a23Fc可能允许您下载单个或多个文件,具体取决于有多少用户最初上传 - 类似imgur.com):建立一个文件上传网站,缩放

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

这些似乎最具扩展性?就像我说的那样,我在这方面的经验很少,所以如果我完全失败了,或者如果有明显的第四种选择,我可以对它敞开大门。在单个目录(即选项1)中有数千或数百万个文件似乎不是很聪明,但是在一个目录(即选项3)中有成千上万的目录似乎不太好。

回答

0

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

时间对市场比建筑更重要的原因有两个:

  1. 这是一个横向项目,你应该尝试相处尽可能远。
  2. 如果该网站变得流行,由于主要目的是文件上传,您可能会重建核心服务至少一次,也许更多,在网站的生命期间。
3

我曾经为一家公司工作过的公司面临着大约1千兆字节的图像文件的确切问题。他们的解决方案是使用Andrew文件系统(请参阅http://en.wikipedia.org/wiki/Andrew_File_System了解更多)将文件存储在与URL结构匹配的目录结构中。这在实践中非常好。

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