1 ポイント 投稿者 GN⁺ 2023-11-06 | 1件のコメント | WhatsAppで共有
  • Goプログラミング言語を使った高性能JSONパーサーの構築過程に関する記事
  • ストリーミング処理のサポート、encoding/jsonパッケージとの互換性、割り当てなしまたは制限付きのAPI提供を目標とするプロジェクト
  • JSONパースの時間計算量について説明し、入力を処理するのにかかる時間の下限は入力サイズであることを強調する記事
  • バイトストリームをJSONトークンストリームに変換するトークン化プロセスに関する記事
  • JSONファイルからデータを読む過程を説明し、io.Reader使用の難しさを強調する記事
  • bufio.Readerと似たように動作するが、APIがより効率的なbyteReaderの概念を紹介する著者
  • どの文字がトークンで、どの文字が単なる空白なのかを識別するスキャンプロセスに関する記事
  • ホットパスで関数呼び出しを避けることでスキャナーの性能を向上させる方法について著者が説明
  • トークンシーケンスが有効かどうかを確認するデコード過程に関する記事
  • メソッドを直接保存して直接呼び出すcomputed gotoを使うことで、デコーダーの性能を向上できるという著者の提案

1件のコメント

 
GN⁺ 2023-11-06
Hacker Newsの意見
  • 高性能なJSONパーサーの構築に関する詳細なガイドを提供する記事
  • 著者は、JSONでは明示的なトークン化は不要であり、パースとトークン化を統合できると提案
  • より良い性能のために、著者はトークン化とパースでヒープ割り当てを避けることを推奨
  • JSONライブラリの選択は性能に大きな影響を与える可能性があり、最大で3〜10倍の差が出ることがある
  • シリアライズまたはデシリアライズするクラスがコンパイル時に分かっているなら、Jackson Javaはうまく機能するが、慎重なコーディングとプロファイリングによって性能を2倍向上できると記事は示唆
  • 高性能な本番環境向けには、著者はDaniel Lemireの仕事、またはそれをGoに移植したMinIOを見ることを勧めている
  • 著者はまた、RapidJSONのJSONベンチマークページにも言及
  • トークン化における「ゴミ工場」問題への解決策について議論しており、文字列の代わりにbytesliceからTへの関数を使うことを含む
  • 著者は、メモリ割り当てなしで非常に高速なGraphQLトークナイザーとパーサーの構築に使われた類似のアプローチにも言及
  • 著者はまた、computed goto という、より空間効率の高い手法について議論
  • 著者は、より良いAPI設計で標準ライブラリを改善できると提案する一方、エラーを見つける前に構造体を半分だけ埋める完全なストリーミングパーサーは非現実的だとしている
  • 著者は、ほとんどのアプリケーションで入力全体をメモリに保持していると期待するのは非現実的だという考えには同意していない
  • 記事はPhil Pearlへの謝辞を述べ、GitHubのSonicライブラリを見ることを勧めている