この記事で分かること/分からないこと
- 分かること: RAGを構築する際、保管対象をどこに置くかという判断がなぜ分かれるのか
- 分かること: 保管を分けずに全部を1か所にまとめて置くと何が起きるか
- 分からないこと: クラウド各社のストレージ単価がいくら違うか(本記事では扱わない)
- 分からないこと: 保管費用の総額(テナント数やデータ量に依存するため一般化できない)
保管対象によって置き場所を変えるという設計
自社実装では、RAGを構築する過程で生じるデータを、性質ごとに置き場所を分けている。投入する原本(CSV・JSON・規程・PDFなど)、ビルド時にだけ使う生成物(根拠の全集合・質問バリエーション)、検証レポートのフルJSONはR2に置き、確定配信の際に毎回引く索引と、テナント・課金台帳・会話ログ・ビルド索引といった構造化データはD1に置いている(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。分ける基準は容量の大小ではなく、実行時に読むかどうかである。
実行時に読むかどうかが分岐点になる
投入原本や生成物は、ビルドが終われば以後の応答生成では読まない。実行時に読むのは、ビルドの結果できあがった索引だけである。この索引を軽量に保ち低レイテンシで引けるようにするため、確定配信の索引はD1に置いている。実行時に触るのが索引だけという構成のため、応答1件あたりの実行コストはおよそ0円から1円、実測では0.12円/session に収まっている(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。一方、ビルド時には生成と盲検を含めて1テナントあたりおよそ1,500円かかっており(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)、ビルド時と実行時ではコストの性質が異なる。この2つの費用をどう区別して見るかは、評価コストと実行コストの違いを整理した記事で扱っている。
全部を1か所に置くとどうなるか
この分け方をやめて、全部を1つのストレージにまとめたらどうなるか。すべてをR2のようなオブジェクトストレージに置くと、テナントや課金台帳、会話ログのような構造化データもオブジェクトとして扱うことになり、集計やJOINをかけたい場面(どのテナントで利用が多いか、どこで失敗が出ているか)で、都度オブジェクトを取り出して自前で集計する処理が要る。逆に、全部をD1のような構造化ストレージに置くと、投入原本や生成物のように容量が大きく実行時には読まないデータまでデータベースに載ることになり、索引を軽量に保つという狙いが崩れて、実行時に触る対象が肥大していく。保管を分けているのは、集計ができなくなる方向と、索引が肥大する方向の、両方の失敗を避けるためである。
差分判定だけを軽く持つという設計
原本を更新するたびに全体を作り直すのは無駄が大きい。そこで、差分があったかどうかを判定するためのchecksumだけをD1に持ち、原本そのものはR2に置いたままにしている(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。比較だけならchecksumの一致・不一致で足り、原本を毎回読み比べる必要がない。これも、低頻度にしか触らない大きなデータと、頻繁に参照する軽い判定情報を分けるという、同じ考え方の延長にある。
まとめ: 保管費用は読む頻度で設計する
保管費用を考えるとき、容量の大小だけでなく、実行時に読むか・低頻度でしか読まないかという軸で置き場所を分けると、実行コストと集計のしやすさの両方を保ちやすくなる。この設計を実際にどう監視するかは運用監視の費用を扱った記事、障害が起きた際にこの設計がどう効いてくるかは障害対応の費用を扱った記事で扱っている。
よくある質問
Q1. なぜ確定配信の索引だけD1に置くのか
実行時に毎回読むデータだからである。索引を軽量な構造化ストレージに置くことで、低レイテンシを保ちながら実行時コストをおよそ0円から1円、実測0.12円/sessionに抑えている(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。
Q2. 検証レポートやビルド時の生成物はなぜR2に置くのか
容量が大きく、実行時には読まないデータだからである。検証レポートはUIが1回だけ取得すればよく、生成物もビルド時にしか使わない。実行時に毎回触る索引と同じ場所に置く理由がない。
Q3. 保管を分けずに全部を1つのストレージに置くとどうなるのか
全部をオブジェクトストレージに置けば構造化データの集計やJOINがしにくくなり、全部を構造化ストレージに置けば容量の大きいデータまでデータベースに載って索引が肥大する。どちらの方向にも失敗する。
Q4. 差分判定用のchecksumを別に持つ理由は何か
原本を毎回読み比べなくても、checksumの比較だけで変更の有無が分かるからである。checksumはD1に置き、原本そのものはR2に置いたままにしている(出所: docs/STORAGE_AND_BILLING.md、確認日2026-09-06)。
RAGのサービス全体を比較したい場合はRAGサービス比較15選を参照してほしい。保管費用を含めたRAG構築費用について相談したい方は、お問い合わせから編集部までご連絡いただきたい。
- ハブ記事: RAGサービス比較15選
- 関連記事: 評価コストと実行コストの違い
- 関連記事: 運用監視の費用
- 関連記事: 障害対応の費用