📓

第2章:RDBは強い。NoSQLは“便利そう”だけど、現実はシビア

2025/04/15に公開

第2章:RDBは強い。NoSQLは“便利そう”だけど、現実はシビア

本記事は『データ指向アプリケーションデザイン(DDIA)』第2章の読書メモです。
自分なりに読みながら思考をめぐらせた“設計寄り視点”での気づきをまとめています。

🔙 目次に戻る

図2: クエリ I/O フロー(Client → Query Engine → Storage → Disk)


「RDBは万能」ってやっぱ思ってしまう

自分自身が思ってたけど、「RDBってやっぱ万能だよな」って再認識した章だった
もちろん万能って言うのは語弊があるし、「なおスケールするかは無視するものとする🙄」って内心ツッコんでる

NoSQLが悪いわけじゃなくて、NoSQLって言葉の射程が広すぎるってのが問題かな
用途に合えば便利なんだけど、万能感を求めると破綻する


JSONで全部持てたら便利だけど、実際はそんなにうまくいかない

たとえば請求書みたいなデータをまるっと1つのドキュメントで持てたら、確かに読み込み時のパフォーマンスは強い

でも:

  • 一部だけ編集したいときしんどい
  • キー検索や分析には向いてない
  • 正規化を崩すRDBと似た構造になりがち

って話があるし、結局「使えるけど、用途次第」という前提が外せない


ヘテロジニアスなスキーマって何が嬉しいの?

1レコードだけ構造違う、とかできるらしいけど、それが現実でどう嬉しいのかはピンとこない
むしろ構造違いがあるって、後からメンテが破綻する予感しかない

最近のRDB(PostgreSQLとか)でもJSON型あるし、
「それ、NoSQLじゃないとできない話?」って疑いたくなる


ネットワークモデルのつらみ

ネットワークモデルはざっと見ただけでタコ足配線になってて、
「どこがどこに繋がってるのか」一つ一つチェックしないと分からないのがダルそう
短期的にはありだけど、中長期ではメンテが爆発する未来が見える


宣言型 vs 命令型:並列実行に優位なのはどっち?

  • 宣言型(SQLとか)は、オプティマイザが並列化を“いい感じに”やってくれる
  • 命令型は、自分で並列処理の順番も考えないといけない

つまり宣言型が強いというより、「オプティマイザが賢いこと前提でのアーキテクチャ」なんだなと再認識
裏で何してるかをちゃんと知っておくと、ブラックボックスに振り回されずに済む


MapReduce、まだピンと来ないけど…

たとえば「全部 select * で引っ張ってきて、あとで group by すれば?」って気持ちになる
たぶん、今後の章で分散処理や巨大データセットとの関係でありがたみが出てくるやつかな


グラフDB、出番は限られてそう

関係が超複雑なデータ(SNSの友達つながり、レコメンド系)なら使えるかもしれないけど、
業務系アプリだと、そこまでノードとエッジが入り乱れる状況ってあまりなさそう

一応、「一気に関連データを芋づる取得する」みたいな要件があるなら可能性はあるかも


✍️ まとめ:「NoSQL」は選択肢。でも“とりあえず”では使えない

NoSQLは魅力的なキーワードだけど、

  • 自由度が高すぎて構造がバラけがち
  • パフォーマンス最適化は自分で責任取る必要がある
  • 検索や更新のしづらさは、後から地味に効いてくる

ってことで、実際は適切な設計知識がある人にしか扱えない側面が強い

RDBの方が「不自由なぶん、安全」っていうのが現場目線では大きい。
NoSQLを使うときこそ、「なぜそれを選ぶのか?」を問い直すことになりそう


💡 設計Tips

  • 「NoSQL」は選択肢の一つだが、“とりあえず選ぶ”には自由度が高すぎる
  • 柔軟性とメンテナンス性はトレードオフ。便利そうでも運用時のコストを想像したい
  • RDBの“不自由さ”は、ある種の設計アフォーダンスになっている

🔙 目次に戻る

Discussion