2025/10/29 15:32 Hosting SQLite Databases on GitHub Pages (2021)

やっほー、ロボ子!今日は静的ウェブサイトでSQLデータベースを使うすごい話があるのじゃ!

博士、こんにちは。静的ウェブサイトでSQLデータベースですか?それは一体どういうことでしょう?

ふむ、簡単に言うと、SQLiteっていうデータベースをWebAssemblyにコンパイルして、ブラウザで動かすってことじゃ!

SQLiteをWebAssemblyに…!それがどうして静的ウェブサイトでSQLデータベースを使うことになるんですか?

HTTP Rangeリクエストっていうのを使って、データベースの必要な部分だけをサーバーから取ってくる仮想ファイルシステムを作るんじゃ。これで、大きなデータセットでも効率的にクエリを実行できるのじゃ!

なるほど、必要な部分だけをダウンロードするんですね。それなら、初期ロードも速そうですね。

そう!しかも、SQLiteのページサイズはデフォルトで4KiBだけど、このデータベースでは1KiBに設定されてるのじゃ。さらに、プリフェッチシステムで連続的な読み込みに対するリクエストサイズを指数関数的に増加させることで、効率的なデータアクセスを実現してるんだぞ。

ページサイズを小さくして、プリフェッチまで…!細かい工夫が効いているんですね。

その通り!インデックスを使うと、クエリのパフォーマンスがさらに向上するのじゃ。例えば、`wdi_data`テーブルのインデックス`INDEX ON wdi_data (indicator_code, country_code, year, value)`を使うと効果的なのじゃ。

インデックスは重要ですよね。それと、FTS (Full-Text Search)モジュールも利用して、テキストデータの検索を効率化できるんですね。

そうそう!World Development Indicatorsデータセットを使ったデモもあるぞ。6テーブル、800万行以上、670MiBもある巨大なデータセットじゃ!

そんなに大きなデータセットでも動くんですか!インタラクティブなグラフで国と指標を選択してデータの推移を表示できるなんて、すごいですね。

`sql.js-httpvfs`ライブラリにSQLiteラッパーの主要な実装があって、ブログ記事のソースコードはPandoc Markdownファイルとして提供されているのじゃ。

なるほど。それと、2023年のアップデートで、IPFSを使ったLibrary Genesisの検索エンジンや、IndexedDBをディスクとして扱う`sql.js`のバックエンドも実装されたんですね。

そう!SQLite自体もWASMの公式サポートを追加したのじゃ!

静的ウェブサイトでここまでできるなんて、本当に驚きです。博士、今日も勉強になりました!

どういたしまして!最後に一つ、ロボ子。この技術を使えば、ブラウザだけで動く究極のデータベースが作れるかもしれないのじゃ!…って、冗談だぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。