第4部 実務とセキュリティ
第10章 NoSQL・クラウドDBと次のステップ
最終章です。第1章で予告したNoSQLの世界を「RDBの何を諦めて何を得たか」という軸で整理し、実務の主戦場になりつつあるクラウドのマネージドDBと運用の勘所を押さえ、最後にこのコースの先へ続く学習ロードマップを描きます。
🎯 この章で学ぶこと
- NoSQLの4分類(キーバリュー・ドキュメント・ワイドカラム・グラフ)と代表製品
- RDBとNoSQLの使い分けの判断軸 — 「まずRDB、明確な理由があればNoSQL」
- クラウドのマネージドDB(RDS・Cloud SQLなど)と責任共有モデル
- バックアップ・監視・バージョンアップというデータベース運用の実務
- このコースの次に学ぶべきこと — PostgreSQL、資格、Webアプリ開発への道
10.1 NoSQLの4分類
NoSQL(Not only SQL)は「RDB以外のデータベース」の総称で、中身は一枚岩ではありません。大きく4つに分類され、それぞれRDBの何かを諦める代わりに、何かを得るという設計になっています。
| 分類 | 代表製品 | データの持ち方 | 何を諦めたか | 何を得たか |
|---|---|---|---|---|
| キーバリュー(KVS) | Redis | キーと値のペアだけ。巨大な辞書(Pythonのdict)のイメージ | 複雑な検索・JOIN・集計 | 圧倒的な読み書き速度(メモリ上で動く) |
| ドキュメント | MongoDB | JSONのような柔軟な文書。行ごとに項目が違ってもよい | 厳格なスキーマとJOIN | スキーマ変更の身軽さ、プログラムのデータ構造との近さ |
| ワイドカラム | Cassandra | 行ごとに列を柔軟に持てる表を、多数のサーバーに分散 | 強い整合性・柔軟なクエリ | サーバーを足すだけで書き込みを増やせる水平拡張 |
| グラフ | Neo4j | ノード(点)とエッジ(関係の線) | 表形式の集計の手軽さ | 「友達の友達」のような関係のたどりが高速 |
たとえばRedisは「セッション情報やランキングを、ミリ秒以下で読み書きしたい」場面の定番です。JOINも集計もできませんが、そもそもそれが不要な用途に絞ることで速度を得ています。MongoDBは「項目が頻繁に増減するデータ」に強い一方、第6章で学んだ正規化やJOINの世界とは別の設計作法が必要になります。
NoSQLはRDBの上位互換ではなく、特定の目的のための特化型です。汎用性——どんな条件でも検索でき、集計でき、トランザクションで整合性を守れる——では、いまもRDBが最強です。だからこそ第1章で「NoSQLを理解する近道はRDBの理解」と述べたのです。あなたはすでに比較の物差しを持っています。
10.2 使い分けの判断軸
では、どう選べばよいのでしょうか。実務でよく使われる判断軸を挙げます。
- お金や在庫のように、一瞬でも矛盾してはいけないデータ → RDB。第5章で学んだトランザクションと制約の出番です。
- 超高速に読み書きしたい一時データ(セッション、キャッシュ、ランキング)→ キーバリュー(Redis)。消えても再生成できるデータが向きます。
- 項目が頻繁に変わる・行ごとにバラバラ(商品ごとに属性が違うカタログ、ログ)→ ドキュメント(MongoDB)。
- 世界規模の書き込みをさばきたい → ワイドカラム(Cassandra)。ここまで来るのは大規模サービスだけです。
- 関係そのものが主役(SNSのつながり、不正取引の追跡)→ グラフ(Neo4j)。
背景にある理屈を一言だけ補うと、CAP定理という有名な定理があります。乱暴に要約すれば「多数のサーバーに分散したデータベースは、整合性(どこから読んでも同じ値)と可用性(いつでも応答)を、障害時に両立できない——どちらかを選ぶことになる」という話です。NoSQLの多く(特にワイドカラム)は、整合性を少し緩めることで可用性と拡張性を取りました。SNSの「いいね」の数が数秒ずれても誰も困りませんが、銀行残高がずれたら大事件です。データの性質が選択を決めます。
迷ったらRDBから始めてください。要件が固まりきらない段階で一番つぶしが利くのは、どんな検索も集計もできるRDBです。そして「このデータのこのアクセスパターンにはRDBでは足りない」という測定に基づく明確な理由が出てきたとき、その部分だけNoSQLを併用します。実際、多くのシステムは「主データはRDB+キャッシュにRedis」のような組み合わせで動いています。
10.3 クラウドのマネージドデータベース
ここまで「自分でDBMSをインストールして動かす」前提で話してきましたが、実務の新規システムではクラウドのマネージドデータベースを使うことが多くなりました。代表格は次のとおりです。
| クラウド | サービス | ひとこと |
|---|---|---|
| AWS | Amazon RDS / Aurora | MySQL・PostgreSQLなどを選んで数クリックで起動。Auroraはクラウド専用に再設計された高性能版 |
| Google Cloud | Cloud SQL | MySQL・PostgreSQL・SQL Serverに対応 |
| Microsoft Azure | Azure SQL Database | SQL Serverのマネージド版。Windows系システムと親和的 |
「マネージド」の意味は、面倒で重要な運用作業をクラウド側が引き受けてくれることです。具体的には、DBMSへのセキュリティパッチ適用、自動バックアップ、ハードウェア故障時の切り替え(冗長化)、ストレージの拡張など——第9章で学んだ防御の一部を「買う」ことができるわけです。
ただし、すべてお任せにはなりません。クラウドには責任共有モデルという考え方があります。基盤側(ハードウェア、DBMS本体のパッチ)はクラウド事業者の責任、しかしその上の設定と使い方は利用者の責任です。具体的には——
- 公開設定 — DBをインターネットに公開するか、どのIPアドレスから接続を許すか
- 認証情報の管理 — アカウント・パスワード・接続文字列(第8章のseccolで学んだ内容)
- 権限設計 — 最小権限の原則(第9章)はマネージドでも丸ごと利用者の仕事
- 入れるデータの管理 — 何を保存し、誰に見せるか
「クラウドだから安全」でも「クラウドだから危険」でもなく、責任の境界線がどこにあるかを知って使うのがプロの態度です。
近年の大規模漏えいの頻出原因が、攻撃でも脆弱性でもなく設定ミス——「インターネットに全開放されたデータベース」です。検証のつもりで全IP許可(0.0.0.0/0)にして戻し忘れた、認証なしのまま公開した、ストレージの公開範囲を「公開」にしてしまった……。インターネット全体を常時スキャンして「開いているDB」を探すボットは実在し、公開されたDBは数時間で発見されます。守るべき三原則は、①デフォルト拒否(まずすべて閉じ、必要な通信だけ開ける)、②接続元IP制限(アプリサーバーや社内ネットワークだけに絞る。「どこからでも接続可」を検証目的でも作らない)、③認証必須(認証なしアクセスを許す設定を絶対に有効化しない)。加えて、設定を定期的に点検する仕組み(クラウドの設定監査サービス)まで入れれば、うっかりの戻し忘れも検出できます。
10.4 データベース運用の実務
データベースは「作って終わり」ではなく、動き続ける限り面倒を見る対象です。IT部門で働くうえで知っておくべき運用の柱を4つ挙げます。
① バックアップ設計
第9章の3-2-1ルールとリストア訓練が土台です。運用ではさらに「毎日何時に取るか」「何世代残すか」「何時間前まで戻れる必要があるか(目標復旧時点)」「復旧に何時間かけられるか(目標復旧時間)」を業務側と合意して文書化します。マネージドDBなら自動バックアップの保持期間と、削除保護の設定を確認します。
② 監視
障害は「気づいた時点の早さ」で被害が決まります。最低限の監視項目は次の3つです。
- 接続数 — 上限に達すると新しい接続が全部エラーになります。接続を閉じ忘れるバグ(第8章の
close()忘れ)の検出にもなります。 - 遅いクエリ — 「実行に1秒以上かかったSQL」を記録するスロークエリログを有効にし、定期的に眺めます。第7章のインデックスとEXPLAINの知識がそのまま武器になります。
- ディスク使用量 — DBはデータが増える一方の装置です。満杯になると書き込みが止まり、最悪DBが壊れます。「残り20%で警告」のようなしきい値を設けます。
③ バージョンアップ計画
DBMSにもサポート期限があります。期限切れのバージョンはセキュリティパッチが出なくなるため、「動いているから触らない」は徐々に危険になっていきます。年に一度はバージョンと期限を棚卸しし、検証環境でテストしてから上げる——地味ですが重要な仕事です。マネージドDBでは古いバージョンが強制アップグレードされることもあるため、放置はどのみちできません。
④ キャパシティ計画
データ量とアクセス数の増加傾向を記録し、「このペースなら1年後にディスクが足りない」「接続数の上限に近づいている」を先回りして手当てします。監視データを月次で眺めるだけでも、突然の「もう限界です」を防げます。
専任DBAがいる会社は多くありません。情シス兼任の担当者が片手間で見るのが現実です。だからこそ、目視の点検ではなく「しきい値を超えたら通知が飛ぶ」仕組みを最初に作ることが重要です。このあたりの立ち回りは一人情シスコースで詳しく扱う領域と重なります。
10.5 学習ロードマップ — この先へ
このコースで、あなたはSQLの読み書き(第3〜5章)、テーブル設計(第6章)、性能(第7章)、Python連携(第8章)、セキュリティ(第9章)まで、データベースの背骨を一通り手に入れました。次の一歩の候補を挙げます。
次に触るべきもの
- PostgreSQLをDockerで動かす — SQLiteで学んだSQLがどこまで通じるか(そして権限管理など、SQLiteになかった世界がどう見えるか)を体験する最短ルートです。
docker run1行で起動でき、壊しても捨てて作り直せます。
# PostgreSQLをDockerで起動して接続してみる(パスワードは環境変数で渡す例)
$ docker run --name pg-study -e POSTGRES_PASSWORD=$PG_PASS -d -p 5432:5432 postgres:16
$ docker exec -it pg-study psql -U postgres
postgres=# CREATE TABLE hello (id INTEGER, message TEXT);
CREATE TABLE
postgres=# SELECT version();
PostgreSQL 16.3 ...
第1章の sqlite3 practice.db と見比べてください。プロンプトこそ違いますが、打っているSQLは同じです——あなたの学びは製品をまたいで通用します。
- 実データで集計練習 — 政府統計や公開データセットのCSVを第8章の方法で取り込み、GROUP BYとJOINで「問い」に答える練習をしてください。SQLは自分の問いを持ったときに一番伸びます。
- Webアプリ開発へ — FlaskのようなWebフレームワーク+SQLiteで小さなアプリ(第8章の問い合わせ管理のWeb版など)を作り、育ったらPostgreSQLに載せ替える。データベースが「Webアプリの記憶装置」として働く全体像がつかめます。
資格でマイルストーンを作る
| 資格 | レベル感 | このコースとの関係 |
|---|---|---|
| 基本情報技術者(DB分野) | 入門〜基礎 | 正規化・SQL・トランザクションなど、本コースの内容がほぼそのまま出題範囲 |
| OSS-DB Silver | 基礎〜中級 | PostgreSQLを題材にした運用・管理寄りの資格。次の実技目標に好適 |
| データベーススペシャリスト | 上級 | 設計・性能・運用を深く問う国家試験。数年がかりの長期目標に |
セキュリティに軸足を置きたい人は、セキュリティ中級・上級コースへ進んでWAFやログ分析を深掘りするのも良い流れです。第9章で学んだDBの防御が、より大きな防御体系の一部として見えてくるはずです。
最後にひとつだけ。データベースの学習で最も大切なのは、道具の名前を増やすことではなく、「このデータは誰のもので、どう持つのが正しいか」を考える習慣です。それは第1章の「Excelの4つの壁」から今日まで、一貫して問い続けてきたことでもあります。おつかれさまでした——ここから先は、実データと実務があなたの教科書です。
まとめ
- NoSQLはキーバリュー(Redis)・ドキュメント(MongoDB)・ワイドカラム(Cassandra)・グラフ(Neo4j)の4分類。いずれも「RDBの何かを諦めて何かを得る」特化型
- 使い分けの定石は「まずRDB、測定に基づく明確な理由があればNoSQLを併用」。整合性が命のデータはRDB、消えてよい高速データはKVS
- クラウドのマネージドDB(RDS/Aurora・Cloud SQL・Azure SQL Database)はパッチ・バックアップ・冗長化を肩代わりするが、責任共有モデルにより公開設定・認証情報・権限設計は利用者の責任
- クラウドDBの公開設定ミスは漏えいの頻出原因。デフォルト拒否・接続元IP制限・認証必須の三原則を守る
- 運用の柱はバックアップ設計・監視(接続数/遅いクエリ/ディスク)・バージョンアップ計画・キャパシティ計画
- 次の一歩はDockerでPostgreSQL、実データでの集計練習、Flask+SQLiteでのWebアプリ。資格は基本情報→OSS-DB Silver→データベーススペシャリストの順が目安
練習問題
次の3つの要件それぞれについて、RDBとNoSQL(使うなら4分類のどれか)のどちらを選ぶか、理由とともに述べてください。
(a) 社内の経費精算システム(申請・承認・支払いの記録)
(b) ECサイトの「最近見た商品」表示(ユーザーごとに直近20件、消えても実害なし)
(c) 商品カタログ(家電・食品・書籍で項目が大きく異なり、項目の追加が頻繁)
解答を見る
(a) RDB — お金に関わる記録であり、申請と承認と支払いの整合性が崩れることは許されません。トランザクション・制約・監査のしやすさが揃ったRDB一択です。「申請者は社員テーブルに存在すること」のような外部キー制約もそのまま活きます。
(b) NoSQL(キーバリュー: Redisなど) — 「ユーザーIDをキーに直近20件を高速に読み書き」という単純なアクセスパターンで、JOINも集計も不要、消えても再生成できるデータです。KVSの得意分野そのものです。主データ(商品・注文)はRDBに置いたまま、この機能だけKVSを併用する構成が典型です。
(c) ドキュメント型(MongoDBなど)が有力。ただしRDBでも可 — カテゴリごとに項目がバラバラで頻繁に増えるデータは、スキーマレスなドキュメント型に向きます。一方、近年のRDB(PostgreSQLなど)はJSON型の列を持てるため、「基本情報は通常の列+可変の属性はJSON列」というRDB側の解もあります。「まずRDB、明確な理由があればNoSQL」の定石に照らし、チームの経験や他データとの結合の必要性まで含めて判断できれば満点です。
あなたの会社が、顧客管理システムのDBをクラウドのマネージドDB(例: Amazon RDS)に移行することになりました。利用者側の責任範囲について、導入前に確認すべきセキュリティチェックリストを5項目以上作ってください(第8章・第9章の内容も総動員してかまいません)。
解答を見る
解答例(5項目以上あり、責任共有モデルの「利用者側」に属していれば正解です):
- 公開設定 — DBをインターネットに公開しない設定(パブリックアクセス無効)になっているか。接続元はアプリサーバーと社内ネットワークのIPアドレスだけに制限されているか(デフォルト拒否)。
- 認証情報の管理 — 管理者パスワードは初期値から変更し、十分に強いか。接続文字列やパスワードをソースコードに直書きせず、環境変数やシークレット管理サービスで扱っているか。
- アカウントと権限 — アプリ用・帳票用・管理者用でアカウントを分け、アプリ用アカウントはSELECT/INSERT/UPDATEなど必要最小限か。共有アカウントを作っていないか。
- 暗号化 — 保存時の暗号化オプションが有効か。アプリとDB間の通信はTLSを強制しているか。顧客のパスワードを保存する場合はソルト付きハッシュになっているか。
- バックアップと復旧 — 自動バックアップの保持期間は要件を満たすか。削除保護は有効か。リストア手順を実際に試したか(リストア訓練)。
- 監査ログと監視 — 接続ログ・監査ログを有効化し、改ざんされない場所に転送しているか。接続数・遅いクエリ・ディスク使用量の監視と通知を設定したか。
- データの取り扱い — 本番の顧客データを開発・検証環境にコピーしない運用になっているか(必要ならマスキングやダミーデータで代替)。
「パッチ適用は?」と思った人へ——マネージドDBではDBMS本体のパッチはクラウド側の責任ですが、適用のタイミング設定(メンテナンスウィンドウ)を決めるのは利用者です。境界線上の項目こそ確認リストに入れる価値があります。