はじめに
データベースとは — 種類と本サイトの範囲
データベースの種類を俯瞰し、本サイトが扱うのは RDB と SQL であることを明示する入口ページ。
データベースとは
データベース(database)は、アプリケーションが繰り返し読み書きするデータを、一貫した形式で・安全に・効率よく保管するための仕組みです。Excel や CSV ファイルでもデータは保存できますが、以下のような要件を同時に満たすのは困難です。
- 複数人/複数プロセスから同時にアクセスしても壊れない(並行制御)
- 障害や電源断が起きても、書き込み途中のデータが中途半端に残らない(耐障害性・トランザクション)
- 100 万件・1 億件というスケールでも、欲しい 1 件をミリ秒で取り出せる(インデックス・クエリ最適化)
- 「ユーザー」「注文」「商品」といった関係性のあるデータを整合性を保ったまま管理できる(制約・外部キー)
これらを提供するソフトウェアを DBMS(Database Management System) と呼び、ユーザー/アプリは DBMS を介してデータを操作します。
データベースの種類
データベースは「データをどう構造化するか」で大きく分類されます。代表的なものは次のとおりです。
| 種類 | データの構造 | 得意なこと | 代表的な製品 |
|---|---|---|---|
| リレーショナル(RDB) | 行と列の表(テーブル)を、関係(キー)でつなぐ | 厳密な整合性・複雑な集計・トランザクション | PostgreSQL / MySQL / SQLite / SQL Server / Oracle |
| キーバリュー(KVS) | キー → 値のシンプルな辞書 | 超高速な単一キー参照・キャッシュ・セッション | Redis / Memcached / DynamoDB |
| ドキュメント | JSON のような入れ子構造を丸ごと 1 件として保存 | スキーマが変化しやすい・半構造データ | MongoDB / Couchbase / Firestore |
| ワイドカラム | 巨大な疎な表、行ごとに列が異なってもよい | 分散・大量時系列データ | Cassandra / HBase / Bigtable |
| グラフ | ノード(頂点)とエッジ(辺) | 関係をたどる探索(SNS・経路・推薦) | Neo4j / Amazon Neptune |
| 全文検索 | 転置インデックスで本文を検索 | 自然言語の全文検索・ランキング | Elasticsearch / OpenSearch / Meilisearch |
| 時系列 | タイムスタンプ主キーの高速追記 | メトリクス・IoT・ログ | InfluxDB / TimescaleDB / Prometheus |
これらは排他的な選択肢ではなく、実際のシステムでは「RDB を中心に据えつつ、キャッシュは Redis、検索は Elasticsearch」のように役割で使い分けるのが一般的です。
本サイトが扱うのはリレーショナルデータベース(RDB)
Query Go は、RDB と SQL に絞って解説するサイトです。業務システムや Web サービスの中核に最も多く採用されているのが RDB であり、以下の点で学ぶ価値が大きいからです。
- SQL は業界標準で、PostgreSQL / MySQL / SQLite / SQL Server / Oracle の間で基本構文が共通している
- データの整合性をスキーマ(型・制約・外部キー)で強制できる
- ACID トランザクションにより、複雑な更新を「全部成功するか、全部戻す」で扱える
- 集計・JOIN・ウィンドウ関数など、分析用途の表現力が圧倒的に高い
NoSQL(KVS / ドキュメント / グラフ等)にもそれぞれ強みがありますが、基礎としてまず RDB と SQL を押さえておくことで、他のデータストアと役割を比較しやすくなります。
各 RDBMS 製品の特徴と選び方は RDBMS の種類、スキーマを支える型の基礎は データ型の基本 に続けてまとめています。
