秒間1億1800万クエリ!?Nekiの爆速パフォーマンスが凄まじい
118M Queries per Second on Neki
118M Queries per Second on Neki
Nekiで秒間1億1800万クエリという驚異的な数値を達成しました。詳細はソースコードやドキュメントをチェックしてみてください。
この実行に25万ドルかかったけど、それだけの価値はあった気がする。
もしこれがクローズドソースなら、全く興味ないな。
なんでテストにこんなにルーターホストが必要だったのか気になるな。
512個のシャード、それぞれにr8g.16xlargeのPostgresプライマリが1つずつ。
480個のNekiルーター、それぞれ専用の8xlargeインスタンス。
ルーター1台あたり約25万クエリ/秒って、この手のワークロードにしては少なくない?ルーター側はクエリの解析と適切なシャードへのルーティングくらいしかしてないはずだし。
87.3%がキャッシュから提供されてるね。これって、全く同じクエリが以前に実行されたからキャッシュの結果が返ったってこと?秒間何百万ものクエリを処理するなら、同じクエリが繰り返されるのは珍しくないから、結果としては妥当かもしれないけど。ただ、そうなるとクエリのパフォーマンスというよりキャッシュのパフォーマンスを測定してるようなもんじゃないかな。標準化されたクエリのベンチマークでもない限り、単なる秒間クエリ数なんてあまり参考にならないし。クエリの複雑さで実行時間は桁違いに変わるからね。IDで名前を検索するのも、17のテーブルを結合して10億行を集計するのも、どっちも「1クエリ」だし。
2015年当時、数台のノードだけで秒間100万回の読み書きクエリを達成できたことがある。複数のデータベースでテストしたけど、当時はネットワークの調整とAWS内でのノード配置をうまくやれば、1回あたりのコストはたったの10〜15ドル程度で済んだ。もちろん、そんなパフォーマンスをスケールさせるという課題はあるし、今回エンジニアリングに費やされた努力は認めるけど、流石にコストがかかりすぎじゃないかな。昔、俺のチームがHadoopで数テラバイトのオフラインデータを処理した時を思い出したよ。チームは数時間かかると言ってたけど、俺はあえて言わなかった。デモの裏で、ネットワークとストレージを最適化して数秒で全シグナルを抽出する小さなコードを書いて、次の週のランチ勉強会で披露してやったんだ。
ベンチマークと同じパフォーマンスとストレージ規模で、ChatGPTを使ってざっくり計算してみた。
Neki プライマリ1台 + レプリカ2台: 月額約500万ドル(AWS利用料のみ)
Google Spanner(レプリカ3台構成): 月額約385万ドル
Casey MuratoriがTyler Cloutier(SpacetimeDBの創設者)と行ったインタビュー[1]を見たよ。Tylerが言ってたことのひとつに、現代のCPUアーキテクチャのキャッシュラインを考慮すると、分散データベースは最低でも50〜100ノードに負荷を分散(ファンアウト)させないと、キャッシュ最適化された単一ノードのデータベースの処理能力を上回れない、というのがあった。
その議論の逆側が見られるのは面白いね。Planet scaleは「100ノード以上に負荷を分散させたらどうなるか?」という問いに答えているわけか。
どちらの技術にも役割はあるよね。非常に面白い。
2015年、MySQL Cluster (NDB Clusterエンジン) はコモディティハードウェアで秒間2億トランザクションを記録したよ[ref]。スナップショット分離ではなく読み取りコミット済みトランザクションだったけど、それでも驚異的だった。NDBは今やRonDBになったけど、非ブロッキングの2相コミットプロトコルがベースで、GPL-v2ライセンスなのは変わってない。
RonDBはInfiniBandもサポートしたから、秒間10億オペレーションも軽く突破するはず。参考までに、これって1GHz分のトランザクション処理速度だよ。
スケールと進歩が見られるのは素晴らしいけど、クローズドソースってのが大きな懸念材料だな。
ClickhouseはPostgresとの素晴らしいオープンソース統合を構築していて、良い方向に向かってる。最近のブログを見ると、彼らの管理型Postgresはかなり優秀そう[1]だし、ぜひOSSのシャード化されたPostgresソリューションを作ってほしい。