Hazelcast,Kryo,JsonNode序列化器

凤凰

我正在实现使用分布式MAP作为条目的Hazelcast应用程序。我的JsonNodeSerializer如下图所示

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);
}

但是,我想使用Kryo来避免使用JsonNodeReader / Writer来节省空间并提高性能。

我尝试使用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是否会使我的解决方案更好。

我的目标是节省空间并提高性能。欢迎任何建议使我朝正确的方向发展。谢谢

夜莺

不知道kryo是否真的能够写那些JSON节点。我认为有多种可能的选择:

  • 您将继续使用kryo,但这意味着您应该将对象读取和写入为单独的值,而不是可以使用构造函数参数重新创建JsonNode实例。

  • 如果您仍然要编写独立的值,则可能需要将这些值直接写入ObjectDataOutput并使用ObjectDataInput读取它

  • 从我的观点来看,最好的方法是使用Jackson-您可能想看看CBOR数据格式,该格式是二进制的,非常简洁,可直接用于Jackson-此外,您不会松散JSON的无模式,动态特性(https://github.com/FasterXML/jackson-dataformats-binary/tree/master/cbor

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Apache Flink Kryo序列化器-ClassNotFoundException

来自分类Dev

使用Kryo进行集合序列化

来自分类Dev

Kryo序列化拒绝注册课程

来自分类Dev

使用Kryo进行集合序列化

来自分类Dev

在Kryo中反序列化LongMap

来自分类Dev

如何在Apache Spark中向Kryo序列化器注册类?

来自分类Dev

如何在Apache Spark中向Kryo序列化器注册类?

来自分类Dev

Hazelcast序列化嵌套对象

来自分类Dev

使用Kryo序列化任意Java对象(获取IllegalAccessError)

来自分类Dev

Spark Kryo:注册自定义序列化程序

来自分类Dev

ProtoBuf字段的Spark,Kryo序列化问题

来自分类Dev

如何使用Kryo序列化Joda-Time的LocalDate

来自分类Dev

无法迭代使用Kryo序列化的Scala列表

来自分类Dev

使用Kryo和Spark序列化Cassandra表

来自分类Dev

Kryo:反序列化该类的旧版本

来自分类Dev

Spark作业中的Kryo序列化错误

来自分类Dev

Kryo反序列化问题:枚举的序数值无效

来自分类Dev

ProtoBuf 字段中的集合的 Kryo 序列化问题

来自分类Dev

Java序列化与Kryo序列化的优缺点是什么?

来自分类Dev

hazelcast dataSerializable-序列化对象数组

来自分类Dev

hazelcast dataSerializable-序列化对象数组

来自分类Dev

Hazelcast便携式序列化-处理null属性

来自分类Dev

由于序列化程序覆盖,Hazelcast实例启动失败

来自分类Dev

序列化器:获取实体的序列化组

来自分类Dev

从DRF序列化器返回序列化的JSON

来自分类Dev

序列化器:获取实体的序列化组

来自分类Dev

json 序列化序列化器实例

来自分类Dev

ServiceStack.Text序列化器作为默认序列化器/反序列化器

来自分类Dev

ServiceStack.Text序列化器作为默认序列化器/反序列化器

Related 相关文章

热门标签

归档