2016-10-18 7 views
1

배포 된 MAP을 항목으로 사용하여 Hazelcast 응용 프로그램을 구현 중입니다.Hazelcast, Kryo, JsonNode Serializer

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을 사용하고 싶었처럼 내 JsonNodeSerializer 보인다.

Kryo를 사용해 보았는데 no-args 생성자가 없으므로 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/라이터가 최적 또는 Kryo 내 솔루션은 더 나은 것 사용하고 사용하는 경우.

저의 목표는 공간을 절약하고 성능을 향상시키는 것입니다. 나에게 올바른 방향을 제시하는 제안을 환영합니다. 감사합니다.

답변

2

사실 kryo가 실제로 이러한 JSON 노드를 작성할 수 있는지는 확실하지 않습니다.

  • 당신은 kryo 함께있어,하지만 당신이 읽고 당신이 생성자와 JsonNode 인스턴스를 다시 할 수있는 것보다, 별도의 값으로 오브젝트를 작성해야 의미가

  • 만약 매개 변수 : 나는 여러 가지 옵션이 있다고 생각 당신은 어쨌든 독립적 인 값을 쓰고 싶다면 ObjectDataOutput에 값을 직접 쓰고 ObjectDataInput을 사용하여 값을 읽을 수 있습니다.

  • 제 생각에는 잭슨을 사용하는 것이 가장 좋지만 CBOR 데이터 형식 어느 것이 2 진법이고, 매우 간결하며 무서운 것이다. 잭슨 ctly 가능합니다 - 당신은 스키마, JSON의 동적 특성 (https://github.com/FasterXML/jackson-dataformats-binary/tree/master/cbor)

    @noctarius하여 좋은 점과 제안뿐만 아니라
+1

모든 도움을 주신 덕분에 noctarius가되었습니다. 나는 CBOR가 나의 요구 사항을 해결할 수있을 것이다. – phoenix

2

을 풀 수 없습니다뿐만 아니라, 다른 바이너리 JSON의 대안은 CBOR는 미소라고 제외하고있다 .

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

가 귀하의 경우에는 당신이 JSON 트리 (또는 일반 트리 모델)을 처리 할 때 경우 Kryo의 사용 말이 생각하지 않는다 : Kryo 가장 POJO를 사용시 작동하는 동일한 바이너리 DataFormats의 모듈에서 찾을 수 구조에 대한 정확한 지식을 최대한 활용할 수 있습니다. 트리 모델에는 Kryo, Avro, Protobuf 및 Thrift와 같은 형식의 크기 이점을 없애기 위해 이름을 포함해야합니다.

+0

감사 StaxMan. 나는 스마일을 살펴볼 것이다. – phoenix