【问题标题】:What is the best way to store downloaded files?存储下载文件的最佳方式是什么?
【发布时间】:2010-11-24 04:42:00
【问题描述】:

抱歉标题不好。

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

但是,对于 40k(包括头)文件,XML 现在是 3.5 MB。最近还在看书,添加新条目,保存这个 XML 文件。但现在我把它保存在内存中,每隔一段时间保存一次。

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

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

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

我在想:

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

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

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

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

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

【问题讨论】:

    标签: c# caching filesystems webpage flat-file


    【解决方案1】:

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

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

    【讨论】:

    • MySQL 也有 BLOB 类型,也可以用来在数据库中存储二进制数据。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2017-12-20
      • 2011-05-07
      • 2012-10-03
      相关资源
      最近更新 更多