【发布时间】: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