「データベース」って言葉、最近よく聞くようになったよね。でも「SQLとかNoSQLとか、何が違うの?」って混乱したことない?プログラミングを勉強し始めると絶対に出てくるキーワードなんだ。難しそうに見えるけど、イメージさえつかめば全然怖くない。この記事を読めば、NoSQLが何なのか・どんな場面で使われているのかが、スッキリわかるよ!
- NoSQLは「Not Only SQL」の略で、表形式にとらわれない自由なデータ保存の仕組みのことだよ。
- SNSや動画配信など大量のデータを高速に処理する場面で特に力を発揮するんだ。
- NoSQLが万能なわけじゃなく、用途に合わせてSQLと使い分けるのが正解だよ。
もうちょっと詳しく
NoSQLが生まれた背景には、インターネットの爆発的な普及がある。2000年代以降、TwitterやFacebookのようなSNSが登場して、1日に何億件ものデータが生まれるようになったんだ。従来の表形式のデータベース、つまりリレーショナルデータベースでは、そのスピードと量についていけないことが増えてきた。「もっと柔軟で速いデータの保存方法が必要だ!」という声から生まれたのがNoSQLだよ。GoogleやAmazonなどの巨大IT企業が自社サービスのために開発した技術が、後にオープンソースとして公開されて、世界中のエンジニアが使えるようになった——そんな歴史があるんだ。今では当たり前のように使われているんだよ。
NoSQLはGoogleやAmazonが大規模サービスのために開発した技術が起源!
⚠️ よくある勘違い
→ NoSQLは「SQLより優れている」わけじゃなく、「別の得意分野を持つ別物」なんだよ。銀行の口座情報など正確さが命のシステムでは、SQLデータベースの方が向いてるんだ。
→ 大量データの高速処理や柔軟なデータ構造が必要なときはNoSQL、複雑な条件で正確に検索したいときはSQL、と目的に合わせて選ぶのが正解だよ。
[toc]
SQLって何?まず基本を押さえよう
NoSQLを理解するには、まず「SQL(エスキューエル)とは何か」を知っておく必要があるよ。SQLとはStructured Query Language(構造化照会言語)の略で、つまり「決まった形に整理されたデータを操作するための言語」ということだよ。
SQLを使うデータベースはリレーショナルデータベースと呼ばれていて、データをエクセルのような「表(テーブル)」に保存するのが特徴なんだ。学校の出席簿を思い浮かべてみて。縦に生徒の名前、横に日付が並んで、各マスに「出席○」「欠席×」が入ってるよね?あれがまさにリレーショナルデータベースのイメージだよ。
リレーショナルデータベースの強みは「データの整合性」、つまり「データに矛盾がない状態を保てること」だよ。銀行の振り込みで考えてみよう。AさんがBさんに1万円を送るとき、Aさんの口座から引いてBさんの口座に足す2つの処理が、必ず同時に完了しないといけないよね。途中でエラーが起きたら、どちらも元に戻す。これをトランザクション、つまり「一連の処理をひとまとめにして、全部成功か全部失敗かにする仕組み」というんだ。
リレーショナルデータベースの弱点
ただ、リレーショナルデータベースには弱点もある。それは「データの形が決まっている」こと。エクセルで新しい列を追加するのと同じで、テーブルの設計を後から変えるのが難しいんだ。SNSの投稿みたいに「テキストだけの人もいれば、画像を5枚つける人もいる、タグが0個の人もいれば100個つける人もいる」というバラバラなデータを扱うのは苦手なんだよ。さらにユーザーが何億人にもなったとき、サーバーを増やして処理を分散させる「スケールアウト」がリレーショナルデータベースでは難しいという問題もある。こういった課題を解決するために登場したのが、NoSQLなんだよ。
NoSQLの4つの種類を知ろう
NoSQLと一口に言っても、実はいくつかのタイプがあるんだ。データの保存方法によって大きく4種類に分けられるよ。それぞれどんな特徴があるか、身近なたとえで説明するね。
① ドキュメント型
最も人気があるタイプで、JSON形式、つまり「項目名:値」のペアが入れ子になったテキスト形式でデータを保存するんだ。SNSのプロフィールを例にすると、田中くんは「趣味:サッカー・ゲーム」で、鈴木さんは「趣味:読書・料理・旅行、資格:英検2級」みたいに、人によってデータの項目数や内容が違っても全部OKなんだよ。代表例はMongoDB(モンゴディービー)で、スタートアップや個人開発者に特に人気だよ。
② キーバリュー型
「キー(鍵)と値のペア」でシンプルにデータを保存するタイプ。ロッカーのイメージで考えてね。ロッカーの番号(キー)を指定すれば、中身(バリュー)がすぐ取り出せる。検索がとにかく高速!代表例はRedis(レディス)で、「最近見た商品」などの一時データ保存や、セッション情報のキャッシュ(つまり「よく使うデータを一時的に取り出しやすい場所に置いておくこと」)に使われることが多いよ。
③ カラム型
表形式に似てるけど、「列(カラム)単位でデータを保存する」タイプ。大量のデータに対して「特定の列だけ集計したい」という処理が超速い。代表例はApache Cassandra(カサンドラ)で、Netflixなどの大規模サービスが採用しているんだよ。
④ グラフ型
データ同士の「繋がり」を管理するのが得意なタイプ。「AさんとBさんは友達」「BさんとCさんも友達、じゃあAさんとCさんは友達の友達?」という関係性の分析が得意なんだ。SNSの「知り合いかも?」機能や不正検出に使われることが多いよ。代表例はNeo4j(ネオフォージェイ)だよ。
NoSQLが活躍する場面って?
「どんなときにNoSQLを使えばいいの?」これはエンジニアがよく考える問いだよ。NoSQLが特に力を発揮する3つの場面を具体的に見ていこう。
大量のデータをリアルタイムで処理するとき
TwitterやInstagramのように、世界中の何億人ものユーザーが毎秒投稿するサービスを想像してみて。1秒間に何十万件もの書き込みを処理するには、データベースのサーバーを何台も並べて「処理を分散させる」こと、つまりスケールアウトが必要なんだよ。NoSQLはこの分散処理がとても得意で、サーバーを増やせば増やしただけ処理能力が上がるんだ。
データの形がバラバラなとき
ネットショッピングを考えてみよう。洋服には「サイズ・色・素材」という項目があるけど、食品には「賞味期限・アレルゲン」という項目が必要だよね。電化製品なら「消費電力・メーカー保証期間」が要る。全部違う!こういった「カテゴリによってデータの形が違う」ケースで、ドキュメント型のNoSQLはそれぞれの商品情報をそのまま自由な形で保存できるから、テーブル設計が複雑にならないんだよ。
高速なキャッシュが必要なとき
Webサイトを開くとき、毎回データベースに問い合わせてたら遅くなるよね。そこで「よく使うデータをメモリ(超高速の記憶領域)に一時的に保存しておく」のがキャッシュの仕組みだよ。キーバリュー型のRedisはこのキャッシュ用途で大活躍していて、多くのWebサービスの裏側で使われているんだよ。
NoSQLのメリット・デメリット、正直に語ろう
NoSQLは「なんか新しくてスゴい!」というイメージがあるかもしれないけど、メリットもデメリットも両方あるんだよ。正直に整理してみるね。
NoSQLのメリット
まずスケーラビリティが高いこと、つまり「サーバーを増やせば増やした分だけ処理能力が上がる」点が大きな強みだよ。次にスキーマが柔軟なこと。スキーマとは「データの設計図」のことで、NoSQLはこの設計図が固定じゃないから、後からデータの形を変えやすいんだ。それから読み書きが高速なこと。特にキーバリュー型は、1件のデータを取り出す速度がリレーショナルデータベースより圧倒的に速いんだよ。
NoSQLのデメリット
一方で、データの整合性が弱い場合があるという問題がある。NoSQLの多くは「結果整合性」という考え方を採用していて、つまり「すぐには全サーバーに最新データが反映されないけど、最終的には揃うよ」という仕組みなんだ。銀行口座みたいに「今すぐ正確に!」が必要な場面には向いていないよ。また複雑なデータの組み合わせ検索が苦手な場合が多くて、「顧客テーブルと注文テーブルを組み合わせた検索」などはSQLの方が得意なんだ。さらにデータベースごとに使い方が違うため、MongoDBを覚えてもCassandraはまた別物だったりして、学習コストがかかるのもデメリットだよ。
有名なNoSQLデータベースと使っているサービス
「結局、どんなサービスがNoSQLを使ってるの?」気になるよね。実は身近なサービスでばんばん使われているんだよ。
MongoDB
最も有名なNoSQLデータベースのひとつ。ドキュメント型で、JSONに似たBSON形式でデータを保存するよ。スタートアップ企業やWebアプリの開発でよく使われていて、Uberの配車データ管理やAdobe Creative Cloudのユーザーデータなどに使われているんだ。
Redis
「レディス」と読むよ。キーバリュー型で、データをすべてメモリ(RAM)に保存するから超高速なんだ。Twitter(X)のタイムラインのキャッシュや、GitHubのセッション管理など、多くの大規模サービスの「縁の下の力持ち」として活躍しているよ。
Apache Cassandra
Facebookが開発して後にオープンソースになったカラム型データベースだよ。Netflixが視聴データの管理に使っていて、1億人以上のユーザーデータを扱えるスケーラビリティが売りなんだ。「動画が止まらない」体験の裏側にCassandraがいるんだよ。
Amazon DynamoDB
AmazonのAWSが提供するキーバリュー型データベースで、サーバーの管理が不要なフルマネージドサービス、つまり「インフラ管理をAmazonが全部やってくれるサービス」として人気だよ。Amazonのショッピングカートのデータ管理にも使われているとも言われていて、世界規模のトラフィックを支えているんだよ。
こうして見ると、日頃使っているサービスの裏側でNoSQLがいっぱい動いているんだってわかるよね!「データベース」と一言で言っても、使う場面によって最適な種類が違う。それを知っているだけで、エンジニアとしての考え方がグッと広がるんだよ。
