ビッグデータ処理の分野では、効率とリソース利用は常にエンジニアが直面する中心的な課題です。最近、弊社チームは社内で使用しているデータ形式変換ツールが、GB レベルの JSON 入力ファイルを処理する際に、メモリ使用量の深刻な問題を引き起こし、頻繁に OOM(Out Of Memory)エラーを発生させていることを発見しました。このような大規模 JSON ファイルは JSONL 形式ではなく、ファイル全体が単一の巨大なオブジェクトまたは配列として存在し、従来の解析方法に大きな課題をもたらしています。

JSONL フォーマットと従来の JSON の違い

JSONL(JSON Lines)フォーマットは一般的な解決策となっています。JSONL は各 JSON データを個別の行に配置する形式で、各行は互いに独立しているため、大規模なデータセットを処理する際に行ごとに読み取りと処理が可能で、ファイル全体をメモリにロードする必要がありません。しかし、現実世界のデータは常にこの理想的な形式で存在するわけではありません。私たちが直面しているのは、まさに JSONL 形式ではない巨大な JSON ファイルであり、それらは単一の分割不可能なデータ構造として存在します。従来の解析方法では処理時に構造全体をメモリにロードする必要があり、これが OOM 問題の根本原因となっています。

解決策

この技術的課題に対して、私たちは軽量かつ効率的な解決策を採用しました。わずか 200 行余りのコードで、まったく新しいストリーミング JSON パーサーをゼロから実装しました。

市場には YAJL などの成熟したストリーミング JSON 解析ツールがすでに存在していますが、自社開発によって、より大きな柔軟性と特定の最適化の余地を得ることができました。この「ゼロからの開始」アプローチは一見シンプルですが、特定の問題を正確に解決することができます。

最も重要な技術的ブレークスルーは、新しく実装されたパーサーが空間複雑度をほぼ O(1) に削減したことです。これは、入力 JSON ファイルがどれほど大きくても、メモリ使用量が比較的一定のレベルに保たれることを意味します。超大規模データを処理する上で、これは質的な飛躍です。

技術検証

パーサーの安定性と正確性を確保するために、厳格な自動化テストプロセスを設計しました。テストでは、極小のメモリキャッシュバッファ(それぞれ 1 バイト、2 バイト、3 バイト)を意図的に使用し、様々な規模の実際の JSON 入力に対して極限テストを実施しました。

テスト結果は満足のいくものでした:すべての状況で、パーサーは入力データを正しく処理し、逆変換された JSON は元の JSON と完全に一致しました。これにより、私たちの実装がメモリを節約するだけでなく、データの完全性も維持していることが証明されました。

継続的な最適化

現在の実装はメモリ使用量の問題を解決していますが、スクリプト実装は CPU 効率の面でまだ改善の余地があります。そのため、カナダチームのエンジニアに現在の実装を C++ バージョンに変換するよう依頼し、処理速度をさらに向上させる予定です。

将来、パフォーマンスに新たなボトルネックが発生した場合、OpenResty XRay 動的トレースプラットフォームを活用して詳細な分析を行うことができます。このプラットフォームはシステム内のパフォーマンスホットスポットを正確に特定し、継続的な最適化のためのデータサポートを提供します。

技術的示唆

今回の最適化の実践は、シンプルで巧妙な解決策が複雑なアーキテクチャよりも効果的である場合があることを再び証明しました。200 行余りのコードで GB レベルのデータ処理のメモリボトルネックを解決したことは、OpenResty が一貫して提唱するエンジニアリング哲学を体現しています:シンプルで効率的、問題を正確に解決する。

OpenResty XRay に加えて、OpenResty Inc. は各業界の技術ニーズをカバーする包括的なプライベートライブラリサービスも提供しています。これらのプライベートライブラリはパフォーマンス最適化、セキュリティ保護、データ処理の面で顕著な利点を持ち、企業が高性能で信頼性の高いアプリケーションシステムを迅速に構築するのに役立ちます。金融、eコマース、メディア業界を問わず、OpenResty Inc. のプライベートライブラリは、さまざまなシナリオにおける特定のニーズに合わせたカスタマイズされたソリューションを提供できます。

弊社の技術チームは、引き続き XRay ツールキットとプライベートライブラリサービスの開発と改良に取り組み、開発者と企業がさまざまなパフォーマンスのボトルネックを発見し解決できるよう支援します。正確なパフォーマンス分析と的を絞った最適化により、一見改善不可能に思えるパフォーマンスの問題も画期的な方法で解決できると確信しています。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!