2016-10-18 6 views
1

私はエントリとしての分散MAPを使用してHazelcastアプリケーションを実装しています。私JsonNodeSerializerしかしHazelcast、Kryo、JsonNodeシリアライザ

private final ObjectReader jsonNodeReader; 
private final ObjectWriter jsonNodeWriter; 

@Override 
public void write(ObjectDataOutput out, JsonNode jsonNode) 
     throws IOException { 
    out.write(jsonNodeWriter.writeValueAsBytes(jsonNode)); 
} 

@Override 
public JsonNode read(ObjectDataInput in) 
     throws IOException { 
    return jsonNodeReader.readTree(in); 
} 

以下のようにのように見える、私はいくつかのスペースを節約し、パフォーマンスを向上させるためにJsonNodeReader /ライターを使用しないようにKryoを使用していました。

私はKryoを使ってみましたが、引数なしのコンストラクタがないので、JsonNode/ObjectNodeを読み取ることができません。

@Override 
public void write(ObjectDataOutput out, JsonNode jsonNode) 
     throws IOException { 
    Kryo kryo = KRYO_THREAD_LOCAL.get(); 
    Output output = new Output((OutputStream) out); 
    kryo.writeObject(output, jsonNode); 
    output.flush(); 

    //out.write(jsonNodeWriter.writeValueAsBytes(jsonNode)); 
} 

@Trace(dispatcher = true) 
@Override 
public JsonNode read(ObjectDataInput in) 
     throws IOException { 
    InputStream inputStream = (InputStream) in; 
    Input input = new Input(inputStream); 
    Kryo kryo = KRYO_THREAD_LOCAL.get(); 
    return kryo.readObject(input, ObjectNode.class); 
    // return jsonNodeReader.readTree(in); 
} 

JsonNodeReader/Writerを使用する私のアプローチが最適であるか、Kryoを使用することで解決策が改善されるかどうかはわかりません。

私の目標は、省スペースとパフォーマンスの向上です。 正しい方向に私を置くことをお勧めします。 ありがとう

答えて

2

実際にkryoがこれらのJSONノードを書き込めるかどうかはわかりません。私は複数の可能なオプションがあると思う:

  • 場合は、コンストラクタのパラメータ

  • でJsonNodeインスタンスを再作成することができるよりも、あなたがkryoに滞在、それはあなたが別の値としてオブジェクトを読み、書くべきこととにかく独立した値を書くつもりなら、ObjectDataOutputに値を直接書き込んでObjectDataInputを使って値を書きたいかもしれません。

  • 私のpovからは、ジャクソンを使うのが一番良い方法です。CBORデータフォーマットこれはバイナリで、非常に簡潔で無意味ですCTLYジャクソンのために利用可能 - (https://github.com/FasterXML/jackson-dataformats-binary/tree/master/cbor)、加えて、あなたはスキーマレスを失うことはありませんJSONの動的な性質

+1

すべてのあなたの助けには、noctariusありがとうございます。私の事CBORは私の要求に応えることができるでしょう – phoenix

2

@noctariusによって良い点や提案に加えて、別のバイナリJSONの代替がCBOR別にそこの笑顔と呼ばれます。同じバイナリdataformatsモジュールから見つかり:POJOを使用した場合Kryoは最高の作品:

https://github.com/FasterXML/jackson-dataformats-binary

あなたのケースでは私があれば、いつあなたがJSONツリー(または一般的なツリーモデル)を扱っているKryoの使用は理にかなっているとは思いません構造の正確な知識を最大限に活用することができます。ツリーモデルには名前を含める必要があり、Kryo、Avro、Protobuf、およびThriftのようなフォーマットのサイズメリットを排除します。

+0

ありがとうStaxMan。私はスマイルを見てみましょう。 – phoenix

関連する問題