写点什么

Jackson 创始人 Tatu Saloranta 回应 JSON 基准测试

  • 2014-05-19
  • 本文字数:1801 字

    阅读完需:约 6 分钟

上周,InfoQ 报道了 Groovy 2.3 的 JSON 解析器比之前的版本快了很多。当写那篇文章时,我们发了封邮件给 Jackson JSON 处理器的创始人 Tatu Saloranta 。我们想听听他对 Rick Hightower 报道的 Groovy 和 Boon 提供了 JVM 上最快的 JSON 解析器有什么看法。

InfoQ:你觉得那些基准测试是否准确?

Tatu Saloranta:在一个非常低的水平,我认为测试方法是一致的。JMH 是个好框架,使用适当的迭代计数等,结果是可以重复的。

我认为在某些或者很多测试中,Boon 和 Groovy 是有可能比 Jackson 更快的,但我确实对这种极端的声明表示怀疑,特别是这些挑选的特定测试和 / 或测试用例。

我的关注主要包括三个方面,都列在下一个问题的回答中。

此外,只是为了确认,我看到的是 GitHub 上的测试。我认为有很多的衍生工具,也许我的一些意见可能不太适用。

InfoQ:你认为这些基准测试是否反映了真实世界的行为?

TS:真实世界的行为和实际使用情况。我认为他们可能代表了使用情况的一小部分。说穿了,我觉得他们倾向于强调“好的例子”。我注意到三个方面:

  1. 输入源。最常被引用的测试都从 Java 字符串开始。字符串很少被当作输入源,因为它们是 JVM 构造,所有外部的输入都是字节流。单元测试中使用字符串,或者难道框架(或平台,也许 Groovy 这样做?)只公开字符串。对于写操作也是同样如此。这主要因为两件事情:(a)Jackson 对字节流或文件存储进行了深度优化,因为这是 REST 服务经常用的;(b)Boon 非常积极地优化字符串的处理,特别是使用 sun.misc.Unsafe 去访问和修改 String 类提供的底层的 char[]。因此,使用这些较少见,并且确实是 Boon 有明显优势(无可否认,这是更快的字符串)的用例作为使用源,看似有点可疑。
  2. 处理 / 访问风格:“无类型的(Untyped)”,处理 Map(而不是 POJO)的 List。这第二个方面虽然没那么可疑,但对我来说很奇怪,更不要说只对 List-of-Map 对象读和写,而不是真正的 POJO。所有现代的 JVM REST 框架都关注于 POJO,尽管有些也允许使用“无类型的”。不同的用户有不同的偏好;所以我认为只测试一种,或者测试两种,都是合法的,但这应该记录在案。
  3. 懒构建测试没有访问和校验数据。Boon 有不少面向输入懒处理的优化。对于只访问很小的数据子集的用例,这是有帮助的。但这儿的问题是性能测试没有做任何数据访问,事实上,解析器可能返回任何对象,而测试可能没有真正注意到这点。所以我觉得这些测试碰巧让懒处理得到了优化,正因为此,它们不代表你真的能得到这些优化。

也许我该重新整理一下上面所说的,这些测试似乎没有使用实际有效的使用模式,说得好听点是在做作。它们只读 / 写 JSON,但不使用它。我明白从某种角度来说这是有道理的,尽量不增加处理的开销,但不幸的是,由于不同的取舍,它歪曲了结果。所以当用户使用,例如 JAX-RS 风格的 REST 处理,InputStream 的所有 JSON 数据都绑定到 POJO;以及反方向的从其它 POJO 到 OutputStream,性能体验将与基准测试的结果完全不同。

另一方面,如果使用“无类型的”对象,至少代码要做某种形式的遍历;并且,如果同一对象要用于双向传递,同样要修改。

在 Boon 的例子中,叠置(Overlay)的使用(对原始输入进行索引,以便能够提取数据),以及 Map 的懒构造,隐藏了实际将遇到的真实开销。并且如果字符串用于源 / 目标,那么就存在编码 / 解码开销(Jackson 和 Boon 之间有区别,Jackson 这一步更重),这进一步降低了 Jackson 端到端的相对效率。

InfoQ:你有计划让 Jackson 将来更快吗?或者它已经“足够快”了?

TS:在这点上,我会做些小事情,但我没有大计划去关注性能。我希望能做一些研究(基准测试是有用的!)降低读取字符串源的消耗; Jackson Afterburner 模块已经有一些积极的优化。但这很可能是渐进式的。

自从最早的 1.x 版本开始,性能从来就不是第一目标;尽管我确实想保持开销适中或较低,但有更重要的事情要关注:易用性、支持其它格式(XML、CSV、CBOR 和 Smile)、惯例和模块化数据类型处理库(Joda,Guava)等等。

我想这应该是公平的,在正确的场景下,我觉得它非常接近于“足够快”。

InfoQ:谢谢你的坦诚回应!

TS:没问题,谢谢你发掘出这个。我认为总的来说 Boon 对 JSON 是有用的;特别是 Groovy 取得现代高性能支持,这非常棒。但我真的希望两者的比较是苹果对苹果的比较,同时声明应该有证据支持。:)

原文链接: Jackson Founder, Tatu Saloranta, responds to JSON Benchmarks

2014-05-19 02:214097

评论

发布
暂无评论
发现更多内容

做到真正0丢失、0重复:Apache SeaTunnel 实现万亿级数据一致性全解密

白鲸开源

开源 数据同步 数据集成 Apache SeaTunnel

Linux 基金会报告解读:开源 AI 重塑经济格局,有人失业,有人涨薪!

白鲸开源

人工智能 开源 AI 观点 开源AI

开源 vs 付费:代练系统护航小程序源码的选择指南与性价比对比

DUOKE七七

MySQL uniapp vue2 thinkphp6

Confidential AI 实践:基于 Anolis OS 部署 Intel TDX 保护的 Qwen 模型

OpenAnolis小助手

AI 操作系统 龙蜥社区 Anolis OS Confidential AI

Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 龙蜥操作系统 Anolis OS

龙蜥大讲堂智算技术专场直播预告:围绕基于Anolis OS DCU部署、异构计算等主题分享

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥大讲堂

Apache DolphinScheduler保姆级实操指南:云原生任务调度实战

白鲸开源

大数据 开源 云原生 Apache DolphinScheduler 任务调度

10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案

阿里云大数据AI技术

人工智能 大数据 数据分析 数据处理 智能驾驶

FCPX插件-165个社交媒体字幕条标题图形排版介绍宣传包装动画

晨光熹微

KWDB多模分布式数据库助力共享打印机物联网IoT最佳实践落地,实现高效存储与查询时序数据

KaiwuDB

FCPX插件-60个社交网络图形图标动画 mModules Essentials

晨光熹微

技术分享 | EC2多网卡与多IP配置

伊克罗德信息科技

三级缓存解决了循环依赖问题?别被骗了,一级缓存就够了!

电子尖叫食人鱼

Java spring 缓存

Databend 产品月报(2025年6月)

Databend

龙蜥社区第 34 次运营委员会会议圆满结束

OpenAnolis小助手

操作系统 龙蜥生态

DolphinScheduler+Sqoop 入门避坑:一文搞定数据同步常见异常

白鲸开源

大数据 sqoop 开源 Apache DolphinScheduler 任务调度

主键分布不均 SeaTunnel CDC 同步卡顿多日?这样优化终于通了!

白鲸开源

开源 主键 CDC Apache SeaTunnel CDC同步

人工智能丨让你的AI更聪明,这7个开源MCP项目不要错过

测试人

低代码:JNPF+AI,解锁“智”造未来

引迈信息

低代码×数智化OA:企业级敏捷办公的技术融合路径与实践验证

不在线第一只蜗牛

你的救星来了!电脑硬盘坏了数据恢复教程,帮你找回重要资料

阿拉灯神丁

EasyRecovery 数据恢复软件 硬盘数据恢复 硬盘故障 数据丢失

Cloud Kernel SIG季度动态:ANCK 5.10/6.6新版本发布,主线适配Sw8A&RSIC-V新平台

OpenAnolis小助手

操作系统 龙蜥sig

冲刺IPO!摩尔线程以硬核技术叩响科创板大门

新消费日报

Sentieon 项目文章 | 通过深度测序对血浆中游离线粒体 DNA 进行定量和表征

INSVAST

生信分析 Sentieon 变异检测 生物信息分析服务 精准医疗

MySQL行锁功过:怎么减少行锁对性能的影响?

量贩潮汐·WholesaleTide

MySQL 数据库

架构师必备:业务扩展模式选型

量贩潮汐·WholesaleTide

架构 业务

以数据赋能高校:全域数据集成平台的应用场景

谷云科技RestCloud

数据处理 ETL 数据集成

Apache SeaTunnel × Hive 深度集成指南:原理、配置与实践

白鲸开源

hive 开源 数据同步 数据集成 Apache SeaTunnel

FCPX插件-82个音频元素信息图表图形动画 Infographic Elements Audio Motion

晨光熹微

上海证券携手非凸科技,共筑开放共赢的私募服务新生态

非凸科技

FCPX模板-褶皱纸张元素定格动画图文快闪开场片头Stop Mption Opener

晨光熹微

Jackson创始人Tatu Saloranta回应JSON基准测试_语言 & 开发_Matt Raible_InfoQ精选文章