NoSQLとは?RDBMSでは難しい大量データ・高速処理を解説

システム開発・テクノロジー
NoSQLとは?ざっくりと3行で
  • Not only SQL(あるいはNon-relational)の略。テーブル形式に縛られないデータベースの総称で、キーバリュー・ドキュメント・カラム・グラフの4種類がある
  • 水平スケールが容易でペタバイト規模のデータを高速処理できるのが最大の強み。WebサービスやSNSの大量データ処理に広く使われる
  • スキーマを事前に定義しなくてよい柔軟性があるが、トランザクションの保証がRDBMSより弱いため、用途に合わせてRDBMSと使い分けることが重要だ

【深掘り】これだけ知ってればOK!

NoSQLの4種類を一言で覚えよう。キーバリュー型(Redisなど)は高速なキャッシュ。ドキュメント型(MongoDB)はJSONでコンテンツ管理。カラム型(Cassandra)は大量ログの時系列処理。グラフ型(Neo4j)はSNSの友人関係のような複雑なリレーション分析に使う。

NoSQLが注目された背景はWebサービスの規模爆発だ。Facebookが数十億人分のプロフィールを管理する、Twitterが毎秒数十万ツイートを書き込む、といった規模にRDBMSのVERTICAL SCALE(スケールアップ)では限界が来た。NoSQLはサーバーを横に増やすだけでほぼ線形にスケールする水平スケールで対応できる。

RDBMSとNoSQLの使い分け判断軸を整理しよう。ACID準拠が必要な金融取引・在庫管理・会計処理はRDBMS一択だ。スキーマが頻繁に変わるコンテンツ管理・大量のセッションデータ・リアルタイムのランキング処理・時系列ログの大量蓄積はNoSQLが有利な用途だ。多くの本番システムではRDBMSとNoSQLを組み合わせて使う。

NoSQLはACIDを犠牲にして性能を得るケースが多いため、結果整合性(Eventual Consistency)を理解しておくことが重要だ。書き込み直後に別のサーバーから読み込むと古いデータが返ることがある。「少し古いデータでもいいから高速に返したい」というユースケースに向いており、厳密な整合性が必要な場面では設計上の工夫が必要だ。

近年はNoSQLとRDBMSの境界が曖昧になりつつある。PostgreSQLはJSON型に対応してドキュメントDBのように使え、MongoDBはトランザクション機能を追加した。クラウドのNewSQL(Google Spanner・Amazon Aurora)は水平スケールとACIDを両立する第3の選択肢として台頭している。

よくある誤解

NoSQLはSQLを使えないという誤解

NoSQLとはSQLを使わないという意味ではなく、Not only SQL(SQLだけに限らない)という意味だ。CassandraはCQL(Cassandra Query Language)というSQL似の言語を使い、MongoDBでもSQL変換ツールが提供されている。

NoSQLはRDBMSより優れているという誤解

「優れている」のではなく「用途が異なる」が正確だ。トランザクション整合性・複雑なJOIN・標準SQLが必要な用途ではRDBMSが適切だ。大規模・高速・柔軟なスキーマが必要な用途ではNoSQLが適切だ。

会話での使われ方

ITKAGYO運営者のアイコン画像

セッション管理はRedisで持ったほうがRDBMSへの負荷が下がりますよ。今のMySQLがボトルネックになってますし。

バックエンドエンジニアがアーキテクチャ改善を提案している場面。

ITKAGYO運営者のアイコン画像

MongoDBにしたらスキーマ変更のマイグレーション作業がなくなって開発スピードが上がりました。

スタートアップのCTOがプロダクト開発での経験を話している場面。

ITKAGYO運営者のアイコン画像

NoSQLって何でもできそうに見えますが、金融系のトランザクションはRDBMSじゃないとダメですよね?

技術選定の相談で新人エンジニアがベテランに確認している場面。

【まとめ】3つのポイント

  • 「RDBMSの制約を外した水平スケール向けの柔軟なDB群」:NoSQLはキーバリュー・ドキュメント・カラム・グラフの4種類があり大規模WebサービスやSNSの大量データ処理を支える
  • RDBMSと用途を使い分けることが実務の正解:ACID準拠が必要な業務DBはRDBMS、高速・スケール・柔軟スキーマが必要な部分にNoSQLを組み合わせるのが標準的な設計だ
  • 結果整合性モデルを理解した上で設計する:書き込み直後の読み取りで古いデータが返ることがある特性を把握した上でアーキテクチャを設計することが重要だ

よくある質問

Q
NoSQLの代表的なデータベースを教えてください
A

キーバリュー型のRedis・Memcached、ドキュメント型のMongoDB・Firestore、カラム型のCassandra・HBase、グラフ型のNeo4jが代表的です。クラウドではAWS DynamoDB・Google Firestore・Azure Cosmos DBも広く使われています。

Q
NoSQLはどんな会社で使われていますか?
A

Facebookがカラム型のCassandraをメッセージングに、TwitterがRedisをタイムラインキャッシュに、LinkedInがグラフ型DBをつながり検索に使っています。国内でもLINE・メルカリなど大量データを処理するWebサービスで採用されています。

Q
RDBMSとNoSQL、新しいシステムにはどちらを選べばいいですか?
A

まずRDBMSで始めることを推奨します。スタートアップ初期はデータ量が少なくRDBMSで十分な場合が多いです。スケールの問題や特定のユースケースが出てきた段階でNoSQLを追加検討するのが合理的です。

Q
NoSQLとRDBMSの違いは何ですか?
A

RDBMSはテーブル形式でスキーマを事前定義し、ACID準拠のトランザクションを保証します。NoSQLはテーブル形式に縛られず柔軟なデータ構造を持ち、水平スケールが容易な代わりにACIDの保証が弱い場合があります。

この用語と一緒に知っておきたい用語

用語この記事との関連
SQLSQLを押さえると本記事の理解がさらに深まります。Structured Query Languageの略(読み:エスキューエル)。リレーショナルデータベースを操作するための標準言語で、データの検索・追加・更新・削除を記述する
データ本記事のテーマと実務上セットで使われることが多い用語です。コンピュータが処理する数値や文字、画像といった事実や資料そのもの、それがデータだ
MongoDB本記事のテーマと実務上セットで使われることが多い用語です。NoSQLのドキュメント型データベース。JSONに近いBSON形式でデータを保存するためスキーマ定義なしにデータを扱えり、Webアプリのバックエンドで広く採用される
CassandraCassandraとの関係を知ると全体像がつかみやすくなります。Apache Software Foundationが管理するオープンソースのNoSQL列指向DB。マスターレスの完全分散アーキテクチャで、単一障害点なしにペタバイト規模のデータを処理できる
トランザクショントランザクションは関連分野でよく登場する重要キーワードです。データベースにおいて複数の操作を「全て成功するか・全て失敗して元に戻るか」の一つの処理単位として扱う仕組みのこと

【出典】参考URL

https://www.winserver.ne.jp/column/about_nosql/ :NoSQLとRDBMSの詳細比較
https://techblog.asia-quest.jp/202409/what-is-the-difference-between-sql-and-nosql :SQLとNoSQLの違い

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!