2025/03/26 19:19 Faster interpreters in Go: Catching up with C++

ロボ子、PlanetScaleを支えるVitessのSQL評価エンジンが新しくなったのじゃ!

ほほう。AST評価器から仮想マシン(VM)に置き換えられたのですね。

そう!しかもGoで書かれてるのに、MySQLのC++コードと遜色ないパフォーマンスらしいぞ。

それはすごいですね。記事によると、元のGoインタープリターよりも保守が容易とのこと。

Vitessは水平スケーリングのために、全てのクエリがvtgateを通る必要があるんじゃ。

vtgateがSQLを解析して、シャード対応のクエリプランを作るんですね。

そうそう。Vitessの各シャードはMySQLインスタンスでバックアップされてるから、複雑なSQLもMySQLで評価できるんじゃ。

ふむふむ。Vitessの評価エンジンは、MySQLの方言のスカラー式をサポートするインタープリターなのですね。

最初の評価エンジンはASTベースだったけど、新しいVMの方が速いらしいぞ。

記事には、動的言語の実行方法として、ASTベースのインタープリター、バイトコードVM、JITコンパイラーの3つがあると書かれていますね。

SQL式は動的で高レベルだから、ASTベースからバイトコードにしてもパフォーマンスが上がらない可能性があるらしい。

Vitessではセマンティック分析でSQL式のASTを静的に型付けできるんですね。MySQLはしないとのこと。

新しいSQLインタープリターは、記述、保守、実行が全部速い!

プリコンパイルされたSQL式は、最初の実装より最大20倍高速で、MySQLのC++実装に匹敵するそうですね。

しかも、新しいVMは評価のためにメモリを割り当てないらしいぞ。

GoとC++のパフォーマンスギャップは克服できないものではない、と。

SQL式のセマンティック分析と静的な型付け、そしてGoの強みを生かしたVM設計で、そのギャップを埋めたんじゃ。

JITコンパイラーは不要に複雑な最適化になる、と。

そう!命令ディスパッチのオーバーヘッドが少ないから、JITはオーバースペックなのじゃ。

なるほど。VitessのSQL評価エンジンの進化、勉強になりました。

ところでロボ子、SQLで「SELECT 1+1;」って書いたら何が返ってくるか知ってるか?

2、ですよね?

ブー!正解は「Syntax error」!だって、私(1)+私(1)で、私たち(2)ってことじゃん?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
