#json #json-path #json-query #query-engine #simd #query #search

rsonpath-lib

由SIMD驱动的闪电般快速的JSONPath查询引擎。rsonpath的核心库。

24个版本 (8个重大更改)

0.9.1 2024年4月3日
0.9.0 2024年3月28日
0.8.7 2024年2月29日
0.8.4 2023年10月30日
0.1.2 2022年11月19日

#306 in 文本处理

每月40次下载
用于 rsonpath

MIT 许可证

740KB
15K SLoC

rsonpath-lib – SIMD驱动的JSONPath库 🚀

Rust docs.rs Book

Crates.io GitHub Release Date GitHub last commit

MSRV License

用于rsonpath的库,这是一个用于查询大规模流数据集的JSONPath引擎。

该库的主要目标是rsonpath CLI工具。请注意,这个API在达到v1.0.0之前是不稳定的。这将会发生(我们有路线图),但我们的开发资源相当有限。欢迎并感谢贡献。

不安全

由于SIMD操作需要使用不安全的代码,该库使用不安全的代码,至少在portable-simd稳定之前是这样。因此,编译后的库不可移植 - 如果你在支持AVX2的平台构建,然后在ARM平台上使用相同的编译代码,它将会崩溃。我们特别小心,不在任何其他地方使用不安全的代码 - 事实上,当没有默认的simd功能编译时,该库使用#[forbid(unsafe_code)]

构建和测试

开发工作流程使用just。使用包含的Justfile。如果检测到环境中没有Cargo,它将自动使用rustup工具为您安装Rust。

just build
just test

架构图

以下是模块交互和接口的简化概述,以及数据如何从用户输入(查询,文档)通过管道流向以生成结果。

Architecture diagram

可选功能

默认启用simd功能,并建议使用项目的性能优势。

arbitrary功能是可选的,并启用arbitrary依赖项,该依赖项为查询结构体提供了Arbitrary的实现。

依赖项

显示直接依赖项。

cargo tree --package rsonpath-lib --edges normal --depth 1
rsonpath-lib v0.9.1 (/home/mat/src/rsonpath/crates/rsonpath-lib)
├── arbitrary v1.3.2
├── cfg-if v1.0.0
├── log v0.4.21
├── memmap2 v0.9.4
├── nom v7.1.3
├── rsonpath-syntax v0.3.1 (/home/mat/src/rsonpath/crates/rsonpath-syntax)
├── smallvec v1.13.2
├── static_assertions v1.1.0
├── thiserror v1.0.58
└── vector-map v1.0.1

理由

  • cfg-if - 用于支持SIMD和非SIMD版本。
  • memchr - 快速的SIMD化子字符串搜索,用于快速跳转到标签。
  • memmap2 - 通过内存映射快速读取源文件,而不是缓冲区复制。
  • nom - 用于解析器实现。
  • replace_with - 在切换分类器时安全地处理内部分类器状态。
  • smallvec - 对于小型栈性能至关重要。
  • static_assertions - 通过在编译时验证一些常量假设提供额外的可靠性。
  • thiserror - 习惯性的Error实现。
  • vector_map - 在查询编译器中使用,可显著提高性能。

依赖项

~2.8–4MB
~65K SLoC