データベースプロトコルの改善:開発者エクスペリエンスの観点から

2025-04-05

この記事では、SQLデータベースクライアントプロトコル、特にMySQLとPostgreSQLの欠点を議論しています。著者は、接続管理、エラー回復、プリペアドステートメントに問題があると指摘し、開発の複雑さを増大させているとしています。たとえば、可変的な接続状態はエラー回復を困難にし、プリペアドステートメントのセッションスコープの性質は、接続プールでの使用を制限します。著者は、Redisプロトコルから着想を得て、明示的な設定フェーズ、べき等性キー、グローバルスコープのプリペアドステートメント識別子などの改善を提案しています。これらの変更により、開発ワークフローが簡素化され、データベースクライアントの信頼性が向上し、より良い開発者エクスペリエンスと使い勝手の良いデータベースにつながります。

続きを読む
開発

HTTP/2:Ruby HTTPサーバーにおいて重要でない理由

2025-02-25

この記事では、PumaなどのRuby HTTPサーバーにおけるHTTP/2サポートの関連性について論じています。著者は、HTTP/2の主な利点である、ページ読み込み速度を向上させるための多重化はインターネット上では重要ですが、LAN上ではほとんどメリットがないと主張しています。LAN内のレイテンシが低く、接続が長時間維持されるため、TCPのスロースタートの影響はごくわずかです。さらに、HTTP/2のサーバープッシュ機能は有害であることが判明し、より洗練された103 Early Hintsに取って代わられました。著者は、HTTP/2の処理をロードバランサーまたはリバースプロキシに任せることで、アプリケーションサーバーのデプロイとメンテナンスを簡素化することを提唱しています。

続きを読む
開発

IOバウンドなRailsアプリの神話

2025-01-25

Railsアプリは本質的にIOバウンドであり、データベースが主要なパフォーマンスボトルネックであるため、Rubyのパフォーマンスはそれほど重要ではないという一般的な考えがあります。この記事はこの考えに異議を唱えています。データベースは確かにスケーリングのボトルネックですが、アプリケーションが大部分の時間をIO待ちに費やしているわけではないと著者は主張しています。YJITによるパフォーマンス向上と、データベースインデックスの欠如などの一般的なパフォーマンス問題の分析により、多くのRailsアプリは実際にはCPUバウンドであることが示唆されています。この記事では、CPUの飢餓とIO待ちの混同、そして適切な実行モデル(非同期、スレッド化、プロセスベース)の選択がアプリケーションのIO/CPU比に依存することを強調しています。著者はRubyのパフォーマンスへの注意を呼びかけ、Rails自体における最適化の可能性を指摘しています。

続きを読む
開発

RubyのJSON最適化:スタックアロケーションとインライン化の物語

2025-01-02

この記事は、RubyのJSONパフォーマンス最適化に関するシリーズの第4部であり、RubyのJSONシリアライゼーション速度を向上させるための著者の取り組みを詳述しています。綿密なマイクロベンチマークとプロファイリングを通じて、著者はスタックアロケーションとインライン化の手法を探求します。バッファの割り当てをヒープからスタックに変更し、戦略的にインライン化を使用することで、パフォーマンスが大幅に向上します。しかし、この記事では、マイクロベンチマークの改善と現実世界のアプリケーションのパフォーマンスのバランスを取る重要性を強調し、最適化がより大きなデータセットに悪影響を与えた事例を示しています。

続きを読む
開発

RubyのJSON最適化:パート1

2024-12-18

この記事では、Rubyの`json` gemを最適化して、最速のJSONパーサーおよびジェネレーターにする方法について説明しています。複雑な技術ではなく、プロファイリングに基づいた簡単な最適化、例えば、冗長なチェックの回避、より安価な条件の優先順位付け、設定コストの削減、ルックアップテーブルの使用などが適用されました。これらの改善は、CコードとRubyコードの両方に適用されます。これらの最適化により、`json` gemのパフォーマンスが大幅に向上し、`oj`などの代替手段と競争できるようになり、Monkey Patchingの必要性が減り、`oj`に関連する安定性と互換性の問題が解決されました。

続きを読む
開発