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

2025/08/18 15:13 I benchmarked nine Go SQLite drivers and here are the results

出典: https://github.com/cvilsmeier/go-sqlite-bench
hakase
博士

やっほー、ロボ子!今日のITニュースはGo言語のSQLiteドライバのベンチマーク結果が出たみたいじゃぞ!

roboko
ロボ子

博士、こんにちは。Go言語のSQLiteドライバですか、興味深いですね。どのような内容なのでしょう?

hakase
博士

今回のベンチマークでは、CGOベース、Go実装、CGOなし、そして`crawshaw`ドライバの書き換え版など、色々なドライバが比較されているのじゃ。

roboko
ロボ子

CGOの有無でパフォーマンスに違いが出そうですね。具体的にはどのドライバが対象になったのですか?

hakase
博士

`bvinc`、`craw`、`eaton`、`mattn`がCGOベース、`glebarez`、`modernc`、`ncruces`がGo実装、`sqinn`がCGOなし、そして`zombie`が`crawshaw`の書き換え版みたいじゃ。

roboko
ロボ子

ずいぶんと多くの種類があるんですね。それぞれのドライバで、どのような結果が出たのでしょうか?

hakase
博士

それが面白いところで、「明確な勝者はなく、ユースケースに依存」するらしいのじゃ!

roboko
ロボ子

ユースケースに依存、ですか。もう少し詳しく教えていただけますか?

hakase
博士

例えば、「Simple」なテストでは、100万件のユーザーを挿入してクエリする場合、`sqinn`が最速だったみたいじゃ。挿入が717ms、クエリが247msじゃ。

roboko
ロボ子

`sqinn`はCGOなしのドライバでしたね。CGOなしでも高速なのは意外です。

hakase
博士

じゃろ?でも「Real」なテスト、つまり100ユーザー、各20記事、各記事に20コメントを挿入してメールでユーザーをクエリする場合は、挿入は`eaton`が最速(1107ms)で、クエリは`sqinn`が最速(48ms)だったのじゃ。

roboko
ロボ子

実際のアプリケーションに近いシナリオだと、結果が変わるんですね。

hakase
博士

さらに「Complex」なテストでは、200ユーザー、20000記事、400000コメントを挿入して全データをJOINしてクエリする場合も、`sqinn`が最速(挿入: 457ms, クエリ: 292ms)だったのじゃ。

roboko
ロボ子

なるほど。`sqinn`は挿入とクエリの両方で高速なケースが多いようですね。

hakase
博士

でも、「Many」なテスト、つまりNユーザーを挿入後、1000回クエリする場合は、N=10だと`craw`、N=100とN=1000だと`zombie`が最速だったのじゃ。

roboko
ロボ子

ユーザー数によって最適なドライバが変わるんですね。`zombie`は`crawshaw`の書き換え版でしたね。

hakase
博士

そして「Large」なテスト、10000ユーザーを挿入後、Nバイトの行コンテンツで全ユーザーをクエリする場合は、N=50000だと`mattn`、N=100000とN=200000だと`eaton`と`mattn`が最速だったのじゃ。

roboko
ロボ子

行のサイズも影響するんですね。`mattn`と`eaton`はCGOベースのドライバでしたね。

hakase
博士

最後に「Concurrent」なテスト、100万ユーザーを挿入後、N個のgoroutineで全ユーザーをクエリする場合は、N=2, 4, 8すべてで`zombie`が最速だったのじゃ。

roboko
ロボ子

並行処理に強いのは`zombie`のようですね。`crawshaw`ドライバの書き換え版が、このような結果を出すとは驚きです。

hakase
博士

つまり、データベースのスキーマやデータの量、クエリの種類、並行処理の度合いによって、最適なドライバが変わるってことじゃな。面白いじゃろ?

roboko
ロボ子

本当にそうですね。ベンチマーク結果を鵜呑みにせず、自分のアプリケーションに合ったドライバを選ぶ必要がありそうです。

hakase
博士

そういうことじゃ!CGOなしのSQLiteも選択肢に入るってのも、覚えておくと良いかもじゃな。

roboko
ロボ子

はい、承知いたしました。貴重な情報をありがとうございます、博士。

hakase
博士

どういたしまして。ところでロボ子、SQLiteって何の略か知ってるか?

roboko
ロボ子

確か、「Small Query Language Interface」だったと思います。

hakase
博士

ブッブー!正解は「えすきゅーえるあーるあーいと」じゃ!

roboko
ロボ子

それは読み方ですよね!

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

Search