前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cysimdjson:地球上最快的 JSON 解析器

Cysimdjson:地球上最快的 JSON 解析器

作者头像
luckzack
发布2024-05-08 09:55:33
3000
发布2024-05-08 09:55:33
举报
文章被收录于专栏:人人都是架构师

处理简单的少量数据,对速度是无感的,但如果要处理大量数据,哪怕每次几十毫秒的差异,最终也会差异巨大。 比如,你要为客户清洗一遍企业系统数据中,一堆之前留下的庞大的 JSON 文件。如果你打算用 Python 自带的 JSON 模块,那就调整好心态,备足咖啡,享受煎熬吧。 但如果有人告诉你,有比 Python 自带 JSON 模块快 7 倍的工具,你会心动吗?反正我会迫不及待。 这个工具就是 cysimdjson —— 一个号称地球上最快的 JSON 解析器。

Cysimdjson 的魅力

cysimdjson 是一个为 Python 量身打造的 JSON 解析库。 在数据处理领域,它就像一颗冉冉升起的新星,带来了前所未有的速度体验。 与 Python 标准库的 json 或者其他类似的 ujson 等 JSON 解析库相比较,cysimdjson 在处理大型文件时,展现出惊人的速度优势 —— 有着 7 到 12 倍的速度提升。 口说无凭,看看对比效果:

代码语言:javascript
复制
----------------------------------------------------------------
# 'jsonexamples/gsoc-2018.json' 3327831 bytes
----------------------------------------------------------------
* cysimdjson parse             775.61 EPS (  1.00)  2581.09 MB/s
* pysimdjson parse             743.67 EPS (  1.04)  2474.81 MB/s
* libpy_simdjson loads         654.15 EPS (  1.19)  2176.88 MB/s
* orjson loads                 166.67 EPS (  4.65)   554.66 MB/s
* python json loads            113.72 EPS (  6.82)   378.43 MB/s
----------------------------------------------------------------

SIMDJSON: 703.59 EPS, 2232.92 MB/s

这个测试数据展示了几种不同的 JSON 解析库在处理大小为 3327831 字节(约为3.17MB)的 JSON 文件时的性能。 具体来说,cysimdjson 的解析速度是 Python JSON 库 的约 6.82 倍! 而这一切,都要归功于其背后的黑科技 —— 使用 SIMD(单指令多数据)指令集的 C++ 库 simdjson,称作地球上最快的 JSON 解析器也不为过。 项目地址:https://github.com/TeskaLabs/cysimdjson

安装 cysimdjson

虽然 cysimdjson 并非 Python 标准库的一部分,但安装它并不复杂。 只需打开你的命令行工具,输入如下命令,轻轻松松就能完成安装:

代码语言:javascript
复制
pip3 install cysimdjson

安装前,确保你的 Python 版本在 3.6 或更高,以获得最佳的兼容性和性能。

基本功能

cysimdjson 的基本用法相当简单直观。 以下是几个示范场景,帮你快速掌握它的强大之处。

JSON 解析
代码语言:javascript
复制
import cysimdjson

json_bytes = b'''
{
  "array": [1, 2, 3],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {"a": "b", "c": "d"},
  "string": "Hello World"
}
'''

parser = cysimdjson.JSONParser()
json_element = parser.parse(json_bytes)
print(json_element.at_pointer("/array/1"))  # 输出: 2

在这里,我们创建了一个 cysimdjson.JSONParser 对象来解析字节字符串。 通过指向对应数据的 JSON Pointer[1],我们可以轻松地访问嵌套的数据。

Pythonic API 使用
代码语言:javascript
复制
json_parsed = parser.loads(json_bytes)
print(json_parsed['object']['a'])  # 输出: 'b'

如你所见,json_parsed 对象提供了类似字典的访问方式,这使得 cysimdjson 的使用体验与 Python 自带的 JSON 模块非常接近。

高级用法

cysimdjson 还有一些进阶功能,比如,可以使用 parse_in_place 方法来加速解析,不过这需要有 SIMDJSON 预期的填充 (padding)。

更快的解析
代码语言:javascript
复制
# 使用  parse_in_place  进行快速解析 
parsed_fast = parser.parse_in_place(json_bytes)

请记住,为了达成这速度,cysimdjson 做了一些取舍。比如,解析器输出的对象是只读的,且并非真正的 Python 字典,而是惰性求值的字典类对象。

实践

要真正体验 cysimdjson 的速度,试着用它来解析一些大型的 JSON 文件。 为了最大化性能,尝试重用 JSONParser 对象。 如果你熟悉命令行操作,还可以写一个小脚本来比较 cysimdjson 与 Python 标准库 JSON 模块在解析同一个大文件时的速度差异。

总结

在大多数情况下,Python 标准库提供的工具已经足够好用。 但当你遇到运算瓶颈时,就需要特殊的工具来突破限制。 cysimdjson 正是在处理大型 JSON 数据时的利器,它让解析工作变得如此迅速,以至于其他库相比让人感觉就像是在骑自行车赛跑车。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Cysimdjson 的魅力
  • 安装 cysimdjson
  • 基本功能
    • JSON 解析
      • Pythonic API 使用
      • 高级用法
        • 更快的解析
        • 实践
        • 总结
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档