最終曎新:

【図解で比范】SQL vs NoSQL — デヌタベヌスの2倧朮流を培底解説


SQL vs NoSQL — デヌタ構造の違い VS SQLリレヌショナル id name email 1 田侭 tanaka@... 2 䜐藀 sato@... 3 鈎朚 suzuki@... ACID保蚌 固定スキヌマ 垂盎スケヌル JOIN埗意 MySQL / PostgreSQL / Oracle NoSQLドキュメント型 { "name" : "田侭", "age" : 28 } { "name" : "䜐藀", "hobby" : ["読曞", "釣り"] } ↑ 構造が自由 BASE保蚌 柔軟スキヌマ 氎平スケヌル 倧量デヌタ埗意 MongoDB / Redis / DynamoDB
SQL vs NoSQLのむメヌゞ
ひよこ ひよこ

デヌタベヌスには「SQL」ず「NoSQL」があるっお聞いたんだけど、䜕が違うの

ペンギン先生 ペンギン先生

ざっくり蚀うず、SQLは「Excelの衚みたいにきっちり行ず列で管理するデヌタベヌス」で、NoSQLは「もっず自由な圢でデヌタを入れられるデヌタベヌス」だよ。SQLはリレヌショナルデヌタベヌスRDBずも呌ばれおいお、デヌタを入れる前に「この列にはこういうデヌタを入れる」っおいうスキヌマを決めおおく必芁があるんだ。

ひよこ ひよこ

スキヌマを決めるっお、ちょっずめんどくさそう 。NoSQLなら自由に入れられるなら、党郚NoSQLでよくない

ペンギン先生 ペンギン先生

いい質問だね。たしかにNoSQLは柔軟だけど、その自由さにはトレヌドオフがあるんだ。SQLデヌタベヌスは「ACID」っおいう仕組みで、デヌタの敎合性をガッチリ守っおくれる。たずえば銀行の送金で「Aさんの口座から匕いたのにBさんの口座に足されおない」なんおこずが起きないように保蚌しおくれるんだよ。

ひよこ ひよこ

ACIDっおなにNoSQLにはそれがないの

ペンギン先生 ペンギン先生

ACIDは「Atomicity原子性・Consistency䞀貫性・Isolation分離性・Durability耐久性」の頭文字だよ。䞀連の凊理が党郚成功するか党郚倱敗するか、䞭途半端な状態にならないこずを保蚌するんだ。NoSQLの倚くは代わりに「BASE」っおいう考え方を採甚しおいお、「最終的にはデヌタが䞀臎するけど、䞀瞬だけ叀いデヌタが芋えるこずもあるよ」っおいう緩めの保蚌なんだよ。

ひよこ ひよこ

じゃあ、お金を扱うシステムはSQLのほうが安心っおこずなんだね。NoSQLはどういうずきに䜿うの

ペンギン先生 ペンギン先生

NoSQLが埗意なのは「倧量のデヌタを高速にさばきたい」「デヌタの圢がバラバラ」「サヌバヌを暪に増やしおスケヌルしたい」っおいうケヌスだよ。たずえばSNSの投皿デヌタは、テキストだけの人もいれば画像付き・動画付きの人もいるよね。こういうデヌタ構造がバラバラなものはNoSQLのドキュメント型が向いおいるんだ。

ひよこ ひよこ

「サヌバヌを暪に増やす」っおどういうこず

ペンギン先生 ペンギン先生

スケヌリングには2皮類あっおね。SQLが埗意な「垂盎スケヌリング」は、1台のサヌバヌのCPUやメモリを匷化する方法。NoSQLが埗意な「氎平スケヌリング」は、サヌバヌの台数を増やしおデヌタを分散させる方法だよ。氎平スケヌリングのほうが理論䞊は無限に拡匵できるから、TwitterやNetflixみたいな超倧芏暡サヌビスではNoSQLが掻躍しおいるんだ。

ひよこ ひよこ

代衚的なデヌタベヌスっお䜕があるの

ペンギン先生 ペンギン先生

SQL系だず「MySQL」「PostgreSQL」「Oracle Database」「SQL Server」あたりが有名だね。NoSQL系は皮類が倚くお、ドキュメント型の「MongoDB」、キヌバリュヌ型の「Redis」「DynamoDB」、カラム指向の「Cassandra」、グラフ型の「Neo4j」なんかがあるよ。NoSQLっお䞀口に蚀っおも䞭身はかなり違うんだ。

ひよこ ひよこ

そんなに皮類があるんだね 。結局、どっちを遞べばいいの

ペンギン先生 ペンギン先生

刀断基準はこんな感じだよ。デヌタの関係性が耇雑で敎合性が倧事なら → SQL。倧量デヌタを高速凊理したい、スキヌマが頻繁に倉わるなら → NoSQL。実は最近は「䞡方䜿う」のが䞻流で、ナヌザヌ情報や決枈はSQLに、ログやセッション情報はNoSQLに、っおいうふうに䜿い分けるのがベストプラクティスなんだ。

ひよこ ひよこ

䞡方䜿うのが普通なんだねでも最近は「NewSQL」っおいうのも聞いたこずあるよ

ペンギン先生 ペンギン先生

よく知っおるねNewSQLはSQLの敎合性ずNoSQLのスケヌラビリティを䞡立しようずするデヌタベヌスだよ。Google の「Spanner」や「CockroachDB」「TiDB」が代衚䟋だね。ACIDトランザクションを保ちながら氎平スケヌリングできるんだ。ただし運甚コストが高かったり、レむテンシのトレヌドオフがあったりするから、銀の匟䞞ではないよ。

ひよこ ひよこ

ぞえ〜。ベテランの゚ンゞニアでも遞択を間違えるこずっおあるの

ペンギン先生 ペンギン先生

実はけっこうあるんだ。有名な倱敗䟋だず、初期のTwitterがMySQLで限界を迎えおCassandraに移行したり、逆にUberがPostgreSQLからMySQLに切り替えたケヌスもある。面癜いのは、PostgreSQLが「JSONB」型でドキュメント栌玍をサポヌトしたり、MongoDBがACIDトランザクションを远加したりず、SQLずNoSQLの境界がどんどん曖昧になっおきおいるこずだね。「SQLかNoSQLか」ではなく「どのデヌタベヌスがこのワヌクロヌドに最適か」で考えるのが、今のプロの遞び方だよ。