データアーキテクチャ

データストア選定 ― RDB中心+用途特化の使い分け ― 生成AI時代のアーキテクチャ超入門

データストア選定 ― RDB中心+用途特化の使い分け ― 生成AI時代のアーキテクチャ超入門

本記事について

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

2026年は1アプリで複数ストアを用途別に使い分けるのが普通になりました。本記事はアプリ単位の詳細選定に特化し、RDBKVS/ドキュメント/列指向/時系列/検索/ベクトルの各強み弱み、データ量×用途別の段階表を提示します(システム全体の配置方針は別記事「システムアーキテクチャ」へ)。

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

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

データストア選定とは、ざっくり言えば「このアプリのデータをどの種類のデータベースに預けるかを決めること」です。

工具箱を想像してください。ネジを締めるならドライバー、釘を打つならハンマー、木を切るならノコギリ──1つの万能工具では全ての作業に対応できません。データベースも同じで、「正確な取引記録」ならRDB「大量アクセスへの高速応答」ならKVS「全文検索」なら検索エンジンと、用途によって最適な道具が違います。現代のアプリは複数のデータストアを組み合わせて使うのが当たり前で、その選び方がアプリ全体の速度・拡張性・開発効率を左右します。

この記事の守備範囲

データストア選定はシステム全体の配置方針個別アプリの詳細選定の2段階に分かれます。本記事は後者、つまり「アプリ単位で具体的なデータストアを選ぶ実務」に特化します。

記事扱う範囲
10/06 データストアシステム全体の配置方針 / Polyglot Persistence / スケール戦略の全体地図
本記事個別アプリの詳細選定 / 早期判定フロー / データ量×用途別の段階選び
40/02 データモデリングテーブル設計・正規化・主キー・インデックス
40/03 データ基盤DWH / データレイク / BI連携

本記事の問いはこのアプリにはどのDB種が適するか全体配置はシステム章で扱います。

なぜデータストア選定が重要なのか

もしデータストア選定を間違えたらどうなるか。選択を誤ると速度が出ない・スケールしない・開発効率が落ちるといった根本的な問題に直結します。しかも一度運用が始まるとデータ移行は極めて高コストで、後から変えるのは現実的に不可能に近い判断です。

データストアは全てのアプリケーション設計の土台です。DBが決まらないとエンティティ設計・API設計・トランザクション境界の全てが決まりません。さらに、データストアはクラウドベンダーとの結びつきも強く、AWS Aurora から GCP Cloud SQL への移行のような「比較的近い製品間ですらハードルが高い」のが実情です。

とりあえずRDBは多くの場合正解。ただし例外を知っておくことが設計者の役目です。

主要な分類

データストアの主要分類 工具箱と同じ。ネジにはドライバー、釘にはハンマー。用途で道具を選ぶ RDB 関係DB ACID整合性・JOIN PostgreSQL / MySQL 金額・在庫など ミスが許されない業務 迷ったらこれ KVS Key-Value 超高速単一キー参照 Redis / DynamoDB セッション・キャッシュ ランキング・カウンタ ドキュメントDB 柔軟なJSON保存 MongoDB / Firestore スキーマが揺れる プロトタイプ・CMS 列指向DB OLAP 集計・分析が桁違いに速い BigQuery / Snowflake 大量データの集計 BI・レポーティング 時系列DB メトリクス・センサー値 InfluxDB / TimescaleDB IoT / モニタリング 検索エンジン 全文検索・ファセット Elasticsearch / OpenSearch 商品検索・ログ検索 ベクトルDB 類似検索・AI埋め込み pgvector / Pinecone RAG / セマンティック検索 AI時代の必須 グラフDB 関係性の探索 Neo4j SNS / レコメンド 判定の起点: ACID必須? → RDB | 超高速キー参照? → KVS | 大量集計? → 列指向 | AI検索? → ベクトル 既定は PostgreSQL + Redis の2段構え。9割のシステムはこれでカバーできる 用途特化DBは「RDBで不足」が見えてから追加する
カテゴリ強み代表例
RDB(関係DB)ACID整合性・JOIN・枯れているPostgreSQL・MySQL
KVS超高速な単一キー参照Redis・DynamoDB
ドキュメントDB柔軟なスキーマ・JSON直接保存MongoDB・Firestore
列指向DB(OLAP)集計・分析が桁違いに速いBigQuery・Snowflake
時系列DBメトリクス・センサー値の蓄積InfluxDB・TimescaleDB
検索エンジン全文検索・ファセット検索Elasticsearch・OpenSearch
ベクトルDB類似検索・AI埋め込みpgvector・Pinecone

早期の判定フロー

質問を上から順に判定していくと、自分のユースケースに最適な第一候補が1つ決まります。

ACID整合性必須?
  └ Yes → RDB(PostgreSQL)
  └ No  → 単一キーで超高速?
            └ Yes → KVS(Redis/DynamoDB)
            └ No  → スキーマが揺れる?
                      └ Yes → ドキュメントDB
                      └ No  → 大量データの集計分析?
                                └ Yes → 列指向DB(BigQuery/Snowflake)
                                └ No  → 類似検索・AI埋め込み?
                                          └ Yes → ベクトルDB(pgvector)
                                          └ No  → 全文検索?
                                                    └ Yes → OpenSearch
                                                    └ No  → 時系列DB

既定はPostgreSQL + 必要に応じてキャッシュ(Redis)の2段構えで9割のシステムはカバーできます。

RDB(関係データベース)

行と列で構造化したデータをSQLで扱う、最も伝統的かつ強力なデータストアです。ACID整合性(原子性・一貫性・独立性・永続性)が保証されており、金額計算や在庫管理のようなミスが許されない業務で鉄板の選択肢です。JOINで複数テーブルを組み合わせる柔軟性も他のDBの追随を許しません。

弱点は「水平スケール(サーバーを増やして性能を上げる)が難しい」点と、スキーマ変更が重い」点ですが、クラウド時代のマネージドRDB(Aurora・Cloud SQL)はこれらをかなり解消しており、中規模以下ではRDB一択と言って差し支えありません。

メリットデメリット
ACID整合性が堅牢水平スケールが難しい
JOINで柔軟にデータ取得スキーマ変更のコストが高い
標準SQLで学習資産が豊富非構造化データは苦手
エコシステムが成熟超大量データでは性能劣化

代表例:PostgreSQL・MySQL・SQL Server・Oracle

特段の理由がなければPostgreSQL。全文検索・JSON・地理情報まで標準搭載で、困る場面が極めて少ないです。

KVS(Key-Value Store)

キー1つから値を取り出す単純な構造に特化したDBです。検索もJOINもできない代わりに、1ミリ秒以下のレスポンスと無限に近い水平スケール性を持ちます。セッション情報・キャッシュ・ランキング・レート制限など、「大量のシンプルな参照」が発生する場面で威力を発揮します。

DynamoDBのような「メインDBとしても使えるKVSもありますが、JOINやトランザクションの制約が厳しく、業務システムのメインDBには不向きです。多くの現場ではRDBキャッシュ層としてRedisを併用するのが標準パターンです。

メリットデメリット
超高速な読み書きJOIN・複雑な検索不可
水平スケール容易スキーマ制約が乏しい
実装がシンプル複数キー跨ぎの整合性が困難
キャッシュとして優秀メインDBには設計難度が高い

代表例:Redis・Memcached・DynamoDB

キャッシュ層にはRedis一択。メインDBとして使うならDynamoDBが選択肢ですが、設計は慎重に進めます。

ドキュメントDB

JSON形式のドキュメントをそのまま保存するDBです。スキーマを事前定義せず、レコードごとに違う構造でも格納できるため、仕様変更が多い初期フェーズや、構造が定まらないログデータの蓄積に向きます。アプリ側のオブジェクトをそのまま保存できる手軽さも魅力です。

一方、スキーマが曖昧になりがちでデータ品質の低下・JOINできず設計が難しくなるといった問題が出やすく、規模が大きくなるほど RDB の方が楽になるのが実情です。MongoDB 全盛の2010年代が過ぎ、現代は「PostgreSQLのJSONBJSON Binary、高速にインデックス検索できるJSON保存型)で代替」するケースが増えています。

メリットデメリット
スキーマレスで柔軟データ品質が落ちやすい
JSONそのままで保存可JOINが不得意
初期開発が速い規模が大きいと破綻しやすい
階層データの表現が自然ACID保証が限定的(製品による)

代表例:MongoDB・Firestore・CouchDB

現代はPostgreSQLのJSONB型で代用するのが主流。純粋なドキュメントDBの出番は減少傾向です。

列指向DB(OLAP)

分析クエリに特化した構造のDBです。行ではなく列単位でデータを格納するため、「1000万行の売上合計」のような集計処理が桁違いに速く(秒単位 → 数ミリ秒)、DWH(データウェアハウス)の中核として使われます。

業務DB(RDB)と分析DB(列指向)を併用し、ETL/ELT(Extract/Transform/Load、抽出・変換・ロード、データを別DBへ移送する仕組み)で業務DBから分析DBへデータを移すのが現代の基本構成です。RDBで分析を回すと業務側の性能が落ちるため、この分離が事実上の標準になっています。

メリットデメリット
集計・分析が超高速1レコード単位の更新は苦手
TB〜PBクラスまでスケールリアルタイム更新に不向き
SQLで分析可能初期コストが高い場合あり
カラム圧縮が効いてコスト安OLTP用途には使えない

代表例:BigQuery・Snowflake・Redshift・ClickHouse

分析基盤はBigQueryまたはSnowflakeの二択。後発ClickHouseもコスト面で台頭中です。

時系列DB・検索・ベクトル

用途特化の新興カテゴリで、主役ではなく特定用途で採用するのが基本です。メインDBとして単独で使うケースは稀で、RDB列指向DBの補完として導入します。

カテゴリ用途代表例
時系列DBメトリクス・IoTセンサー・株価InfluxDB・TimescaleDB・Prometheus
検索エンジン全文検索・ログ検索・ファセットElasticsearch・OpenSearch
ベクトルDBAI埋め込みの類似検索・RAGpgvector・Pinecone・Weaviate

ベクトルDBLLM/ RAGの流行で一気に台頭した領域で、既存DBの拡張(pgvector)から専用製品(Pinecone)まで選択肢が広がっています。

PostgreSQL拡張(pgvector等)で代用可能な範囲は、新たにベクトルDBを導入しない方が良いです。1DBで済む利点は大きいです。

判断基準

① データの性質

データの性質向くカテゴリ
構造化・関係性あり(取引・顧客)RDB
単純なキー参照(セッション・キャッシュ)KVS
柔軟なJSON構造(ログ・設定)RDBのJSONB or ドキュメントDB
大量の集計・分析列指向DB(DWH)
時刻で並ぶ連続データ時系列DB
全文検索・スコアリング検索エンジン
AI埋め込みベクトルベクトルDB

既定はRDB + 必要に応じて補助DBの構成が最も安全です。「RDBで足りない部分だけ専用DBを足す」アプローチが実務では最適です。

② 規模とスケール

規模典型構成
小規模(〜100万レコード)RDBのみ
中規模(〜数億レコード)RDB + Redis(キャッシュ)
大規模(数十億〜)RDB + Redis + 列指向DW
超大規模(多地域・多ペタ)RDB + KVS + 列指向 + 検索 + 時系列

「最初から多DBは過剰設計」ですが「規模が見えているのにRDBだけは不足」という両方向のミスマッチを避ける判断が必要です。

③ チームスキル

データストアは運用が極めて重要です。誰も運用できないDBは導入してはいけないのが鉄則で、チームが慣れていないDBを導入すると障害時に復旧できず、ビジネス継続が危険に晒されます。

PostgreSQL と MySQL は「知ってる人がたくさんいる」意味で鉄板です。新興DB(CockroachDB・Neon・PlanetScale等)は魅力的な機能を持ちますが、「採用実績と社内スキルを天秤にかけて決める」必要があります。

チームが運用できるかが技術選定の第一基準。Netflixが使っているからといって真似はできません。

ケース別の選び方

個人開発・小規模SaaSのMVP

PostgreSQL単体。JSONB・全文検索・地理情報まで一発で済み、専用DBを足す必要が極めて少ないです。マネージドなら Supabase・Neon・RDS の選択肢が豊富です。

中規模業務アプリ(SaaS・社内システム)

PostgreSQL + Redis。メインデータはRDBで整合性を担保し、セッションとキャッシュはRedisで速度を確保します。この構成で数百万ユーザーまで耐えられます

BtoCで全文検索が重要(ECサイト・求人サイト)

PostgreSQL + Redis + Elasticsearch/OpenSearch。商品検索・絞り込みは専用エンジンに任せます。RDBのLIKE検索では規模に応じて遅くなっていきます。

分析ダッシュボードが重要(BI・KPI管理)

業務DB(RDB)+ 分析DB(BigQuery/Snowflake)。業務DBを直接分析すると性能が落ちるため、ETL/ELTで分析DBへ移します。小規模なら PostgreSQL のリードレプリカで代用も可能です。

AI / RAGを組み込む(チャットボット・検索強化)

PostgreSQL + pgvector が最速ルート。規模が大きければ Pinecone・Weaviate 等の専用ベクトルDBを検討します。Redis も Vector Search に対応しています。

IoT / メトリクス大量投入

TimescaleDB(PostgreSQL拡張)または InfluxDBRDBに時系列大量投入はアンチパターンです。

データ量・アクセスパターン別の選定段階表

※ 2026年4月時点の業界相場値です。テクノロジー・人材市場の変化で陳腐化するため、定期的にアップデートが必要です。

データストアは「推測で選ぶ」のは負け筋です。データ量とRPS(Requests Per Second)で機械的に絞るのが実務の定石です。

データ量書き込みRPS読み取りRPSメインDB補助構成
〜1GB / 100万行〜10〜100PostgreSQL単一なし
〜100GB / 1000万行〜100〜1,000PostgreSQL + Redis
〜1TB / 10億行〜1,000〜10,000Aurora + Redis + OpenSearchDWH検討
〜10TB / 100億行〜10,000〜100,000Aurora + DynamoDB + ClickHouseKafka
10TB〜 / 100億行〜10,000〜100,000〜DynamoDB / Spanner / Cassandra完全分散基盤

テーブル行数の数値Gate:1000万行でインデックス設計の見直し、1億行でパーティション検討、10億行でシャーディング検討、100億行でNoSQL選択肢が現実的。データ量が見えないうちから分散構成を組むのは典型的な過剰設計です。

悩んだらPostgreSQL単一 → キャッシュ追加 → レプリカ追加 → シャーディングの順で拡張します。

筆者メモ — 「スキーマレスで速く」の代償

2017年初頭、認証設定を忘れたまま「インターネットに晒された数万件のMongoDBインスタンス」が一斉にランサム攻撃され、データを消されて身代金を要求される事件が発生しました。MongoDB 自体の欠陥というより、スキーマレスで速く作れる」という触れ込みで深い理解なく本番に出されていた構成が、セキュリティ設定を置き去りにした結果だと当時から指摘されています。

別の話として、2010年代に流行した「MongoDB + Node.js」スタックで数年分の業務データを運用していた会社が、分析用途で使おうとした時に「フィールド名が時期によって別物・型が揺れる・配列とスカラが混在」していて、ほぼ全件の再加工に半年をかけた、という事例もしばしば語られます。PostgreSQLのJSONB型で型を縛りながら受けていれば避けられた工数です。

筆者も2018年頃、同僚が「MongoDBにしとけばとりあえず速い」と言って立てたサービスが、1年後に集計レポートが必要になった瞬間に地獄を見る様子を横目で見ていました。スキーマレスで速く作れるの代償は、運用・セキュリティ・分析の全方面で跳ね返ってくる。この教訓が2020年代のPostgreSQL再評価の下地になりました。

迷ったらPostgreSQLマネージド + PITR + マルチAZ。この3点セットで9割の事故は防げます。

やってはいけないこと

データストア領域で事故る典型を整理します。One-way Doorの最たる領域なので、失敗すると取り返しがつきません。

禁じ手なぜダメか
スキーマレスで楽でMongoDBを主DB採用1年後に集計・Joinが必要になり、PostgreSQL再移行で3ヶ月消える
DBをデフォルト設定(認証なし)で本番運用2017年初頭のMongoDBランサム攻撃(数万件被害)と同じパターン
画像・動画をDB本体に保存DB肥大化、バックアップ時間爆発。S3 + URL参照が鉄則
NoSQLを強整合が必要な業務に採用決済・在庫・会計で不整合、返金・信用失墜
自前でDBをシャーディング実装運用負荷と学習コストで現場が溶ける。マネージドのAurora/Spannerで済ませる
バックアップを取るだけで戻す訓練なしGitLab 2017年1月の事件と同じ顛末。四半期1回のリストア訓練
DBを単一AZで本番運用AZ障害で全停止。マルチAZは本番の最低ライン
PostgreSQLのUUID v4を主キーに大量挿入インデックス局所性が悪化、挿入性能が数倍遅く。UUID v7(2024年RFC化)へ
PITR(Point-in-Time Recovery)を無効化運用誤操作で数時間分のデータ喪失。マネージドDBのPITRは必ず有効
マネージド版があるのに自前EC2で運用セキュリティパッチ・バックアップ・フェイルオーバーで人件費が跳ねる
「NoSQLの方がスケールする」と安易に選ぶPostgreSQLは数TB・数千QPSで十分。NoSQL必須の規模は想像より大きい
「用途ごとに専用DBを並べる」設計複数DB運用コスト急上昇。1つで足りるなら1つで済ませるのが最善

2017年初頭のMongoDB大規模ランサム攻撃(認証なしで公開された MongoDB / Redis / Elasticsearch が世界規模で暗号化・削除された事件)は、デフォルト設定を疑わず本番投入の代償の大きさを示しました。

AI判断軸

AI時代に有利AI時代に不利
PostgreSQL(pgvector含む全部入り)マイナーな新興DB(学習データ薄い)
標準SQL・明示的なスキーマスキーマレスの雑なJSON
マネージド(Supabase・Neon・RDS)自前運用の独自DB
BigQuery・Snowflake(標準SQL)独自クエリ言語のDB

選定の優先順位

  1. 迷ったらPostgreSQL — JSONB / pgvector / 全文検索まで全部入りで、例外条件に当たるまでは1DBで足りる
  2. チームが運用できるか — 知ってる人が多いDBを選ぶ。Netflix事例は参考にしない
  3. 用途特化は例外条件で足す — Redis・検索・分析DBはRDBで不足」が見えてから追加
  4. マネージドを最優先 — 自前運用はほぼ非推奨、Supabase / Neon / RDSで運用負荷を下げる

PostgreSQLがAI時代の「安全牌」になった構造的理由

AIコーディングツールが生成するSQLの精度は、対象DBの学習データ量に直結します。PostgreSQLはオープンソースで利用事例が膨大なため、Stack Overflow・GitHub・公式ドキュメントの情報が圧倒的に豊富です。結果として、AIが生成するPostgreSQL向けSQLは他のDBと比較して正確性が高くなります。

さらにPostgreSQLはpgvectorでベクトル検索、pg_trgmで全文検索、JSONBでドキュメント格納と、用途特化DBの役割を1つのインスタンスで兼ねられます。DB数が増えるほど運用の複雑さが増し、AIがコンテキストを把握しにくくなるため、「1DB完結」できるPostgreSQLの全部入り戦略はAI時代に合理的です。

PostgreSQLの全部入り戦略 用途特化DBの役割を1つのインスタンスで兼ねる。AI時代の安全牌 PostgreSQL 1 DB で 4 つの役割を兼ねる 標準RDB機能 ACID / JOIN / 外部キー 業務CRUD の土台 注文・顧客・在庫管理 標準SQLで学習資産が豊富 JSONB ドキュメント格納 MongoDBの代替 柔軟なスキーマを RDB内で実現 pgvector ベクトル検索 Pineconeの代替 RAG / 類似検索 AI埋め込みベクトル pg_trgm 全文検索 Elasticsearchの代替 あいまい検索 日本語対応可能 PostgreSQL 1つ = DB数が減り運用がシンプルに 複数DB並列運用 = 複雑さ増・AI把握しにくい Mongo + Redis + Elastic + Pinecone... 迷ったらPostgreSQL。AIの生成精度が最も高く、拡張機能で用途特化も兼ねられる

マイナーなDBや独自クエリ言語を持つDBは学習データが少ないため、AIの生成精度が落ちます。「技術的に面白い」という理由だけでニッチDBを選ぶと、AI活用の恩恵を受けられなくなる点を選定時に意識してください。

スキーマレスDBがAI活用を阻害するメカニズム

MongoDBのようなスキーマレスDBは柔軟性が魅力ですが、AI活用の観点では不利に働きます。AIがクエリを生成する際、テーブル定義(CREATE TABLE文)がそのままコンテキストとして使えるRDBに対し、スキーマレスDBではドキュメント構造を別途説明する必要があります。

実際の問題として、スキーマレスDBでは同じコレクション内でドキュメント構造が異なることがあり、AIは「どのフィールドが必ず存在するか」を判断できません。存在しないフィールドへのアクセスが実行時エラーになるコードを生成するリスクが常にあります。

対策としては、スキーマレスDBを使う場合でもZodやJSONスキーマでドキュメント構造を明示的に定義し、その定義ファイルをAIのコンテキストに含める運用が有効です。ただし、それなら最初からRDBのCREATE TABLE文で表現したほうが簡潔であり、スキーマレスを選ぶ積極的な理由は以前より減っています。

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

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

  • メインDBは何にするか(PostgreSQL / MySQL / その他)
  • キャッシュは導入するか(Redis・Memcached)
  • 分析DBは導入するか(BigQuery・Snowflake)
  • 全文検索は必要か(Elasticsearch・OpenSearch)
  • ベクトル検索は必要かpgvector・Pinecone)
  • マネージドサービスを使うか(自前運用はほぼ非推奨
  • バックアップとリストアの方針

決定理由の残し方

データストアの選定は一度決めるとデータ移行コストが大きく、簡単にはやり直せません。なぜそのデータストアを選んだかを ADRで記録しておくことが、将来の見直し判断を支えます。

項目内容
タイトル分析基盤に Snowflake を採用する
ステータス承認済み
コンテキスト業務 DB(Aurora PostgreSQL)への分析クエリが本番パフォーマンスを圧迫している。日次バッチで約2億行のデータを集計しており、専用の分析基盤が必要になった
決定分析基盤として Snowflake を採用し、業務 DB からデータを日次で連携する
理由・コンピュートとストレージが分離されており、分析クエリの負荷が業務 DB に影響しない
・ウェアハウスの自動サスペンドにより、使っていない時間はコストがゼロになる
・半構造化データ(JSON)をそのまま取り込めるため、ETL の変換工程を簡略化できる
却下した代替案BigQuery → 既存インフラが AWS に統一されており、クロスクラウドのデータ転送コストとガバナンスが課題。Redshift → 固定クラスタ課金で夜間・休日のコスト効率が悪い
結果Snowflake へのデータ連携パイプライン(Fivetran or dbt)の構築が追加タスクとして発生する。データカタログの整備も並行して進める

ADR はスプレッドシートや Wiki ではなく、コードリポジトリの docs/adr/ に Markdown で管理するのがベストです。後から見返したとき「なぜこの選択をしたか」が一目でわかることが、ADR の最大の価値です。

この記事に関連する記事

https://senkohome.com/arch-intro-data-etl/ https://senkohome.com/arch-intro-data-overview/ https://senkohome.com/arch-intro-data-platform/

まとめ

本記事はデータストア選定について、RDBKVS・ドキュメント・列指向・時系列・検索・ベクトルDBの強み弱み・データ量×用途別の段階表・AI時代に有利な選択肢まで含めて解説しました。如何だったでしょうか。

迷ったらPostgreSQL、用途特化は例外条件で足す、マネージドを最優先する。これが2026年のデータストア選定の現実解です。

次回はデータモデリング(テーブル設計・正規化・主キー・インデックス)について解説します。

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

本記事で扱った内容の詳細は PostgreSQL 公式サイト も合わせて参考にしてください。

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