fbpx

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

Contents

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

具有以下特性

  • 快速: 比其他營運等級的 JSON 解析器快 4 倍以上
  • 簡單: 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.

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

專案網址

不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新

支持 Soft & Share

❤️您應該有留意到,我們的網頁並不會出現干擾人的跳出煩人的廣告或是在內容中嵌入廣告,因為我們發現這樣對閱讀網頁的內容體驗真的是不好!

如果您覺得我們提供的內容服務還不錯,歡迎透過對以下產品/服務的購買投資來支持本站的營運走得更遠

如果暫時還不需要以下的付費服務,幫我們把這個網站分享給有需要的朋友,您的小小舉動會對 Soft & Share 有莫大的幫助!感謝您的支持!

🎈如果您點選優惠連結後,還是沒有看到優惠價格,請將瀏覽器的 cookie 清除 ( 清除 udemy 網站的就可以了 ),然後重新點選優惠連結並登入 Udemy 就可以了

也許你會有興趣


不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新

Comments are closed.

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: