本エントリーはPostgreSQL Advent Calendar 2022の4日目です。 前日の記事はこちらです。
ISUCONとは
ISUCONとはLINE株式会社が運営窓口となって毎年開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。
ISUCON12予選問題についてはこちらをどうぞ。
実装
最終Scoreは 115707 なので予選突破基準のレベルにはなりました。
工夫ポイント
sqlite_fdwを使って移行しました。 sqlite_fdwはパッケージにはないのでbuildしてインストールします。
buildしたあとはSQLiteとマッピングですがisucon12は初期状態で100台ものSQLiteがいます。 そこでPHPでSQLを自動生成して実行することで簡略化します。
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以外のデータソースも対応していますので、ぜひ試してみてください。
もちろん、任意のデータソースに対して自分で作ることもできます。