【发布时间】:2016-06-16 20:16:49
【问题描述】:
您好,我有一个关于最新 Hazecast 版本和序列化的问题。让我们有以下类:
class Customer implements DataSerializeable {
List<Address> adresses;
CustomerDetails details;
}
Address 和 CustomerDetails 类都实现了 DataSerializeable。我们目前对它们进行序列化的方式是:
public void writeData(ObjectDataOutput out) throws IOException {
out.writeObject(address);
out.writeObject(details);
}
在网上的一些例子中,我看到他们序列化同一个类的方式是:
public void writeData(ObjectDataOutput out) throws IOException {
address.writeData(out);
short size = details.size();
out.writeShort(size);
for (CustomerDetail detail: details) {
detail.writeData(out);
}
}
我对几百万条记录进行了一些性能测试,但无法观察到性能的显着差异。
推荐的嵌套对象序列化方法是什么。有人可以就最新的 Hazelcast 3.6 版发表评论吗?
谢谢
【问题讨论】:
-
上一个示例中缺少一行,其中在详细信息之前写出了大小。除此之外,您的第一个代码 sn-p 执行特定于 Collection 的序列化,最后一个代码执行 Collection-type-agnostic。如果你有 f.e.来自休眠的惰性列表你不想序列化列表对象,而是元素。
-
感谢指正。我想知道在性能方面是否有任何明显的差异。我的印象是,虽然调用了 out.writeObject(),但 Hazelcast 正在查找与示例 2 相比应该使用的序列化程序。我们可以说性能上可能存在明显差异,或者我们正在谈论微不足道的差异。在我的例子中,我们没有使用惰性集合。我们应该使用示例一还是示例二。谢谢。
-
如果要保留集合的实现类型则使用#1,否则使用#2;性能应该会稍微好一点(但它可能会在 I/O 噪音中丢失,为什么不设置测试以使用自己的数据配置文件进行尝试?)。
-
我在上面的评论中说我已经设置了一个测试,它没有测量性能差异,但我的电脑只有 8gb 的内存。我不确定在更大的范围内结果是否会有所不同。
标签: java performance serialization hazelcast