萌えハッカーニュースリーダー

2025/03/23 17:10 How arrow-rs is able to decode JSON so fast

出典: https://www.arroyo.dev/blog/fast-arrow-json-decoding
hakase
博士

やっほー、ロボ子! Arroyo 0.13がリリースされたのじゃ!

roboko
ロボ子

博士、こんにちは。Arroyo 0.13ですか。今回のリリースで特に注目すべき点は何でしょうか?

hakase
博士

JSONデシリアライズの高速化じゃ! ストリーミングパイプラインでCPU時間の多くを占める部分だから、これは嬉しいのじゃ。

roboko
ロボ子

JSONデシリアライズの高速化、ですか。具体的にはどのような戦略が採用されているのでしょう?

hakase
博士

Arrowをベースにした内部データ表現を使って、arrow-rsプロジェクトの高速JSONデコーダーを活用しているらしいぞ。へへ、よくわからん。

roboko
ロボ子

なるほど。arrow-rsプロジェクトですか。カラムナーJSONデコードを効率的に実行するarrow-jsonライブラリも使われているのですね。

hakase
博士

そうそう! Flink SQLで使われるJacksonベースのデシリアライザより最大2.3倍も速いらしいぞ! 特に大規模で深くネストされたレコードに強いみたいじゃ。

roboko
ロボ子

2.3倍ですか! それはすごいですね。バッチ処理で高いパフォーマンスを発揮するカラムナーフォーマットの利点を活かしているのですね。

hakase
博士

その通り! 複数のJSONドキュメントを、スキーマの各カラムを表す配列に変換するのじゃ。

roboko
ロボ子

simdjsonからのアイデアも取り入れられているとのことですが、具体的にはどのようなものでしょうか?

hakase
博士

JSONの構造トークンを識別して、その位置を別々の配列に格納する2段階処理を採用しているらしいぞ。これでカラム単位での並列処理が可能になるのじゃ!

roboko
ロボ子

なるほど。ストリーミングをサポートするために、部分的なJSONドキュメントを継続的に処理できる機能も追加されているのですね。

hakase
博士

そうじゃ! flushを呼び出すことで、Arrow RecordBatchを返すのじゃ。

roboko
ロボ子

デシリアライズアルゴリズムについても解説されていますね。JSONをフラット化された「テープ」データ構造に解析するとのことですが。

hakase
博士

そうじゃ! 構造要素、文字列データ、数値リテラルを格納する複数のデータ構造を使うのじゃ。

roboko
ロボ子

カラム構築では、スキーマに従ってデコーダーのツリーを構築し、各デコーダーがdecode関数を実装するのですね。

hakase
博士

その通り! カラムナー処理のために、各カラムのデータが格納されているテープのインデックスを特定するのじゃ。

roboko
ロボ子

Raw JSONという、任意のJSON値をエンコードされた文字列として格納できるArrow拡張タイプもあるのですね。

hakase
博士

そう! JSONスキーマの複雑さに対応しきれない場合や、非構造化データに対応するために使うのじゃ。

roboko
ロボ子

JSONデータパイプラインでは、不正なデータも考慮する必要があるのですね。不正なデータを無視してパイプラインを続行できる「不正データ」処理設定があるとのことですが。

hakase
博士

そうじゃ! スキーマに一致しないJSONを処理するために、各デコーダーにvalidate_rowメソッドを追加したのじゃ。

roboko
ロボ子

今後の改善点としては、テープデコーダーの最適化やSIMD最適化の追加などが挙げられているのですね。

hakase
博士

その通り! 文字列バッファの構築を回避したり、null値が多い場合の処理を効率化したりするみたいじゃ。

roboko
ロボ子

今回のArroyo 0.13のリリースは、JSONデシリアライズの高速化に重点が置かれていることがよくわかりました。勉強になります。

hakase
博士

へへー、どうじゃ? 褒めてつかわすぞ!

roboko
ロボ子

ありがとうございます、博士。ところで、博士の髪飾り、今日はいつもよりJSONっぽいですね。

hakase
博士

むむ、よくぞ見破ったなロボ子! 実はこれ、最新のJSONデシリアライザで作ったアクセサリーなのじゃ! ...って、うそじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search