如何有效地存储数十万个文件?

时间:2010-10-19 10:17:45

标签: database file-storage

我正在研究一个需要存储大量文档的系统(PDF,Word文件等)我正在使用Solr / Lucene来搜索从这些文档中提取的重要信息,但我还需要一个地方存储原始文件,以便用户可以打开/下载它们。

我在考虑几种可能性:

  • 文件系统 - 存储1m文档可能不是一个好主意
  • sql数据库 - 但我不需要它的大部分关系功能,因为我只需要存储二进制文档及其id,所以这可能不是最快的解决方案
  • no-sql数据库 - 没有任何expierience与他们相关所以我不确定他们是否也有任何好处,还有很多他们所以我不知道选择哪一个

我正在寻找的存储应该是:

  • scallable
  • 开源(不是至关重要,但很高兴)

您能否建议您认为存储这些文件的最佳方式是什么?

4 个答案:

答案 0 :(得分:5)

文件系统 - 顾名思义 - 经过精心设计和优化,可以高效,可扩展的方式存储大量文件。

答案 1 :(得分:1)

您可以关注Facebook,因为它存储了大量文件(150亿张照片):

  • 他们最初是从商业存储设备提供的NFS共享开始的。
  • 然后他们转移到他们的onw实现http文件服务器Haystack

如果您想了解更多http://www.facebook.com/note.php?note_id=76191543919

,请参阅Facebook说明

关于NFS共享。请记住,出于性能原因,NFS共享通常会限制一个文件夹中的文件数量。 (如果你假设所有最近的文件系统都使用b-tree来存储它们的结构,这可能有点反直觉。)因此,如果你使用像(NetApp)那样的商业NFS共享,你可能需要将文件保存在多个文件夹中。 / p>

如果您的文件有任何ID,则可以这样做。只需将Ascii表示分成几个字符组,并为每个组创建文件夹。 例如,我们对id使用整数,因此id为1234567891的文件存储为存储/ 0012/341/7891。

希望有所帮助。

答案 2 :(得分:0)

在我看来......

我会将压缩到磁盘上的文件(文件系统)存储起来并使用数据库来跟踪它们。

并且如果这是唯一的工作,则可以使用Sqlite。

答案 3 :(得分:0)

文件系统:在考虑大局时,DBMS再次使用文件系统。文件系统专门用于保存文件,因此您可以看到优化(如LukeH所提到的)