加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Simdjson:一个超高速的JSON解析工具

发布时间:2019-03-25 17:45:55 所属栏目:建站 来源:周大涛编译
导读:JSON文档在Internet上无处不在,处事器耗费大量时刻来理会这些文档。我们但愿在举办完全验证(包罗字符编码)时尽也许行使常用的SIMD指令来加快JSON自己的理会。 示意功效 simdjson行使的指令比最先辈的理会器RapidJSON少四分之三,比sajson少百分之五十。

你必要一个像clang或gcc这样的最新编译器。我们提议至少行使GNU GCC / G ++ 7或LLVM clang 6.譬喻,您可以行使brew安装最新的编译器:

  1. brew install gcc@8 

可选:您必要通过配置CC和CXX变量汇报cmake您但愿行使哪个编译器。bash下,你可以用诸如呼吁这样做 export CC=gcc-7 和 export CXX=g++-7 。

构建:在项目存储库中,执行以下操纵:

  1. mkdir build 
  2. cd build 
  3. cmake .. 
  4. make 
  5. make test 

默认环境下,它构建一个共享库(譬喻,Linux上的libsimdjson.so)。

您可以构建一个静态库:

  1. mkdir buildstatic 
  2. cd buildstatic 
  3. cmake -DSIMDJSON_BUILD_STATIC=ON .. 
  4. make 
  5. make test 

在某些环境下,您也许但愿指定编译器,尤其是在体系上的默认编译器太旧的环境下。您可以按以下步调操纵:

  1. brew install gcc@8 
  2. mkdir build 
  3. cd build 
  4. export CXX=g++-8 CC=gcc-8 
  5. cmake .. 
  6. make 
  7. make test 
用法(行使Visual Studio在Windows长举办CMake)

我们假设您有一台平凡的Windows PC,至少包括Visual Studio 2017和支持AVX2的x64处理赏罚器(2013 Intel Haswell或更高版本)。

从GitHub获取simdjson代码,譬喻,行使 GitHub Desktop 克隆它;

安装 CMake 。安装时,请确保 cmake 从呼吁行扣问是否可用。请选择最新版本的cmake;

在simdjson中建设一个子目次,譬喻 VisualStudio;

行使shell,转到这个新建设的目次;

cmake -DCMAKE_GENERATOR_PLATFORM=x64 .. 在 VisualStudio 存储库中键入shell 。(可能,假如要构建DLL,可以行使呼吁行 cmake -DCMAKE_GENERATOR_PLATFORM=x64 -DSIMDJSON_BUILD_STATIC=OFF .. )

最后一个呼吁在新建设的目次中建设了一个Visual Studio办理方案文件(譬喻 simdjson.sln)。在Visual Studio中打开此文件。您此刻应该可以或许构建项目并运行测试。譬喻,在 Solution Explorer 窗口(可从 View 菜单中得到)中,右键单击 ALL_BUILD 并选择 Build 。要测试代码,如故在 Solution Explorer 窗口中,选择 RUN_TESTS 并选择 Build 。

用法(在Windows,Linux和MacOS上行使vcpkg)

Windows,Linux和MacOS上的 vcpkg 用户可以 simdjson 行使他们喜好的shell中的一个呼吁下载和安装。

在Linux和MacOS上:

  1. $ ./vcpkg install simdjson 

将构建并安装 simdjson 为静态库。

在Windows(64位)上:

  1. .vcpkg.exe install simdjson:x64-windows 

将构建并安装 simdjson 为共享库。

  1. .vcpkg.exe install simdjson:x64-windows-static 

将构建并安装 simdjson 为静态库。

这些呼吁还将打印出有关怎样行使MSBuild或基于CMake的项目库的声名。

假如您发明 simdjson 附带的版本 vcpkg 已逾期,请随时通过提交 vcpkg 题目或建设PR 向社区陈诉。

器材

json2json mydoc.json 理会文档,结构模子,然后将功效转储回尺度输出

json2json -d mydoc.json 理会文档,结构模子,,然后将模子(作为磁带)转储到尺度输出。磁带名目在随附文件中描写 tape.md

minify mydoc.json`缩小JSON文档,将功效输出到尺度输出。缩小意味着删除不必要的空格字符。

范畴

我们提供快速理会器。它按照各类规格完全验证输入。理会器构建一个有效的不行变(只读)DOM(文档 – 工具模子),往后可以会见它。

为了简化工程,我们做了一些假设:

我们支持UTF-8(以及ASCII),没有此外(没有拉丁语,没有UTF-16)。我们不以为这是一个真正的限定,由于我们以为没有任何严峻的应用措施必要在没有ASCII或UTF-8编码的环境下处理赏罚JSON数据;

JSON文档中的全部字符串最多可包括UTF-8(4GB)中的4294967295个字节。要逼迫执行此束缚,我们拒绝理会包括高出4294967295字节(4GB)的文档。这应该顺应大大都JSON文档;

我们假设AVX2支持在AMD和英特尔出产的全部最新主流x86处理赏罚器中都可用。尽量可以完成,但不包罗对非x86处理赏罚器的支持。我们打算支持ARM处理赏罚器(哀求辅佐);

假如产生妨碍,我们只会陈诉妨碍,而不会指出题目的性子。(这可以在不影响机能的环境下轻松改造);

在类型应承的环境下,我们应承工具内的一再键(像sajson这样的其他理会器也这样做);

机能针对超过至少几十千字节到几兆字节的JSON文档举办了优化:必需理会很多小型JSON文档或一个真正复杂的JSON文档的机能题目是差异的。

我们的方针不是提供通用的JSON库。像RapidJSON这样的库提供的不只仅是理会,它还可以辅佐您天生JSON并提供各类其他利便的成果。我们只理会文档。

特性

输入字符串未修改,(像sajson和RapidJSON这样的理会器行使输入字符串作为缓冲区)。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读