gpt4 book ai didi

java - Kryo 序列化库 : is it used in production?

转载 作者:IT老高 更新时间:2023-10-28 20:51:50 24 4
gpt4 key购买 nike

Kryo是一个非常新颖有趣的 Java 序列化库,也是 thrift-protobuf 中最快的库之一基准。如果您使用过 Kryo,它是否已经成熟到可以在生产代码中试用?

更新(2010 年 10 月 27 日):我们正在使用 Kryo,但尚未投入生产。有关详细信息,请参阅下面的答案。

更新(2011 年 3 月 9 日):更新到最新的 Jackson 和 Kryo 库表明 Jackson 的二进制 Smile 序列化非常具有竞争力。

最佳答案

我会尝试回答我自己的问题(Kyro 还是很新!)。

我们使用 Restlet framework 实现了一组大约 120 种不同的 Web 服务。 .这些由通常构建在基于 ReSTLet 的客户端库之上的 Web 服务客户端使用。服务器和客户端之间来回发送的表示包括 XML(使用 XStream serialization library)、JSON(使用 Jackson)、XHTML、Java Object Serialization ,截至昨天,Kryo .因此,我们可以进行一些可靠的并排比较。

Kryo 1.0.1 似乎相当稳定。一旦我真正阅读了如何使用 API,我发现唯一真正的问题是默认的 java.util.Date 序列化程序似乎将日期扭曲到过去几个月。我只需要提供我自己的覆盖:

kryo.register(Date.class, 
new SimpleSerializer<Date>() {
@Override public void write (ByteBuffer b, Date d) { b.putLong(d.getTime()); }
@Override public Date read (ByteBuffer b) { return new Date(b.getLong()); }
});

但这是迄今为止我发现的唯一可能的问题。我们有一组具有 String、Float、Integer、Long、Date、Boolean 和 List 字段的 JavaBean。

这里有一些粗略的基准。首先,我对描述一个电视节目的对象层次结构进行了 100,000 次序列化和反序列化(即,对其进行了 100,000 次深拷贝)。速度是:

XStream XML:                 360/sec
Java Object Serialization: 1,570/sec
Jackson JSON: 5,000/sec
Kryo: 8,100/sec

接下来,我还序列化了一个包含 2000 个电视节目描述和字节数的目录:

XStream XML:         6,837,851 bytes
Jackson JSON: 3,656,654 bytes
Kryo: 1,124,048 bytes

我还发现注册序列化器非常重要:

kryo.register(List.class);
kryo.register(ArrayList.class);
// ...
kryo.register(Program.class);
kryo.register(Catalog.class);
// ...

如果我不这样做,序列化的大小几乎是原来的两倍,而且速度可能会慢 40%。

我们还使用这四种序列化方法中的每一种对多个 Web 服务进行了完整的端到端测试,它们还表明 Kryo 的运行速度比其他方法更快。

总之,Kryo 看起来相当健壮。我将在我们的代码库中继续支持它,随着我们获得它的经验,我希望在更多地方使用它。向 Kryo 团队致敬!

更新(2011 年 3 月 9 日):我终于接受了 @StaxMan 的建议,尝试使用 Jackson 1.6 的二进制“微笑”序列化程序。使用 Jackson 1.6 和 Kryo 1.04,我对稍微不同的电视节目对象层次结构进行了 100,000 次深拷贝(序列化/反序列化):

XStream XML:     429/sec    5,189 bytes
Jackson JSON: 4,474/sec 2,657 bytes
Kryo: 4,539/sec 1,066 bytes
Jackson Smile: 5,040/sec 1,689 bytes

此测试与宏观测试不匹配,我在提供许多此类对象的 REST Web 服务中尝试了不同的序列化程序。那里的整体系统吞吐量支持@StaxMan 关于性能的直觉:

Jackson JSON:     92 requests/sec
Jackson Smile 97 requests/sec
Kryo: 108 requests/sec

关于java - Kryo 序列化库 : is it used in production?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com