simdjson

2025-12-11 0 199

simdjson :JSON每秒解析JSON

JSON无处不在互联网。服务器花费大量时间来解析它。我们需要一种新的方法。 simdjson库使用常用的SIMD指令和微相线算法来解析JSON 4倍的速度比Rapidjson快4倍,而现代C ++的JSON速度比JSON快25倍。

  • 快速:超过4倍以上的速度超过常用的生产级JSON解析器
  • 记录破坏功能:以6 GB/s的速度缩小JSON,以13 GB/s验证UTF-8,NDJSON在3.5 GB/s处验证。
  • 简单:一流,易于使用和仔细记录的API。
  • 严格:完整的JSON和UTF-8验证,无损解析。没有妥协的性能。
  • 自动:在运行时选择CPU量的解析器。无需配置。
  • 可靠:从内存分配到错误处理, simdjson的设计避免了惊喜。
  • 同行评审:我们的研究出现在VLDB期刊,软件:实践和经验等场所中。

该库是很棒的现代C ++列表的一部分。

目录

  • 现实世界的用法
  • 快速开始
  • 文档
  • Godbolt
  • 性能结果
  • 软件包
  • simdjson的绑定和端口
  • 关于simdjson
  • 资金
  • 为simdjson做出了贡献
  • 执照

现实世界的用法

  • node.js
  • Clickhouse
  • meta velox
  • Google Pax
  • 米尔维斯
  • QuestDB
  • Clang Build Analyzer
  • Shopify Heapprofiler
  • starrocks
  • 微软鱼店
  • 英特尔PCM
  • 西瓜
  • Apache Doris
  • Dgraph
  • UJRPC
  • fastgltf
  • 广阔的
  • Ada-url
  • Fastgron
  • Wasmedge
  • 朗德
  • GREPTIMEDB

如果您打算在产品中使用simdjson ,请从我们的一个发行版中使用。

快速开始

simdjson库很容易使用单个.H和.CPP文件消耗。

  1. 先决条件:G ++(版本7或更高)或Clang ++(版本6或更高),以及带有命令行壳的64位系统(例如,Linux,MacOS,FreeBSD)。我们还支持Visual Studio和Xcode等编程环境,但需要不同的步骤。 Clang ++的用户可能需要指定C ++版本(例如C ++ -STD = C ++ 17),因为Clang ++倾向于在C ++ 98上默认。

  2. 将simdjson .H和simdjson .CPP与示例文件Twitter.json一起拉到目录中。您可以使用WGET实用程序下载它们:

    simdjson .h https://raw.gith*ub*use*rcontent.com/simdjson/ simdjson /master/singleheader/ simdjson .cpp https://raw.gith*ub*use*rcontent.com/simdjson/ simdjson /master/jsonexamples/twitter.json\”>

    wget https://raw.gith*ub*use*rcontent.com/simdjson/ simdjson /master/singleheader/ simdjson .h https://raw.gith*ub*use*rcontent.com/simdjson/ simdjson /master/singleheader/ simdjson .cpp https://raw.gith*ub*use*rcontent.com/simdjson/ simdjson /master/jsonexamples/twitter.json
    
  3. 创建QuickStart.cpp:

simdjson.h\”
using namespace simdjson ;
int main(void) {
ondemand::parser parser;
padded_string json = padded_string::load(\”twitter.json\”);
ondemand::document tweets = parser.iterate(json);
std::cout << uint64_t(tweets[\”search_metadata\”][\”count\”]) << \” results.\” << std::endl;
}\”>

# include < iostream >
# include \" simdjson .h \"
using namespace simdjson ;
int main ( void ) {
    ondemand::parser parser;
    padded_string json = padded_string::load ( \" twitter.json \" );
    ondemand::document tweets = parser.iterate(json);
    std::cout << uint64_t (tweets[ \" search_metadata \" ][ \" count \" ]) << \" results. \" << std::endl;
}
  1. C ++ -O QuickStart QuickStart.cpp simdjson .cpp
  2. ./quickstart
 100 results.

文档

使用文档可用:

  • 基础知识是如何使用simdjson及其API的概述。
  • 构建器是如何使用simdjson有效编写JSON字符串的概述。
  • 性能显示一些更高级的场景以及如何为他们调整。
  • 实现选择描述了运行时CPU检测以及如何使用它。
  • API包含自动生成的API文档。

Godbolt

一些用户可能希望与编译的组件一起浏览代码。您想查看以下示例列表:

  • simdjson示例具有通过异常处理错误的错误
  • simdjson示例带有错误而没有例外

性能结果

simdjson库的使用三四分之三的说明要比最先进的解析器Rapidjson使用。据我们所知, simdjson是第一个在商品处理器上以千兆字节(GB/s)运行的完全验证的JSON解析器。它可以在单个核心上每秒解析数百万个JSON文档。

下图代表GB/s中的解析速度,用于使用GNU GCC 10编译器(带有-O3标志)在Intel Skylake处理器(3.4 GHz)上解析各种文件。我们将加载和处理数据的基准上的最佳和最快的C ++库进行比较。 simdjson库提供完整的Unicode(UTF-8)验证和确切的数字解析。

simdjson库都提供高速,无论是处理微型文件(例如300个字节)还是较大的文件(例如3MB)。以下图显示了在3.4 GHz Skylake处理器上使用脚本生成的各种尺寸的合成文件的解析速度(GNU GCC 9,-O3)。

我们所有的实验都是可重现的。

对于NDJSON文件,我们的多线解析功能可以超过3 GB/s。

软件包

simdjson的绑定和端口

我们将“绑定”(仅包装C ++代码)和端口区分到另一种编程语言(重新实现所有内容)。

  • Zippyjson: simdjson项目的Swift Bindings。
  • Libpy_ simdjson :使用Libpy的simdjson的高速Python绑定。
  • PY simdjson : simdjson项目的Python Bindings。
  • CY simdjson : simdjson项目的高速Python绑定。
  • simdjson -RS:生锈端口。
  • simdjson -lust:Rust Wrapper(绑定)。
  • simdjson Sharp:.net Core(绑定和完整端口)的C#版本。
  • simdjson _nodejs: simdjson项目的node.js绑定。
  • simdjson _PHP: simdjson项目的PHP绑定。
  • simdjson _ruby: simdjson项目的Ruby Bindings。
  • fast_jsonparser: simdjson项目的Ruby Bindings。
  • simdjson -GO:使用Golang Assembly进行端口。
  • RCPP simdjson :r绑定。
  • simdjson _erlang:erlang绑定。
  • simdjson E:Erlang绑定。
  • Lua- simdjson :Lua Bindings。
  • 爱马仕 – 杰森:哈斯克尔绑定。
  • Zimdjson:Zig Port。
  • Simdjzon:Zig端口。
  • JSON-SIMD:Raku Bindings。
  • json :: simd:perl绑定;功能齐全的JSON模块,该模块使用simdjson进行解码。
  • Gemmajson:基于simdjson Bindings的Nim Json Parser。
  • simdjson -Java:Java端口。

关于simdjson

simdjson库利用现代的微体系结构,与SIMD向量指令并行化,减少分支错误预测以及减少数据依赖性以利用每个CPU的多个执行核心。

我们的默认前端被称为按需,我们写了一篇论文:

  • 约翰·凯泽(John Keizer),丹尼尔·莱米尔(Daniel Lemire),《按需JSON:更好的解析方法》?,软件:练习和经验54(6),2024年。

有些人喜欢阅读第一本(2019年) simdjson论文: simdjson的设计和实施的描述是我们的研究文章:

  • 杰夫·兰代尔(Geoff Langdale),丹尼尔·莱米尔(Daniel Lemire),每秒解析JSON的千兆字节,VLDB Journal 28(6),2019年。

我们有一份有关UTF-8验证的深入论文:

  • 约翰·凯泽(John Keizer),丹尼尔·莱米尔(Daniel Lemire),以每个字节的指令不到一个指令,软件:实践与体验51(5),2021,验证UTF-8。

我们还有一篇非正式的博客文章提供了一些背景和背景。

对于视频倾斜,

(这是最好的选票演讲,我们为此感到自豪。)

资金

这项工作得到了加拿大自然科学和工程研究委员会的支持,该委员会根据RGPIN-2017-03910和RGPIN-2024-03787提供了支持。

为simdjson做出了贡献

前往贡献.md,以获取有关simdjson贡献的信息,以及Hacking.MD以获取有关来源,建筑和建筑/设计的信息。

执照

此代码可根据Apache许可证2.0以及MIT许可证提供。作为用户,您可以选择自己喜欢的许可证。

在Windows下,我们使用Windows/dirent_portable.h文件(在我们的库代码之外)构建一些工具:它在自由(友好的)MIT许可下。

对于不支持C ++ 17的编译器,我们捆绑了按照Boost许可证发布的字符串视图库。像Apache许可证一样,Boost许可证是允许商业再分配的允许许可证。

为了有效的数字序列化,我们将Florian Loitsch用于二进制二进制的Grisu2算法的实现到十进制浮点数。 JSON对现代C ++库进行了稍微修改该实现。 Florian Loitsch的实施和现代C ++的JSON均在MIT许可下提供。

对于运行时派遣,我们使用了根据BSD授权的Pytorch项目中的一些代码。

下载源码

通过命令行克隆项目:

git clone https://github.com/simdjson/simdjson.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 simdjson https://www.zuozi.net/33983.html

Saraff.Twain.NET
上一篇: Saraff.Twain.NET
open webui
下一篇: open webui
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务