検索インフラ調査(2026-04-08)
背景
既存の 02-cost-estimation.md では Meilisearch のコストを「動画1本 = 1ドキュメント」で試算していたが、実際にはセグメント単位(1動画あたり約500セグメント)で投入するため、ドキュメント数が想定の500倍になる。これにより Meilisearch のコストが1〜2桁過小評価されていることが判明した。
本ドキュメントは、R2・Meilisearch・代替検索エンジンの役割分担とコスト構造を整理し、今後のアーキテクチャ判断の材料とする。
1. 各ストレージの役割
確定した役割分担
| ストレージ | 役割 | 保存するデータ |
|---|---|---|
| Cloudflare R2 | 字幕のプライマリストレージ(原本) | タイムスタンプ付き字幕JSON(セグメント単位) |
| Meilisearch | 検索インデックス + ドキュメント保持 | 検索に必要なフィールドを含むセグメント単位のドキュメント |
| Turso | リレーショナルデータ | チャンネル・動画メタデータ、ユーザー情報、クレジット管理 |
R2の位置づけに関する訂正
04-data-strategy.md では R2 を「バックアップ」と記載しているが、実際はプライマリストレージとして機能する。 理由:
- Meilisearch は投入したドキュメントの元データを必ず内部保持する(インデックスだけの保存は技術的に不可能)
- そのため R2 は「Meilisearch が壊れた場合の復旧元」かつ「UI表示用の詳細データ取得先」として機能する
- YouTube API から再取得する方法もあるが、APIクォータ消費と時間がかかるため、R2 からの再インデックスの方が実用的
字幕の保存先: R2 vs Turso
字幕データは「動画ID → JSON」のキーバリューアクセスのみで SQL は不要。コスト面でも R2 が圧倒的に有利。
| 規模 | R2 月額 | Turso 月額(Scaler $29基本料含む) |
|---|---|---|
| 10万動画(1GB) | ≈$0(無料枠内) | $29 |
| 100万動画(10GB) | $0.78 | $29 |
| 1000万動画(100GB) | $7.80 | $67 |