2009-07-28 12 views
5

私は現在、JavaプロジェクトでJSON(gzipで圧縮)を使用しています。何百万ものディスク)。 1行に1つのJSONオブジェクトがあり、JSONオブジェクト内で改行が許可されません。この方法で、ファイル全体を一度に読み取ることなく、ディスクごとにデータをストリーミングできます。高速、コンパクト、ストリーミング、多言語、厳密に型指定されたシリアライズフォーマット

http://www.json.org/java/を使用して)JSONコードを解析すると、生のデータをディスクから取り出したり、解凍したりするよりも大きなオーバーヘッドになります。

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

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

ので、復習のために、それは次のようになります。

  • が強く
  • たStreamable(。つまり、一度RAMにそれをすべてをロードすることなく、ビットによるファイルのビットを読んで)
  • クロスプラットフォームを入力しました(JavaとPHPを含む)
  • 高速
  • 無料(スピーチのように)

ポインタはありますか?

+0

生データをディスクから取り出す方が高速な場合は、どうすればよいですか?なぜJSONが遅いのですか? –

+0

さて、jsonを解析するのは、解凍したり、ディスクからデータを読み込んだりするよりも遅いです。だから何?あなたは何をする必要があるのか​​遅すぎですか?それとも、あなただけのために最適化していますか? – Breton

+0

ブルトン:それはあまりにも遅いので、早すぎる最適化ではありません。 – sanity

答えて

8

は、あなたがGoogleのプロトコルバッファを見てきました?:

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

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

ここで様々なフォーマット間の便利な比較もあります:

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

あなたが倹約やここにも言及した他のいずれかを検討する必要があります。

+0

...と、それを裏づけるGoogleがある。 –

2

あなたは、データファイルの構造は、あなたによく知られているので、それはJSONのスーパーセットですYAML- http://www.yaml.org/

を見てかかることがあります。いくつかの追加のデータ型と、あるデータ構造の一部を別のデータ構造に含む参照を使用する機能をサポートしています。

「十分に速い」とは考えていませんが、libyamlパーサー(C言語で書かれています)はかなりうなずくようです。

+0

YamlはJSONのスーパーセットではありませんが、私はそれが私が知っている最も読みやすい/コンパクト/型付きの形式の1つであることに同意します。 – gizmo

+0

yamlはjsonよりも複雑です。私はほとんどの実装が遅いと思います。 – troelskn

+0

AFAIK、はい、実装はあまり効果がありません。 YAMLは、スピードやシンプルさではなく、やや異なる目標、最大限の表現力などを備えています。 – StaxMan

3

私はJackson

ジャクソンとJSONを解析する非常に良い結果を持っていたがある:

  • ストリーミング(読み込み、書き込み)
  • FAST(他のJava JSONパーサーよりも高速であることが測定およびデータバインダー)
  • 強力な(共通のJDKクラス、Java Beanクラス、コレクション、マップまたは列挙型の完全なデータバインド)
  • ゼロ依存型CY(JDKを越えて他のパッケージに依存しない)は、Javaで書かれた
  • オープンソース(LGPLまたはAL)
  • 完全準拠

JSONプロセッサ(JSONパーサ+ JSONジェネレータ)。基本的なJSON読み取り/書き込み(解析、生成)以外に、完全なOJM(Object/Json Mapper)データバインディング機能だけでなく、完全なノードベースのツリーモデルも提供します。

performanceは他の多くのシリアル化オプションと比較して非常に優れています。

+0

他のものを試す前にジャクソンを使用してください。 json.orgのコードは本番用には適していません。 –

関連する問題