处理大量html文件,为平面文本文件提取数据最佳存储机制

时间:2016-11-11 08:21:44

标签: database file data-mining data-manipulation

我索引特定网站的html,并将其下载到磁盘,所以我有一些不同的html平面文件。然后我获取html并从中提取数据并生成包含我需要的数据的json文件。

我最终得到了类似这样的结构

/pages/website.com/index_date/sectionofsite/afile.html /pages/website.com/index_date/sectionofsite/afile.json

我需要保留原始的html,因为我可能需要重新处理它以生成json。现在的问题是我有平板html文件的演出和演出。

我可以压缩html文件没问题,但有时我需要重新处理所有内容以提取另一个值或修复错误。如果我压缩html然后问题是如果我重新处理我需要的一组文件

  1. 解压缩html
  2. 提取数据并生成json。
  3. 将html压缩回zip。
  4. 现实情况是,当你有大量的文件时,这是非常慢的。我看了mongodb(及其带有zlib压缩的WiredTiger存储引擎)作为一种可能的解决方案,用于存储html作为其本质上的文本而不是二进制文件,但是mongo db一直在崩溃,并且有很多简单的html文本。我认为PHP库是一个很大的错误。

    我需要一种除文件系统之外的方法来存储纯文本文件,但有办法快速访问它们。如果存储机制也压缩纯文本文件将是优选的。好奇,如果有人遇到类似的问题,他们是如何解决它的。

1 个答案:

答案 0 :(得分:1)

首先,由于HTML和JSON压缩得很好,你应该将它们压缩存储。

而不是压缩,请使用gzip。因为zip是归档器,而gzip只压缩一个流。 每种编程语言都具有读取和写入gzip文件的功能,就好像它们没有被压缩一样。例如。在python中,您只需使用gzip.open而不是open,或者在Java中使用GZipInputStream包装它。

然后您可能需要查看嵌入式数据库。不要使用MongoDB,因为它很慢。使用例如每个站点一个SQLite文件来存储压缩数据。使用服务器(即PostgreSQL或MongoDB)只有在多个进程处理相同文件时才有用。除非您需要这种并发性,否则嵌入式数据库要快得多(因为它们不会传输数据)。如果您不需要任何SQL功能,那么像BerkeleyDB这样的库就更小了。

但最后,您的文件系统也是一个数据库。不是特别糟糕的,但不是为数百万条目设计的,只支持名称 - >数据查找。但是大多数文件系统使用块来存储,因此任何文件都将使用例如8kb的磁盘,即使您的数据要小得多。嵌入式数据库有助于这些情况。它们也使用块,但您可以将块大小配置为更小以减少浪费。