5

現在、Java プロジェクトで JSON (gzip で圧縮) を使用しています。このプロジェクトでは、多数のオブジェクト (数億) をディスクに格納する必要があります。1 行に 1 つの JSON オブジェクトがあり、JSON オブジェクト内の改行は許可されていません。このようにして、ファイル全体を一度に読み取らなくても、ディスクから行ごとにデータをストリーミングできます。

JSON コードの解析 ( http://www.json.org/java/を使用) は、生データをディスクから取り出したり、圧縮解除したりする (その場で行う) よりも大きなオーバーヘッドであることがわかりました。

理想的には、厳密に型指定されたシリアル化形式で、「このオブジェクト フィールドは文字列のリストです」(たとえば) を指定できます。システムは何を期待するかを認識しているため、すばやく逆シリアル化できます。他の誰かに「タイプ」を与えるだけで、フォーマットを指定することもできます。

また、クロスプラットフォームである必要があります。私は Java を使用していますが、PHP、Python、およびその他の言語を使用している人々と仕事をしています。

したがって、要約すると、次のようになります。

  • 強く型付けされた
  • ストリーミング可能 (つまり、一度にすべてを RAM にロードすることなく、ファイルをビットごとに読み取る)
  • クロスプラットフォーム (Java と PHP を含む)
  • 速い
  • 無料(スピーチのように)

ポインタはありますか?

4

3 に答える 3

8

Google プロトコルのバッファを見たことがありますか?:

http://code.google.com/apis/protocolbuffers/

それらはクロス プラットフォーム (C++、Java、Python) であり、PHP 用のサード パーティのバインディングも備えています。高速で、かなりコンパクトで、強く型付けされています。

ここには、さまざまな形式の便利な比較もあります。

http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Thrift またはここに記載されている他のいずれかを検討することもできます。

于 2009-07-28T02:23:26.033 に答える
2

YAML を見ることができます - http://www.yaml.org/

これは JSON のスーパーセットであるため、データ ファイルの構造はおなじみです。いくつかの追加のデータ型をサポートするだけでなく、あるデータ構造の一部を別のデータ構造に含める参照を使用する機能もサポートしています。

「十分に速い」かどうかはわかりませんが、libyaml パーサー (C で記述) はかなりきびきびしているようです。

于 2009-07-28T02:36:15.140 に答える