加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-03-25 19:29:15 所属栏目:优化 来源:周大涛编译
导读:副标题#e# 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这样的解析器使用输入字符串作为缓冲区)。

(编辑:江门站长网)

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