2009-08-30 122 views
0

对不起,这个不好的名称。什么是存储下载文件的最佳方式?

我正在保存网页。我目前使用1个XML文件作为索引。一个元素包含文件创建日期(UTC),完整URL(包含查询字符串和不包含)。并且头文件在名称相似但附加了特殊扩展名的单独文件中。

然而,在去40K(包括标题)的文件,该XML现在是3.5 MB。最近我还在阅读,添加新的条目,保存这个XML文件。但现在我将它保存在记忆中,并且每隔一段时间保存一次。

当我请求一个页面时,URL被查找在XML文件中使用XPath,如果有一个项目,返回文件路径。

目录结构 。\ www.host.com/ randomFilename.randext

所以我在寻找一种更好的方式。

即时通讯思想:每

  • 一个XML文件。域(包括子域)。但我觉得这可能是一个麻烦。
  • 使用SVN。我只是对它进行了测试,但我没有大型知识库的经验。执行svn为每个下载添加“指向文件的路径”,并在完成时提交。
  • 创建一个自定义文件系统,在那里我可以包括我想要的所有东西,例如。发布数据。
  • 从URL生成一个文件名,并以某种方式压扁查询字符串,但大型querystrings可能会被操作系统拒绝。如果我保留它的标题,我仍然需要跟踪映射到每个不同的查询字符串的多个文件。麻烦。我也不希望它执行得太慢。

多个程序实例将进行读/写操作,在不同的计算机。

如果我按照目录/文件的方法,我在理论上可以增加一个层之间,因此在飞行使用DotNetZip。但是,再次,查询字符串。

我只是在这里寻找方向或经验。

我也希望是保留这些文件的历史记录的功能,所以本地文件不会被覆盖,然后我可以选择哪个版本(按日期)我想要的。这就是为什么我尝试SVN。

回答

0

我会推荐一个关系数据库或版本控制系统。

您可能需要使用SQL Server 2008中的新功能FILESTREAM自己存储的文件在数据库中。

+0

MySQL的BLOB类型也可用于在数据库中存储二进制数据。 – Fiarr 2009-08-30 22:57:23

0

我会使用2个数据存储区,一个用于原始文件,另一个用于索引。

要存储平面文件,我认为Berkeley DB是一个不错的选择,密钥可以通过md5或其他哈希函数生成,也可以压缩文件的内容以节省一些磁盘空间。

对于索引,您可以使用关系数据库或更复杂的文本搜索引擎,如Lucene。

相关问题