ITADN
simdjson/simdjson-java
simdjson/simdjson-java · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

simdjson-java

Build Status

simdjson 的 Java 版本 - 一个使用 SIMD 指令的 JSON 解析器, 基于 Geoff Langdale 和 Daniel Lemire 的论文 每秒解析千兆字节 JSON

代码示例

DOM 解析器

byte[] json = loadTwitterJson();

SimdJsonParser parser = new SimdJsonParser();
JsonValue jsonValue = parser.parse(json, json.length);
Iterator<JsonValue> tweets = jsonValue.get("statuses").arrayIterator();
while (tweets.hasNext()) {
    JsonValue tweet = tweets.next();
    JsonValue user = tweet.get("user");
    if (user.get("default_profile").asBoolean()) {
        System.out.println(user.get("screen_name").asString());
    }
}

基于架构的解析器

byte[] json = loadTwitterJson();

SimdJsonParser parser = new SimdJsonParser();
SimdJsonTwitter twitter = simdJsonParser.parse(buffer, buffer.length, SimdJsonTwitter.class);
for (SimdJsonStatus status : twitter.statuses()) {
    SimdJsonUser user = status.user();
    if (user.default_profile()) {
        System.out.println(user.screen_name());
    }
}

record SimdJsonUser(boolean default_profile, String screen_name) {
}

record SimdJsonStatus(SimdJsonUser user) {
}

record SimdJsonTwitter(List<SimdJsonStatus> statuses) {
}

安装

该库可在 Maven Central Repository 中获取。 要在项目中引入它,请将以下依赖项添加到 build.gradle 文件中:

implementation("org.simdjson:simdjson-java:0.4.0")

或添加到 pom.xml 文件中:

<dependency>
    <groupId>org.simdjson</groupId>
    <artifactId>simdjson-java</artifactId>
    <version>0.4.0</version>
</dependency>

请记住指定所需的版本。

请注意,simdjson-java 遵循 SemVer 规范,这意味着,例如,主版本号为零表示处于初始开发阶段,因此不应认为该库的 API 是稳定的。

我们要求 Java 24 或更高版本。

基准测试

要运行 JMH 基准测试,请执行以下命令:

./gradlew jmh

测试

要运行测试,请执行以下命令:

./gradlew test

性能

本节展示了作为 Java 库可用的不同 JSON 解析器的性能对比。基准测试使用了 twitter.json 数据集,其目标是测量解析并查找所有使用默认资料的唯一用户的吞吐量(ops/s)。

256 位向量

环境:

  • CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
  • OS: Ubuntu 24.04 LTS, kernel 6.8.0-1008-aws
  • Java: OpenJDK 64-Bit Server VM (build 21.0.3+9-Ubuntu-1ubuntu1, mixed mode, sharing)

DOM 解析器 (ParseAndSelectBenchmark):

LibraryVersionThroughput (ops/s)
simdjson-java (padded)0.3.0783.878
simdjson-java0.3.0760.426
fastjson22.0.49308.660
jackson2.17.0259.536

基于 Schema 的解析器 (SchemaBasedParseAndSelectBenchmark):

版本吞吐量 (ops/s)
simdjson-java (padded)0.3.01237.432
simdjson-java0.3.01216.891
jsoniter-scala2.28.4614.138
fastjson22.0.49494.362
jackson2.17.0339.904

512 位向量

环境:

  • CPU: Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
  • OS: Ubuntu 24.04 LTS, kernel 6.8.0-1008-aws
  • Java: OpenJDK 64-Bit Server VM (build 21.0.3+9-Ubuntu-1ubuntu1, mixed mode, sharing)

DOM 解析器 (ParseAndSelectBenchmark):

版本吞吐量 (ops/s)
simdjson-java (padded)0.3.01842.146
simdjson-java0.3.01765.592
fastjson22.0.49718.133
jackson2.17.0616.617

基于 Schema 的解析器 (SchemaBasedParseAndSelectBenchmark):

版本吞吐量 (ops/s)
simdjson-java (padded)0.3.03164.274
simdjson-java0.3.02990.289
jsoniter-scala2.28.41826.229
fastjson22.0.491259.622
jackson2.17.0789.030

要复现基准测试结果,请执行以下命令:

./gradlew jmh -Pjmh.includes='.*ParseAndSelectBenchmark.*'

基准测试可能需要几分钟。请记住,您需要 Java 18 或更高版本。