1-1 データベースとは何か
データベースとは何か¶
データを整理して保存し、必要なときに素早く取り出せる仕組み。それがデータベースである。
なぜこれを学ぶのか¶
スマホアプリ、ECサイト、SNS。私たちが日常的に使うサービスの裏側には、必ずデータベースがある。プログラミングを学ぶなら、データベースの理解は避けて通れない。
データとは何か¶
データとは「記録された情報」のことである。
| 例 | データの内容 |
|---|---|
| 連絡先 | 名前、電話番号、メールアドレス |
| 買い物履歴 | 商品名、価格、購入日 |
| SNS投稿 | 本文、投稿日時、いいね数 |
スマホの連絡先アプリを想像してほしい。友人の名前、電話番号、メールアドレス。これらはすべてデータである。
なぜデータベースが必要なのか¶
「Excelやメモ帳でデータを管理すればいいのでは?」と思うかもしれない。少量のデータならそれでも問題ない。しかし、データが増えると限界が来る。
ファイル管理の限界¶
| 問題 | 具体例 |
|---|---|
| 検索が遅い | 10万件の顧客から「東京都在住の30代」を探すのに数分かかる |
| 同時編集できない | 2人が同時にファイルを開くと、どちらかの変更が消える |
| データが壊れやすい | 誤って行を削除すると復旧できない |
| 関連付けが難しい | 「この注文をした顧客は誰?」を調べるのに手作業が必要 |
データベースが解決すること¶
| 解決策 | 効果 |
|---|---|
| 高速検索 | 100万件でも0.01秒で検索 |
| 同時アクセス | 1000人が同時に使っても安全 |
| データ保護 | 自動バックアップで復旧可能 |
| データ連携 | テーブル間の関連付けが簡単 |
身近な例で理解する¶
図書館の蔵書管理¶
図書館を想像してほしい。本(データ)は分類されて棚に整理されている。検索システムで著者名やタイトルから本を探せる。これはデータベースの仕組みそのものである。
Webサービスでの例¶
| サービス | 管理しているデータ |
|---|---|
| ECサイト | 商品、注文、顧客、在庫 |
| SNS | 投稿、ユーザー、フォロー関係 |
| 銀行 | 口座、取引履歴、残高 |
| ゲーム | プレイヤー、スコア、アイテム |
これらのサービスは、データベースなしでは成り立たない。
データベースの位置づけ¶
Webサービスの全体像を見てみよう。データベースは「裏方」として、すべてのデータを管理している。
| 層 | 役割 | 例 |
|---|---|---|
| ユーザー | サービスを利用する | スマホでアプリを操作 |
| フロントエンド | 画面を表示する | 商品一覧ページ、投稿画面 |
| バックエンド | 処理を実行する | 注文処理、ログイン認証 |
| データベース | データを保存・管理する | 商品情報、ユーザー情報 |
ユーザーが「商品を検索」すると、リクエストがバックエンドに届き、バックエンドがデータベースに問い合わせる。データベースが結果を返し、最終的にユーザーの画面に表示される。
データベースは「システムの記憶」である。 フロントエンドやバックエンドが「考える」部分だとすれば、データベースは「覚えておく」部分にあたる。
実践例:AWSでのアーキテクチャ¶
実際の本番環境では、クラウドサービスを使うことが多い。AWS(Amazon Web Services)を例に、典型的な構成を見てみよう。
(DNS)"] C["ALB
(ロードバランサー)"] end subgraph アプリケーション層 D1["EC2
(サーバー1)"] D2["EC2
(サーバー2)"] end subgraph データ層 E[("RDS
(データベース)")] F["S3
(ファイル保存)"] end end A --> B B --> C C --> D1 C --> D2 D1 <--> E D2 <--> E D1 <--> F D2 <--> F
| サービス | 役割 | 説明 |
|---|---|---|
| Route 53 | DNS | ドメイン名(例: example.com)をIPアドレスに変換 |
| ALB | ロードバランサー | アクセスを複数のサーバーに分散 |
| EC2 | サーバー | アプリケーションを実行するコンピュータ |
| RDS | データベース | データを保存・管理(PostgreSQL、MySQL等) |
| S3 | ファイル保存 | 画像や動画などの大きなファイルを保存 |
この構成では、EC2(サーバー)が2台あるが、データベース(RDS)は1つである。どちらのサーバーからアクセスしても、同じデータが取得できる。
ポイント:EC2とRDSは別のサービス
ここで重要なのは、EC2(アプリケーションサーバー)とRDS(データベース)は最初から分離されているということ。2台のEC2はどちらも「アプリケーションを動かすサーバー」であり、データベースサーバーではない。データベースはRDSという専用のサービスが担当している。
なぜアプリケーションサーバーが2台あるのか?
| 理由 | 説明 |
|---|---|
| 可用性 | 1台が故障しても、もう1台でサービスを継続できる |
| 負荷分散 | アクセスが集中しても、2台で処理を分担できる |
| メンテナンス | 1台を停止してアップデートしても、もう1台で稼働し続けられる |
サーバーは「いつ壊れてもおかしくない」という前提で設計する。これを「冗長化」と呼ぶ。
これがデータベースの重要な役割である。 複数のサーバーがあっても、データの「唯一の情報源(Single Source of Truth)」として機能する。
別の構成:EC2にデータベースをインストール¶
RDSを使わず、EC2にPostgreSQLやMySQLを自分でインストールする方法もある。
(踏み台サーバー)"] end subgraph プライベートサブネット C["EC2
(アプリサーバー)"] DB["EC2
(DBサーバー)"] end end U -->|"HTTP/HTTPS"| ALB ALB -->|"HTTP"| C C <-->|"PostgreSQL
(TCP 5432)"| DB D -->|"SSH"| B B -->|"SSH"| C B -->|"SSH"| DB
| 構成要素 | 役割 | 説明 |
|---|---|---|
| ALB | ロードバランサー | ユーザーからのリクエストを受け付ける |
| Bastion Server | 踏み台 | 開発者がメンテナンス時に使う入口 |
| アプリサーバー | アプリケーション実行 | Webアプリなどを動かす |
| DBサーバー | データベース実行 | PostgreSQL等を自分でインストール |
2種類の接続経路
この構成には2種類の接続がある。
| 接続の種類 | 経路 | 用途 |
|---|---|---|
| ユーザーアクセス | ユーザー → ALB → アプリ → DB | サービス利用 |
| 開発者アクセス | 開発者 → Bastion → 各サーバー | メンテナンス |
アプリサーバーとDBサーバーの間は、SSHではなくPostgreSQLプロトコル(TCP 5432番ポート) で接続される。これはプライベートネットワーク内の通信なので、インターネットを経由しない。
なぜ踏み台サーバーが必要なのか?
プライベートサブネットにあるサーバーは、インターネットから直接アクセスできない。これはセキュリティ上の重要な設計である。開発者がメンテナンスのためにアクセスするには、踏み台サーバー(Bastion Server)を経由する必要がある。
| 接続方法 | セキュリティ |
|---|---|
| インターネット → DBサーバー(直接) | ❌ 危険。攻撃対象になる |
| インターネット → Bastion → DBサーバー | ✅ 安全。入口が1つに限定される |
RDS vs EC2にDB:どちらを選ぶか
| 観点 | RDS(マネージド) | EC2にDB(自前管理) |
|---|---|---|
| 運用負荷 | 低い(自動バックアップ等) | 高い(すべて自分で管理) |
| 自由度 | 低い(設定に制限あり) | 高い(何でもできる) |
| コスト | やや高い | 安くできる場合もある |
| 推奨ケース | 一般的なWebサービス | 特殊な要件がある場合 |
初心者や一般的なWebサービスにはRDSが推奨される。EC2にDBをインストールするのは、特殊なチューニングが必要な場合や、コストを極限まで抑えたい場合に検討する。
データベースの種類¶
データベースには大きく分けて以下の種類がある。
| 種類 | 特徴 | 代表例 |
|---|---|---|
| RDB | テーブル(表)形式でデータを管理 | PostgreSQL, MySQL |
| NoSQL(ドキュメント型) | JSON形式で柔軟に保存 | MongoDB, Firestore |
| NoSQL(キーバリュー型) | キーと値のペアで高速保存 | Redis |
| NewSQL | RDBとNoSQLの良いとこ取り | CockroachDB, Spanner |
収納に例えると¶
| 種類 | 例え | イメージ |
|---|---|---|
| RDB | 整理棚 | 決まった棚に決まったものを入れる。「3段目の左から2番目」のように場所が決まっている |
| NoSQL(ドキュメント型) | ファイルボックス | 1つの箱に関連する書類をまとめて入れる。箱ごとに中身の構成が違ってもOK |
| NoSQL(キーバリュー型) | コインロッカー | 番号(キー)を指定すれば中身(値)がすぐ取り出せる。超高速 |
| NewSQL | スマート整理棚 | 整理棚の使いやすさを保ちながら、複数人で同時に出し入れできる |
初心者はまずRDB(リレーショナルデータベース)から学ぶのがおすすめである。Webサービスの多くはRDBを使っている。
まとめ¶
- データとは「記録された情報」のこと
- データベースは「データを整理・保存し、高速に取り出す仕組み」
- ファイル管理では検索速度、同時アクセス、データ保護に限界がある
- データベースはこれらの問題を解決する
- 種類はRDB、NoSQL、NewSQLの3つ。まずはRDBから学ぶ
用語¶
| 用語 | 説明 |
|---|---|
| データ | 記録された情報。名前、数値、日付など |
| データベース | データを整理して保存し、検索・更新を効率的に行う仕組み |
| RDB | Relational Database。テーブル形式でデータを管理するデータベース |
| NoSQL | Not Only SQL。RDB以外のデータベースの総称 |
| NewSQL | RDBの機能を持ちつつ、NoSQLのスケーラビリティを備えたデータベース |
次の記事¶
RDBの基本から学びたい方はこちら。