simdjson – 每秒解析千兆位元組 JSON 資料開源 C++ 程式庫

以下內容摘要翻譯自 Github 專案說明

JSON 在網際網路上無處不在。 伺服器花費大量時間解析它。 我們需要一個新的方法。 Simdjson 程式庫使用通用的 SIMD 指令和微平行( microparallel )演算法來解析 JSON 2.5,比其他任何程式庫都要快

具有以下特性

  • 快速: 比其他營運等級的 JSON 解析器快2.5倍以上
  • 簡單: First-class,易於使用的 API
  • 嚴格: 完整的 JSON 和 UTF-8 驗證,無損解析。效能沒有折衷
  • 自動: 在執行時選擇一個 CPU-tailored 的解析器。不需要配置
  • 可靠: 從記憶體分配到錯誤處理,simdjson 的設計避免了意外

這個程式庫是 Awesome Modern C++ 列表的一部分。

效能結果

Simdjson 程式庫使用的指令比最先進的解析器 RapidJSON 少四分之三,比 sajson 少50% 。 據我們所知,simdjson 是第一個在普通處理器上以每秒千兆位元組執行的完全驗證 JSON 解析器。 它可以在單核上每秒解析數百萬個 JSON 檔案。

下圖表示使用 GNU GCC 9 編譯器(帶有 -O3 旗標)在 Intel Skylake 處理器(3.4 GHz)上解析各種檔案的解析速度(gb / s)。 我們比較了最好和最快的 C++ 程式庫。 Simdjson 程式庫提供了完整的 unicode (UTF-8)驗證和精確的數字解析。 Rapidjson 程式庫以兩種模式進行測試: 快速和準確的數字解析。 Sajson 庫提供了快速的(但不是精確的)數字解析和部分 unicode 驗證。 在這個資料集中,檔案大小從65KB (github_events)到3.3 GB (gsoc-2018)不等。 許多檔案主要是由數字組成的: canada、 mesh.pretty、 mesh、 random 和 numbers: 在這種情況下,由於數字解析的高成本,我們看到 JSON 解析速度較低。 Simdjson 程式庫使用精確數字解析,這是特別費力的。

在 Skylake 處理器上,twitter.json 檔案中各個處理器的解析速度(gb / s)如下,同樣使用 GNU GCC 9.1(帶有 -O3 旗標)。 目前流行的 Modern C++ 的 JSON 程式庫特別慢: 它顯然用解析速度換取了其他理想的特性。

parserGB/s
simdjson2.5
RapidJSON UTF8-validation0.29
RapidJSON UTF8-valid., exact numbers0.28
RapidJSON insitu, UTF8-validation0.41
RapidJSON insitu, UTF8-valid., exact0.39
sajson (insitu, dynamic)0.62
sajson (insitu, static)0.88
dropbox0.13
fastjson0.27
gason0.59
ultrajson0.34
jsmn0.25
cJSON0.31
JSON for Modern C++ (nlohmann/json)0.1

無論是處理較小的檔案(例如300 byte)還是處理較大的檔案(例如3MB),simdjson 程式庫都可以提供較高的速度。 下圖顯示了在3.4 GHz Skylake處理器(GNU GCC 9,-O3)


以上的所有的實驗都是可複製的

目前實際在使用的專案

目前 Simdjson 也有以下的語言版本

我們將 “bindings”(僅包裝C ++代碼)和 porting 到另一種程式語言(重新實現所有內容)之間進行區分。

關於 simdjson

Simdjson 程式庫利用了現代微架構的優勢,與 SIMD 向量指令平行化,減少了分支錯誤預測,並減少了資料相依性,以利用每個 CPU 的多個執行核心。

有些人喜歡閱讀我們的論文: 我們的研究文章描述了 simdjson 的設計和實現: Geoff Langdale, Daniel Lemire, Parsing Gigabytes of JSON per Second, VLDB Journal 28 (6), 2019.Second, VLDB Journal 28 (6), 2019.

我們也有一個非正式的部落格文章提供了一些背景和情境

✍ 專案網址 https://github.com/simdjson/simdjson

也許你會有興趣

 訂閱開源報報-使用中文掌握開源資訊

Comments are closed.

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: