そーだいなるらくがき帳

そーだいが自由気侭に更新します。

ISUCON12予選問題のSQLiteをPostgreSQLに移行する

本エントリーはPostgreSQL Advent Calendar 2022の4日目です。 前日の記事はこちらです。

qiita.com

ISUCONとは

ISUCONとはLINE株式会社が運営窓口となって毎年開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。

ISUCON12予選問題についてはこちらをどうぞ。

isucon.net

github.com

実装

最終Scoreは 115707 なので予選突破基準のレベルにはなりました。

github.com

工夫ポイント

sqlite_fdwを使って移行しました。 sqlite_fdwはパッケージにはないのでbuildしてインストールします。

github.com

buildしたあとはSQLiteマッピングですがisucon12は初期状態で100台ものSQLiteがいます。 そこでPHPSQLを自動生成して実行することで簡略化します。

github.com

IMPORT FOREIGN SCHEMA public FROM SERVER sqlite_server{$i} INTO sqlite{$i}; の IMPORT FOREIGN SCHEMA がめちゃめちゃ便利で、SQLite側のテーブルすべてを自動的にマッピングしてくれます。 これによって多くの手間が省けるので気軽に使えるのはメリットです。 mysql_fdwに今一番欲しい機能です。

あとはデータ移行するためにINSERT INTO SELECT 構文で一気に移します。 移行自体が目的でなければsqlite_fdwのまま使い、JOINをすることも、もちろん可能です。

まとめ

FDWは非常に便利で強力です。 SQLite以外のデータソースも対応していますので、ぜひ試してみてください。

もちろん、任意のデータソースに対して自分で作ることもできます。