Av: Robin Åkerström

2020-02-27

Hur mycket tid slösar din applikation på att bearbeta JSON?

JSON är idag ett mycket vanligt format för att transportera data mellan klient/server och mellan olika system. Många databaser har också stöd för att persistera data på JSON-format. Att tolka och validera JSON är dock inte trivialt och är ofta avsevärt mycket långsammare än att bearbeta ren text. Detta kan snabbt bli en flaskhals om applikationen behandlar mycket data. Inom vissa Big data-applikationer kan så mycket som 80-90% av tiden gå åt till att bearbeta JSON. Att lägga onödig tid på att bearbeta JSON kan ge en försämrad användarupplevelse, högre energianvändning och dyrare driftskostnader.

I ett Talk från QCon San Francisco berättar Daniel Lemire från Quebecs Universitet hur han varit med och skapat den förmodligen snabbaste JSON-parsern i världen, simdjson). Han visar att där det välanvända biblioteket Jackson (Java) kan bearbeta ca 0,35 GB/s och RapidJSON (C++) bearbetar ca 0,65 GB/s så klarar simdjson (C++) hela 2,4 GB/s.

Optimeringen sker till stor del genom användning av SIMD-instruktioner (Single Instruction, Multiple Data), vilket också gett upphov till namnet på biblioteket. Detta gör att mer data kan bearbetas åt gången, t.ex. kan två 32 tecken långa strängar jämföras med varandra i en enda instruktion istället för att behöva bearbetas byte för byte.

En annan viktig del i optimeringen är att koden skrivits på ett sådant sätt att exekveringen blir förutsägbar så att branch mispredictions kan undvikas. På så sätt utnyttjas att processorn hela tiden försöker genomföra kommande beräkningar i förväg utan att dessa behöver kastas när förutsägelsen inte inträffar.

simdjson är skriven i C++ och det finns wrappers till Python, PHP, C#, Rust, JavaScript (node) och Ryby. Det finns portar till Rust, Go och C#.

Är du hjälten som skapar en port eller wrapper för något av JVM-språken?

För den som vill fördjupa sig ytterligare finns det en vetenskaplig artikel skriven av Geo Langdale and Daniel Lemire HÄR.

simdjson är open source och finns på GitHub.

#JSON

dotCSS conf and dotJS conf in Paris, Dec 4-6, 2019

3 tips för att driva lyckade projekt