simdjson/simdjson-java · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
simdjson-java
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):
| Library | Version | Throughput (ops/s) |
|---|---|---|
| simdjson-java (padded) | 0.3.0 | 783.878 |
| simdjson-java | 0.3.0 | 760.426 |
| fastjson2 | 2.0.49 | 308.660 |
| jackson | 2.17.0 | 259.536 |
基于 Schema 的解析器 (SchemaBasedParseAndSelectBenchmark):
| 库 | 版本 | 吞吐量 (ops/s) |
|---|---|---|
| simdjson-java (padded) | 0.3.0 | 1237.432 |
| simdjson-java | 0.3.0 | 1216.891 |
| jsoniter-scala | 2.28.4 | 614.138 |
| fastjson2 | 2.0.49 | 494.362 |
| jackson | 2.17.0 | 339.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.0 | 1842.146 |
| simdjson-java | 0.3.0 | 1765.592 |
| fastjson2 | 2.0.49 | 718.133 |
| jackson | 2.17.0 | 616.617 |
基于 Schema 的解析器 (SchemaBasedParseAndSelectBenchmark):
| 库 | 版本 | 吞吐量 (ops/s) |
|---|---|---|
| simdjson-java (padded) | 0.3.0 | 3164.274 |
| simdjson-java | 0.3.0 | 2990.289 |
| jsoniter-scala | 2.28.4 | 1826.229 |
| fastjson2 | 2.0.49 | 1259.622 |
| jackson | 2.17.0 | 789.030 |
要复现基准测试结果,请执行以下命令:
./gradlew jmh -Pjmh.includes='.*ParseAndSelectBenchmark.*'
基准测试可能需要几分钟。请记住,您需要 Java 18 或更高版本。