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

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

出典: https://planetscale.com/blog/faster-interpreters-in-go-catching-up-with-cpp
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

2、ですよね?

hakase
博士

ブー!正解は「Syntax error」!だって、私(1)+私(1)で、私たち(2)ってことじゃん?

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

Search