システムアーキテクチャ

データストアの配置方針 ― RDBMS/NoSQL/キャッシュ/検索の組合せ ― 生成AI時代のアーキテクチャ超入門

データストアの配置方針 ― RDBMS/NoSQL/キャッシュ/検索の組合せ ― 生成AI時代のアーキテクチャ超入門

本記事について

当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「システムアーキテクチャ」カテゴリ第6弾として、データストアの全体配置方針について解説する記事です。

2026年は RDBMSKVS・検索エンジン・時系列DB・ベクトルDB・オブジェクトストレージを用途特化で組み合わせるのがデフォルト「何をどこに置くか」の設計が運用コストとレイテンシを決めます。本記事はシステム全体の配置方針に特化し、各カテゴリ概要・Polyglot Persistence・スケール戦略・バックアップ設計まで扱います(個別アプリの詳細選定は別カテゴリ「データアーキテクチャ」へ)。

本記事のテーマについてさらに詳しく知りたい方は『システム設計のセオリーと実践方法がこれ1冊でしっかりわかる教科書』も参考にしてみてください。

そもそもデータストアとは何か

データストアとは、ざっくり言えば「アプリケーションが扱うデータを保管・取り出しする仕組みの総称」です。

図書館を想像してください。書籍は本棚(RDBMS)に整然と並べ、よく参照される辞典はカウンター横(キャッシュ)に置き、ポスターや写真は別棟の倉庫(オブジェクトストレージ)に収めます。1か所に全部詰め込むと溢れるし探せない──用途ごとに最適な保管場所を選ぶのが、データストアの配置方針です。

本記事の守備範囲

データストア選定は「システムアーキテクチャ段階の全体方針」「個別アプリケーションアーキテクチャでの詳細選定」の2段階で決まります。本記事は前者、つまりシステム全体として何をどう配置するかに特化します。

記事扱う範囲
本記事(システムアーキテクチャの全体方針)システム全体の配置方針 / 各カテゴリの概要 / Polyglot Persistence / スケール戦略
個別アプリの詳細選定(別カテゴリ)個別アプリの詳細選定 / 判定フロー / データ量別の段階選び
データモデリング(別カテゴリ)テーブル設計・正規化・主キー・インデックス
データ基盤(別カテゴリ)DWH / データレイク / BI 連携

本記事の立場は「システムアーキテクチャ設計時にRDBMS / NoSQL / キャッシュ / 検索 / オブジェクトストレージをどう組み合わせるか」の全体地図です。データ量や機能要件に基づく具体の選定フローは別カテゴリ「データアーキテクチャ」の記事で扱います。

本記事の問いは「どのデータストア種を組み合わせるか」です。個別の選定フローは別カテゴリで深掘りします。

なぜデータストアの配置方針が重要なのか

もしデータストアの配置を深く考えずに進めたらどうなるか。「とりあえず全部RDBMSに入れておこう」で始めたシステムが、半年後にアクセス集中でレスポンス10秒超え──慌ててキャッシュを足そうにも、アプリのデータアクセス層を丸ごと書き直す羽目になります。逆に流行りに乗って NoSQL を選んだら、後から「やっぱりJOINが必要だった」と気づいても、数千万件のデータ移行は数日〜数週間のダウンタイムを伴います。

データストアの選定は、システムアーキテクチャの中で最も後戻りが困難な判断です。アプリのコードは書き直せても、スキーマと大量データが積み上がった後のDB移行は桁違いに重いのが現実です。現在は RDBMSNoSQLキャッシュ・検索エンジン・オブジェクトストレージを組み合わせるのが本命で、ここで「何を選んだか」が向こう5〜10年を左右します。

「後から考える」が通用しない領域です。最初の判断が重要になります。

主な4カテゴリ

データストアは用途別に4つのカテゴリに大別できます。それぞれ得意な用途が異なるため、1つのシステム内で複数を組み合わせるのが現代の主流です。

カテゴリ用途代表例
RDBMS構造化データ・整合性重視PostgreSQL・MySQL
NoSQLスケール重視・柔軟スキーマDynamoDB・MongoDB
キャッシュ高速アクセス・一時データRedis・Memcached
検索エンジン全文検索・集計Elasticsearch・OpenSearch

加えてオブジェクトストレージ(S3等)が画像・動画・添付ファイルの保管先として使われます。どのデータをどこに置くかの設計センスが、アプリ全体のパフォーマンスと運用コストを決めます。

RDBMS(リレーショナルデータベース)

RDBMS は、データを表(テーブル)形式で管理し、SQLで操作する伝統的なデータベースです。ACIDトランザクション(Atomicity 原子性・Consistency 一貫性・Isolation 独立性・Durability 永続性)による強整合性を保証し、金融・業務アプリなどデータの正確性が絶対に必要な領域で圧倒的な実績があります。

製品特徴使いどころ
PostgreSQLOSS決定版・JSON/全文検索/GIS対応新規開発の第一候補
MySQL普及度・軽快・情報量Webサービス・既存互換
MariaDBMySQLフォーク・完全OSSMySQL代替・商用回避
Oracle Databaseエンタープライズ・高機能金融・基幹系
SQL ServerMicrosoft系と密結合.NET・Windows環境
Amazon AuroraMySQL/PG互換・クラウド最適化AWS上の新規構築

新規案件で特別な理由がない限り、PostgreSQLを選ぶのが鉄板です。JSON型・全文検索・GISなど多機能さがOSSの中で突出しており、拡張性でも他を引き離しています。MySQLは古くからのWebサービスに多く、今も現役で戦えますが、新規選定では PostgreSQL に軍配が上がる場面がほとんどです。

新規の第一候補はPostgreSQLです。迷ったらここから疑います。

NoSQLの4系統

NoSQL「Not Only SQL」の略で、RDBMS以外のデータベース全般を指します。スケール性と柔軟なデータ構造が特徴で、用途により4つの系統に分かれます。

系統代表得意領域
KVS(キーバリュー)Redis / DynamoDB / Memcachedキャッシュ・セッション
ドキュメントMongoDB / DocumentDB / FirestoreJSON形式・階層データ
ワイドカラムCassandra / HBase / BigTable時系列・大量書き込み
グラフNeo4j / Neptuneソーシャル・関連分析

NoSQLの基本思想はRDBMSの整合性を犠牲にしてでもスケールさせたい」です。ECの商品カタログ・SNSの投稿履歴・IoTログのような「大量データを高速に書き込みたい」ケースで本領を発揮します。逆に整合性が命の業務アプリで選ぶのは筋が悪いです。

DynamoDB と Redis

DynamoDB(AWS製)とRedisは、NoSQLの中でも特に実務でよく使われる2大製品です。似たKVSですが、得意領域がはっきり違います。

DynamoDBはフルマネージドの分散KVSで、「スケールを意識せず書き込める」のが最大の利点です。理論上無限にスケールし、サーバーレスアーキテクチャと相性が良いため、高トラフィックAPIで選ばれます。ただしJoin・集計が苦手で、RDBMSと逆に「先にアクセスパターンを決めてテーブル設計する」発想が必要です。

Redisはインメモリキャッシュ用途のデファクトスタンダードです。メモリ上にデータを置くためミリ秒未満のレスポンスを実現し、セッション管理・ページキャッシュ・レート制限・ランキング(ZSET)・Pub/Sub など用途が幅広いです。

用途推奨
固定アクセスパターンの大規模書き込みDynamoDB
セッション・ページキャッシュRedis / ElastiCache
リアルタイムランキング・リーダーボードRedis(ZSET)

DynamoDBはスケール特化、Redisはキャッシュ特化。役割が違います。

検索エンジン

検索エンジンは、文章や商品説明などのテキストの中身を素早く検索する専用DBです。RDBMSでも LIKE '%キーワード%' は可能ですが、数万件を超えると遅すぎて実用にならないため、専用の検索エンジンを別に用意するのが定石です。

製品特徴使いどころ
Elasticsearch / OpenSearch全文検索のデファクト・ログ分析も可本格的な検索・ログ集約
Meilisearch / Typesense軽量・モダン・セットアップ容易中小規模アプリ
PostgreSQL全文検索追加DB不要・pg_bigm等小規模・手軽に始める
AlgoliaマネージドSaaS・UI充実スピード重視のサービス

日本語全文検索では、形態素解析(Kuromoji)の設定が鍵を握ります。日本語は単語の切れ目が明確でないため、適切な辞書を使わないと「東京都」「東京」「都」に分解される、といった検索漏れが連発します。

オブジェクトストレージ

オブジェクトストレージは、画像・動画・PDFなどのファイルを保管するための専用ストレージです。RDBMSに画像を直接入れるとDBが肥大化して性能が落ちるので、メタデータはRDBMS、実体はオブジェクトストレージ」という分離が基本です。ここを守らないのは典型的な地雷踏みです。

サービス提供元特徴
Amazon S3AWS業界デファクト・豊富な統合
Azure Blob StorageAzure階層ストレージ充実
Google Cloud StorageGCPBigQuery連携が強力
Cloudflare R2CloudflareEgress無料で低コスト

CDN(CloudFront等)と組み合わせると、配信の高速化とトラフィックコスト削減が同時に効きます。Cloudflare R2 は S3互換で帯域課金がないため、動画配信など帯域が支配的な用途で注目されています。

用途別の選び方

複数のデータストアを役割ごとに使い分けるのが現代の主流です。典型的な構成は以下の通りです。

用途推奨データストア
トランザクション主体のアプリPostgreSQL / Aurora
高速セッション・キャッシュRedis / ElastiCache
固定キーの超スケール書き込みDynamoDB
商品検索・ログ集計OpenSearch / Elasticsearch
時系列メトリクスTimestream / InfluxDB
画像・動画・添付ファイルS3 / R2(オブジェクトストレージ)
データ分析・BIBigQuery / Redshift / Snowflake

用途ごとに最適なDBを組み合わせる考え方を Polyglot Persistence(多言語永続化)と呼びます。

Polyglot Persistence

Polyglot Persistence は、1つのシステムで複数のデータストアを組み合わせて使う設計思想です。「1つのDBで全部」は設計的には綺麗に見えても、用途ごとに最適なDBを選ぶ方が性能・コスト・運用性のバランスで勝ちます。

Polyglot Persistence の概念図 用途ごとに最適なデータストアを組み合わせる設計思想 アプリケーション ECサイト・SaaS等 PostgreSQL トランザクション主体 注文・ユーザー・決済 ACIDが必須のデータ 整合性が最重要 Redis キャッシュ・セッション 高速読み取り セッション・API結果 速度が最重要 OpenSearch 全文検索・ログ 商品検索・ログ集計 あいまい検索 検索性が最重要 S3 オブジェクトストレージ 画像・動画・添付 大容量ファイル 容量・コストが最重要 非同期メッセージキュー(SQS / Kafka)で連携 = 障害の連鎖を防ぐ 「1DBで全部」は過去の話。役割ごとに最適な道具を使うのが現代流

ECサイト・SaaSプロダクトでは、この種の分業構成がほぼ標準です。各データストアは同期的に連携せず、非同期メッセージキュー(SQS/Kafka等)でつなぐのが障害耐性の観点でも筋がいい設計です。同期で繋いでしまうと、1つのDBが落ちた瞬間に連鎖停止が起きます。

「1DBで全部」は過去の話。役割ごとに最適な道具を使うのが現代流です。

スケールとレプリケーション

データ量やアクセス数が増えると、DBは単一サーバーで処理しきれなくなります。レプリケーションシャーディングでスケールさせるのが基本戦略です。

方式仕組み用途
リードレプリカ読み取り専用のコピーを増やす読み取り重視のアプリ
シャーディングデータを複数サーバーに分散書き込みも分散したい
マルチAZ可用性ゾーン冗長化高可用性要件
マルチリージョン地理的冗長・DR対策災害対策・グローバル配信

クラウドマネージドDB(Aurora・Cloud SQL・Cosmos DB)を使うと、これらの複雑な構成をスイッチひとつで有効化できます。自前構築との運用コスト差は圧倒的で、「自前でシャーディングを組むのは相応の体力がないと手を出さない方がいい」というのが実務的な結論です。

バックアップとリストア

データストアのバックアップ戦略は、障害・誤操作・ランサムウェア対策の最後の砦です。肝心なのは「取っているか」ではなく「戻せるか」リストア訓練を定期実施しないと、いざという時に復旧できない事例が今でも繰り返し発生しています。

観点内容
RPO(Recovery Point Objective)何分前まで戻せるか(データ損失の許容量)
RTO(Recovery Time Objective)何分で復旧するか(停止時間の許容量)
PITR(Point-in-Time Recovery、任意時点復元)過去の任意時点への復元機能
クロスリージョンバックアップ別リージョンに保管し災害対策
保管期間法的要件(税務は7年等)を満たす

クラウドマネージドDBはPITRが標準機能で、過去5〜35日の任意の時点に戻せます。年次・月次の長期保管は別途エクスポートが必要なケースが多いです。

データ量・トラフィック別のDB選定

「なんとなくPostgreSQL」は正解率が高いですが、データ量とトラフィックの段で選ぶ最適解が変わります。下記は2026年4月時点の目安です。

データ量書き込み RPS読み取り RPS推奨メインDB補助の典型構成
〜10万行〜10〜100PostgreSQL(単一インスタンス)なし
〜1000万行〜100〜1,000PostgreSQL + リードレプリカ1本Redis(セッション)
〜10億行〜1,000〜10,000Aurora / Cloud SQL + レプリカ複数Redis + OpenSearch
〜100億行〜10,000〜100,000Aurora + シャーディング or DynamoDBRedis + Kafka + ClickHouse
100億行〜10,000〜100,000〜DynamoDB / Spanner / CassandraKafka + データレイク

データ量が1テーブル1,000万行を超えたらインデックス設計とパーティション検討、1億行でシャーディング検討、10億行でNoSQL選択肢が現実的。というのが経験則です。先にキャッシュ(Redis)を足すだけで改善する場面は多く、DBを替える前にキャッシュで済む検証を先にすべきです。

悩んだらPostgreSQL単一 → キャッシュ追加 → レプリカ追加 → シャーディングの順。いきなりNoSQLは筋が悪いです。

AI時代の判断軸 ― データストア選定はどう変わるか

AI駆動開発が前提になると、データストアの選定軸にスキーマをコードで管理できるか」「AIがクエリ・マイグレーションを正確に書けるか」が加わります。ただ、それだけの話ではありません。AI時代はデータストアの使われ方そのものが変わってきています。

SQLとAI生成精度の関係

AIにコードを書かせたとき、SQLの精度は他のクエリ言語と比べて圧倒的に高いです。50年の歴史で蓄積された膨大な学習データがあるので、当然と言えば当然です。一方、DynamoDBの PartiQL や MongoDBの集約パイプラインは独自性が高く、AIが正しく書けないケースが頻繁に発生します。

AI時代に有利AI時代に不利
PostgreSQL + ORM(Prisma/Drizzle/TypeORM)独自クエリのNoSQL(AIが不慣れ)
SQLベース・標準規格に近いベンダー独自のGUIデータ操作
マイグレーションをコードで管理スキーマがコード外にある
Infrastructure as CodeでDB構成も管理コンソール手作業でのDB設定

これはNoSQLを使うな」という意味ではありません。DynamoDBやRedisが最適な用途は変わりません。ただし、AIにクエリを書かせる前提で設計するなら、アクセスパターンを型で定義する(TypeScript型定義 → DynamoDB操作コード生成)など、AIが正確にコードを書ける仕組みを意図的に用意しておく必要があります。

ベクトルDBという新しい層

2024年以降、Polyglot Persistence にベクトルDBという新しい層が加わりました。RAG(Retrieval-Augmented Generation)を使ったAI機能をプロダクトに組み込む場合、テキストや画像をベクトル化して格納・検索する専用のデータストアが必要です。

製品特徴使いどころ
pgvector(PostgreSQL拡張)既存PGに追加するだけ・運用楽中小規模のRAG・まず始める
Pineconeフルマネージド・スケール容易大規模ベクトル検索・SaaS組み込み
Weaviate / QdrantOSS・カスタマイズ自由自前ホスト・コスト最適化

判断の分かれ目は「既存のPostgreSQLにpgvectorを足すか、専用DBを立てるか」です。ベクトル数が100万件以下ならpgvectorで十分で、余計な運用を増やさない方がいい。100万件を超えて検索レイテンシが問題になったら専用DBへの分離を検討する、という段階的アプローチが現実的です。

スキーマ管理とAI活用の前提条件

AIはマイグレーションSQLの生成が得意です。「user_name列をfull_nameに改名したい」と伝えれば、expand/contractパターンに沿った3段階のマイグレーションを正しく生成してくれます。ただし、これが機能するには前提条件があります。

  1. スキーマがコードで管理されている — Prisma Schema / Drizzle Schema / SQL マイグレーションファイルがGitに入っている
  2. 既存のマイグレーション履歴がある — AIは過去のマイグレーションパターンを文脈として読み込んで、プロジェクトの慣習に合わせた出力を行う
  3. テーブル定義とアプリコードが同じリポジトリにある — AIがスキーマ変更とアプリコード変更の整合性を一度に確認できる

逆に言えば、GUIでスキーマを管理していてコードに定義がない状態では、AIはマイグレーション支援ができません。「スキーマをコードで管理する」はもはや技術的な好みの問題ではなく、AI活用の前提条件です。

AI機能をプロダクトに組み込む場合のデータ設計

プロダクトにAI機能(チャット・レコメンド・要約等)を組み込む予定がある場合、データストア設計の段階で以下を考慮しておく必要があります。後から追加しようとすると、既存テーブルとの関連付けやデータ移行で苦労します。

観点設計判断
テキストデータのチャンク管理RAG用にドキュメントを分割格納するテーブル設計。元文書とチャンクの親子関係を保持する
埋め込みベクトルの格納先pgvector で同居か、専用DB に分離か。データ量とレイテンシ要件で判断する
AIの出力ログプロンプト・レスポンス・トークン数・レイテンシを構造化して保存する。改善サイクルの生命線になる
フィードバックループユーザーの「役に立った/立たなかった」をAI出力に紐づけて保存し、精度改善に使う

選定の優先順位

  1. データの性質(強整合/結果整合/キャッシュ)でカテゴリを絞る
  2. 規模とアクセスパターンから用途別DBを足す判断(先に正規化DBで始める)
  3. スキーマをコードで管理できるかをAI時代の必須要件にする
  4. ベクトルDB の要否を早期に判断する — AI機能のロードマップがあるなら、pgvector対応のPostgreSQLを最初から選んでおく
  5. バックアップ + リストア訓練の運用コストを前提に置く

やってはいけないこと

「DBは後から変えられない」の本番を決めるのがスキーマ変更と選定ミスです。禁じ手を徹底回避します。

禁じ手なぜダメか
列のリネームを1回のマイグレーションで実施旧コードが動いているインスタンスが即死。expand/contract(列追加→両方書き込み→切替→旧列削除)で3回に分ける
1,000万行以上のテーブルに NOT NULL 列を即時追加既存レコードで制約違反、マイグレーションが何時間も戻らない
インデックス追加を通常の CREATE INDEX で実行テーブル全体がロックされ、本番が書き込み不能に。PostgreSQLなら CREATE INDEX CONCURRENTLY、MySQLなら pt-online-schema-change / gh-ost
マイグレーション前のバックアップを取らずに本番適用ミスった瞬間にリストアの道が消える
DBAがGUIで直接本番DDLを実行変更履歴が残らず、監査・再現・ロールバックが全て不可能になる
マイグレーションとコードデプロイを同一トランザクション化ロールバック時にスキーマだけ戻せない/戻せるが新旧コード共存で壊れる
マイグレーションツール(Flyway / Liquibase / Prisma Migrate)を使わずSQL手書き運用バージョン管理・再現・CI検証ができず、本番と開発のスキーマが乖離
NoSQLをRDBMSの代わりに選ぶJoinが必要になり再設計の大工事。トランザクションが絡むアプリは悩んだらRDBMS
リストア訓練なしのバックアップ運用本番障害時に「戻せない」ことが判明。取るだけでなく戻す訓練まで含めて運用
認証なし・デフォルト設定で本番公開2017年のMongoDB/Redis/Elasticsearchランサムウェア攻撃で数万台が暗号化・削除された

2017年1月31日の GitLab DB削除事件(エンジニアが本番と開発を取り違えて rm -rf、5種類のバックアップが全滅)は、バックアップ戦略だけでなくDB操作の権限管理・二重確認の重要性を示す事例です。

スキーマ変更はマイグレーションツール + PR レビュー + 段階適用」の3点セットを省略すると必ず事故ります。

MongoDB の「なんとなく」事件(業界事例)

スタートアップでスキーマを自由に変えたいから」という理由だけで MongoDB を選び、半年後にECの注文履歴から売上レポートを集計するフェーズに入った瞬間に、Join もトランザクションもほしい仕様が次々に出てきて現場が止まった。という事例は一度ならず聞かれます。結局 PostgreSQL に移行し、移行作業そのものに3ヶ月を溶かしたチームもあるといいます。

2018年頃、似たような流れで MongoDB 採用のスタートアップを見ていたことがありますが、注文集計の要件が出た瞬間にクエリが書けず、結局BIツールに回すためにPostgreSQLへの日次同期を入れる羽目になったと聞きました。

教訓は、「DB選定は今の楽さではなく、1年後の要件で決める」ということです。特にトランザクションが絡むアプリは、悩んだらRDBMSから始める。必要になったときだけNoSQLを足す、の順序を逆にすると痛い目を見ます。

スキーマレスが楽」は、集計が始まるまでの話です。

決めるべきこと — 自分のプロジェクトでの答えは?

以下の項目について、自分のプロジェクトの答えを1〜2文で言語化してみてください。曖昧なまま着手すると、必ず後から「なぜそう決めたんだっけ」が問われます。

  • メインDB(PostgreSQL / MySQL / Aurora / DynamoDB)
  • キャッシュ戦略(Redis / Memcached / アプリ内 / CDN
  • 検索基盤(OpenSearch / PostgreSQL全文検索 / SaaS
  • ファイルストア(S3 / R2 / Blob Storage)
  • バックアップ方針RPO / RTO / 保管期間)
  • 暗号化(保存時・転送時・鍵管理)
  • スケール戦略(レプリカ / シャーディング / マルチリージョン)

決定理由の残し方

データストアの選定は長期にわたってシステム全体に影響するため、なぜその製品を選んだかをADRとして記録に残すことが重要です。以下に具体例を示します。

項目内容
タイトルメインDBにPostgreSQLを採用
ステータス承認済み
コンテキスト受注管理システムのメインDBを選定する必要がある。トランザクション整合性と全文検索の両立が要件
決定PostgreSQL 16(AWS Aurora PostgreSQL互換)を採用
理由・ACID準拠で金額計算に安全
・JSON型・全文検索・地理情報を標準サポートし、専用DBを減らせる
・Aurora互換でリードレプリカによるスケールアウトが容易
却下した代替案MySQL:JSON機能とパーティショニングがPostgreSQLより限定的。DynamoDB:集計クエリやJOINが必要な業務要件に合わない
結果検索はPostgreSQL全文検索で初期対応し、将来的に検索量が増えた段階でOpenSearchを追加する方針とする

数か月後・数年後に「なぜMySQLではなくPostgreSQLなのか」を新メンバーが問い合わせてくる場面は必ず訪れます。後から見返したとき「なぜこの選択をしたか」が一目でわかることが、ADR の最大の価値です。

この記事に関連する記事

https://senkohome.com/arch-intro-system-cloud-vendor/ https://senkohome.com/arch-intro-system-security/ https://senkohome.com/arch-intro-system-application-types/

まとめ

本記事はシステムアーキテクチャレベルでのデータストア配置方針について、Polyglot Persistence・スケール戦略・スキーマ変更の鬼門まで含めて解説しました。如何だったでしょうか。

新規はPostgreSQL中心に、用途特化を必要最小限で足すキャッシュにRedis、検索にOpenSearch、画像にS3)のが2026年の鉄板です。最初から多層構成は運用が破綻するので、足りなくなってから足す順序が現実的です。

次回は「ネットワーク」VPC・サブネット・CIDR設計)について解説します。

シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方

本記事で扱った内容の詳細は AWS データベースサービス も合わせて参考にしてください。

それでは次の記事も閲覧いただけると幸いです。