2011-09-14 19 views
2

何百万ものJava POJOをディスクに書き込んでディスクから読み込む必要があり、高速化が必要です。比較的簡単なJava POJOをシリアル化する最速の方法は?

私は、ThriftとGoogle Protocol Bufferで必要と思われる別のテンプレートファイルを定義する必要はありません。むしろ、Javaクラス自体が(Java Serialization、Gson、および他の直列化プロトコルの場合のように)オブジェクトの権威的な仕様であった方が望ましいでしょう。私はここで少しのパフォーマンスが出るかもしれないが、そのokはその桁違いの遅さを提供していないことを認識している。

シリアライズされるクラスは、いくつかの単純なlongフィールドとStringフィールドと、単一のMap(このマップの値はすべてNumbersまたはStringのいずれかです)から構成されます。

誰も私がこれを見なければならないいくつかのライブラリを提案できますか?

+0

ネイティブJavaシリアル化を測定して、それが十分に速くないことを確認しましたか?あなたが持っていた時は何ですか、そしてあなたが望む時は何ですか? –

+0

実際には、それ以上の悪いものはありません。より速い方が良いです。ネイティブのシリアル化はうまくいくかもしれませんが、私はちょうど一般的に理解されているより速いアプローチがあるかどうか疑問に思います。 – sanity

+0

あなたの "それは望ましいだろう..." - 私はその方法(コードファースト)で動作するprotobufの.NETバージョンを持っていますが、Javaはありません。後の読者(protobuf-net参照)に適用される場合に言及してください。 –

答えて

4

最初にJavaシリアル化をテストし、十分に速いかどうかを確認します。 これは内蔵されており、グラフや複数のバージョンを処理する能力があります。

必要があるとわかるまで、代替案を探す理由はありません。

編集:すでに書き込まれたオブジェクトへの参照をルックアップテーブルに埋め込まないために、ObjectStreamをリセットする必要があります。比較的独立したオブジェクトを作成している場合は、 "トップ"オブジェクトごとにリセットするのは問題ではないかもしれませんが、データに複雑な関係がある場合は、JPAなどを試してみることをお勧めします。

+0

単純なオブジェクトの場合。ネイティブシリアル化は十分です。単純な直接的な答え+1。 –

+0

高速なアプローチはたくさんありますが、開発者にとってより複雑になるほど速くなります。あなたの時間も重要です。 ;) –

+0

私のラップトップは100000個のデータオブジェクトを29,85300秒で書きました。各オブジェクトには10​​個の文字列と5個の文字列を含む地図が含まれていました。完全に1 500 000オブジェクトまたはそれ以上。読書はより速く、すべてを読み返すのに5秒かかりました。 – KarlP

関連する問題