我索引特定网站的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然后问题是如果我重新处理我需要的一组文件
现实情况是,当你有大量的文件时,这是非常慢的。我看了mongodb(及其带有zlib压缩的WiredTiger存储引擎)作为一种可能的解决方案,用于存储html作为其本质上的文本而不是二进制文件,但是mongo db一直在崩溃,并且有很多简单的html文本。我认为PHP库是一个很大的错误。
我需要一种除文件系统之外的方法来存储纯文本文件,但有办法快速访问它们。如果存储机制也压缩纯文本文件将是优选的。好奇,如果有人遇到类似的问题,他们是如何解决它的。
答案 0 :(得分:1)
首先,由于HTML和JSON压缩得很好,你应该将它们压缩存储。
而不是压缩,请使用gzip。因为zip是归档器,而gzip只压缩一个流。 每种编程语言都具有读取和写入gzip文件的功能,就好像它们没有被压缩一样。例如。在python中,您只需使用gzip.open
而不是open
,或者在Java中使用GZipInputStream
包装它。
然后您可能需要查看嵌入式数据库。不要使用MongoDB,因为它很慢。使用例如每个站点一个SQLite文件来存储压缩数据。使用服务器(即PostgreSQL或MongoDB)只有在多个进程处理相同文件时才有用。除非您需要这种并发性,否则嵌入式数据库要快得多(因为它们不会传输数据)。如果您不需要任何SQL功能,那么像BerkeleyDB这样的库就更小了。
但最后,您的文件系统也是一个数据库。不是特别糟糕的,但不是为数百万条目设计的,只支持名称 - >数据查找。但是大多数文件系统使用块来存储,因此任何文件都将使用例如8kb的磁盘,即使您的数据要小得多。嵌入式数据库有助于这些情况。它们也使用块,但您可以将块大小配置为更小以减少浪费。