存储下载文件的最佳方法是什么?

时间:2009-08-30 20:01:20

标签: c# caching filesystems webpage flat-file

抱歉标题不好。

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

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

当我请求页面时,在XML文件上使用XPath查找URL,如果有条目,则返回文件路径。

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

所以我正在寻找更好的方法。

我在想:

  • 每个XML文件。域(包括子域)。但我觉得这可能很麻烦。
  • 使用SVN。我刚测试过它,但我没有大型存储库的经验。执行svn为每次下载添加“路径到文件”,并在完成后提交。
  • 创建一个自定义文件系统,然后我可以包含我想要的所有内容,例如。 POST数据。
  • 从URL生成文件名并以某种方式展平查询字符串,但操作系统可能会拒绝大的查询字符串。如果我将它与标题保持一致,我仍然需要跟踪映射到每个不同查询字符串的多个文件。麻烦。而且我也不希望它执行得太慢。

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

如果我遵循目录/文件方法,理论上我可以在它之间添加一个层,因此它可以动态使用DotNetZip。但话又说回来,查询字符串。

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

我还想要的是能够保存这些文件的历史记录,因此本地文件不会被覆盖,然后我可以选择我想要的版本(按日期)。这就是我尝试SVN的原因。

2 个答案:

答案 0 :(得分:0)

我建议使用关系数据库或版本控制系统。

您可能希望使用SQL Server 2008的新FILESTREAM功能将文件本身存储在数据库中。

答案 1 :(得分:0)

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

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

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