django-materialized-views について
Django で PostgreSQL のマテリアライズドビューを使う条件と手順を案内するスキルです。設計、統合、更新、検証に加え、データの古さやデータベース負荷も考慮します。
主な機能
- 01マテリアライズドビューの適合性評価
- 02SQL 出力列とインデックスの設計
- 03Django のマイグレーションとモデルへの統合
- 04ビュー更新の計画と検証
活用シーン
- 01繰り返し発生する高コストな読み取りの高速化
- 02Django アプリへの読み取り専用ビューの追加
- 03安全な更新方法の選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-materialized-viewsインストール後、Claude Code で/django-materialized-viewsを入力して読み込まれたか確認します。
同梱ファイルreferences/materialized-view-patterns.md
詳細
Django マテリアライズドビュー
高コストな読み取りクエリが頻繁に再利用され、制御された範囲でデータが古くなることを許容できる場合に、このスキルを使用します。まずクエリプラン、インデックス、ORM 式の改善を試してください。マテリアライズドビューを導入すると、運用上の状態管理が必要になります。
ワークフロー
-
適合性を確認します。
- 元のクエリのコストが高く、安定しています。
- 利用側が古いデータを許容できます。
- 更新頻度、管理責任者、障害時の動作が明確です。
- 対象のデータベースは PostgreSQL です。
-
マテリアライズドビューを設計します。
- SQL クエリと出力列を定義します。
- 同時更新が必要な場合は、一意の列または一意の列の組み合わせを追加します。
- ビューに対する利用側のクエリに合わせてインデックスを追加します。
-
Django に統合します。
RunSQLでビューを作成します。managed = Falseを設定した非管理モデルとして表現します。- 非管理モデルのフィールドを SQL の出力列と一致させます。
- アプリケーションの境界で書き込みを不可能にします。
-
更新を実装します。
- 単純な更新には
REFRESH MATERIALIZED VIEWを使用します。 REFRESH MATERIALIZED VIEW CONCURRENTLYは、ビューにデータが格納済みで、条件を満たす一意インデックスがある場合に限って使用します。- 管理コマンド、タスクキュー、またはデータベースジョブを通じて更新をスケジュールします。
- 単純な更新には
マイグレーション、モデル、更新のテンプレートについては、materialized-view-patterns.md を参照してください。
安全上の注意
- マテリアライズドビューは保存済みのデータを返すため、自動的に最新の状態になるわけではありません。
- 同時更新を使用すると読み取りをブロックせずに済みますが、前提条件があり、ビューごとに一度に実行できる更新は 1 つだけです。
- 大規模なビューの更新は、データベースに大きな負荷をかける可能性があります。読み取りとは分けて測定してください。
検証
SQL が元のテーブルに対して正しいことを検証し、非管理モデルによる読み取りをテストし、更新の動作を確認したうえで、更新前後の読み取りレイテンシを測定します。
コメント
Markdown 対応