データ保存戦略
結論: 保存する方が圧倒的に安い
毎回取得 vs 保存の比較
| 毎回取得 | 保存(キャッシュ) | |
|---|---|---|
| API呼び出し | 検索のたびにYouTube API + 字幕取得 | 初回のみ |
| レスポンス速度 | 5〜30秒(字幕取得に時間かかる) | 0.1〜1秒(DB検索のみ) |
| YouTube APIクォータ | すぐ枯渇(1日10,000ユニット) | ほぼ消費しない |
| レート制限リ スク | 高い(BANされる可能性) | 低い |
| DB費用 | 不要 | 月$0〜$25 |
具体例: チャンネルA(動画500本)を100人が1日1回検索した場合
| 毎回取得 | 保存 | |
|---|---|---|
| 字幕取得回数/日 | 50,000回 | 500回(初回のみ) |
| YouTube API消費 | 即クォータ超過 | ほぼゼロ |
| ユーザー体験 | 毎回待たされる | 即時表示 |
→ 毎回取得だと1日で破綻する
おすすめ構成
初回: ユーザーが検索時にチャンネルを指定 → 字幕を全取得 → Meilisearchに保存
検索: Meilisearchに対してクエリ(YouTube APIを使わない)
差分: 検索時に前回取得以降の新規動画を自動チェックし、あれば差分取得
データ量の見積もり
| 規模 | データ量 |
|---|---|
| 動画1本の字幕 | 5〜50KB |
| 1,000本のチャンネル | 5〜50MB |
| 10,000チャンネル分 | 50〜500GB |
検索速度の対策
| 方法 | 速度 | コスト |
|---|---|---|
PostgreSQL LIKE | 遅い(数秒) | 追加なし |
| PostgreSQL 全文検索 (tsvector) | 速い | 追加なし |
| Meilisearch / Typesense | 爆速(数ms) | +$0〜$30/月 |
| Elasticsearch | 爆速 | +$50〜$100/月(高い) |