2016-11-11 11 views
0

特定のWebサイトのhtmlをインデックス化してディスクにプルダウンするので、htmlのかなりのフラットファイルがあります。私はそれからhtmlを取ってデータを抽出し、必要なデータを含むjsonファイルを生成します。私は構造で多数のhtmlファイルを処理してデータを抽出するフラットテキストファイル用に最適なストレージメカニズム

/pages/website.com/index_date/sectionofsite/afile.jsonこの

/pages/website.com/index_date/sectionofsite/afile.html のようなものに終わる

私はjsonを生成するために再処理する必要があるかもしれないので、元のhtmlを維持する必要があります。問題は今私がギフトと平らなhtmlファイルのギグを持っているということです。

私はhtmlファイルを問題なく圧縮できますが、別の値を抽出するか、バグを修正するためにすべてを再処理する必要があることがあります。私は、HTMLを圧縮した場合、私は一連のファイルを再処理した場合に、問題がある、私は

  1. する必要があるだろうHTMLに
  2. 抽出データを解凍し、JSONを生成します。
  3. htmlを圧縮してzipに戻します。

現実には、トンとファイルがたくさんある場合、それは非常に遅いです。私はmongodb(とzlib圧縮を使ったWiredTiger Storage Engine)を、本質的なテキストでありバイナリではなくhtmlを格納するための可能な解決策と見ていましたが、mongo dbは多くのプレーンhtmlテキストでクラッシュし続けました。私はPHPライブラリは大きなバグだと思う。

プレーンテキストファイルを保存するにはファイルシステム以外の方法が必要ですが、高速アクセスする方法があります。記憶機構がプレーンテキストファイルを圧縮することが望ましいであろう。誰かが同じような問題に遭遇し、どのように解決したのか不思議です。

答えて

1

まず、HTMLとJSONは非常によく圧縮されるので、それらを圧縮して保存する必要があります。

zipではなく、gzipを使用します。 zipはアーカイバですが、gzipは1つのストリームのみを圧縮するためです。 すべてプログラミング言語には、圧縮されていないかのようにgzipファイルを読み書きする機能があります。例えば。 Pythonでは、openの代わりにgzip.openを使用するか、またはJavaでGZipInputStreamとラップします。

次に、埋め込みデータベースを調べることができます。 MongoDBは遅いので使用しないでください。例えば圧縮されたデータを格納するサイトごとに1つのSQLiteファイル。サーバ(つまりPostgreSQLまたはMongoDB)を使用することは、複数のプロセスが同じファイルで作業している場合にのみ有益です。この並行性が必要でない限り、組み込みデータベースは(データを送信しないため)はるかに高速です。 SQL機能が必要ない場合、BerkeleyDBなどのライブラリはさらに小さくなります。

しかし、最終的にファイルシステムもデータベースです。特に悪いことではありませんが、何百万ものエントリ用に設計されておらず、名前 - >データ検索のみをサポートしています。しかし、ほとんどのファイルシステムはブロックを使用して格納するので、どのファイルも複数のブロックを使用します。あなたのデータがはるかに小さい場合でも、8キロバイトのディスク。組み込みデータベースが役立つのは、このような状況です。また、ブロックを使用しますが、ブロックサイズを小さく設定して無駄を減らすことができます。

関連する問題