NoSQL とは
NoSQL(別名「not only SQL」)は、リレーショナルテーブルとは異なる方法でデータを保存するデータベースの一種です。NoSQL データベースには、データモデルに基づいたさまざまな種類があります。主なものには、ドキュメント型、キーバリュー型、ワイドカラム型、グラフ型があります。これらのデータベースは、柔軟なスキーマを持ち、膨大な量のビッグデータや高いユーザー負荷にも対応できる優れたスケーラビリティを提供します。
この記事では、NoSQL データベースの基本、NoSQL を使用する理由や適したユースケース、導入方法についてわかりやすく説明します。
目次
- NoSQL データベースとは
- NoSQL データベースのタイプ
- NoSQL データベースの歴史
- NoSQL データベースの機能
- リレーショナルデータベースと NoSQL データベースの比較
- RDBMS と NoSQL データベースの違い
- NoSQL のユースケース
- NoSQL の使用が適しているシナリオ
- NoSQL データベースに関する誤解
- NoSQL クエリチュートリアル
- まとめ
- よくある質問
NoSQL データベースとは
「NoSQL データベース」という用語は、一般的に非リレーショナルデータベース全般を意味する際に使用されます。この「NoSQL」という言葉については、「Non-SQL(SQLではない)」を意味するという説と、「Not Only SQL(SQL だけではない)」を意味するという説があります。いずれにしても、多くの人が NoSQL データベースはデータを自然で柔軟な方法で保存できると認識しています。NoSQL は SQL とは異なり、デー タベース管理のアプローチ全体であり、一方 SQL は NoSQL のクエリ言語と同様に、単なるクエリ言語です。
NoSQL データベースのタイプ
時間の経過とともに、NoSQL データベースには 4 つの主要なタイプが登場しました。ドキュメントデータベース、キーバリューデータベース、ワイドカラムストア、グラフデータベースです。現在では、マルチモデルデータベースも広く普及しています。
ドキュメント指向データベース
ドキュメント指向データベースは、JSON(JavaScript Object Notation)オブジェクトに似たドキュメントにデータを格納します。各ドキュメントには、フィールドと値のペアが含まれます。値は通常、文字列、数値、ブーリアン、配列、あるいは他のオブジェクトなど、さまざまな型にできます。ドキュメントデータベースは柔軟なデータモデルを提供し、半構造化されたデータセットや、一般的に構造化されていないデータセットに適しています。また、ネスト構造をサポートしているため、複雑な関係や階層データを簡単に表現できます。
ドキュメントデータベースの例としては、MongoDB や Couchbase があります。典型的なドキュメントは以下のようになります。
キーバリューデータベース
キーバリューストアは、各項目にキーと値が含まれる、より単純なタイプのデータベースです各キーは一意であり、単一の値に関連付けられます。キャッシュとセッション管理に使用され、メモリに保存する傾向があるため、読み取りと書き込みで高いパフォーマンスを提供します。例としては、Amazon DynamoDB や Redis があります。キーバリューデータベースに格納されたデータの簡単なビューを以下に示します。
ワイドカラム ストア
ワイドカラムストアは、テーブル、行、ダイナミックカラムにデータを格納します。データはテーブルに格納されます。しかし、従来の SQL データベースとは異なり、ワイドカラムストアは柔軟性があり、異なる行が異なるカラムセットを持つことができます。このようなデータベースでは、カラム圧縮技術を採用することで、ストレージ容量を削減し、パフォーマンスを向上させることができます。行やカラムの幅が広いため、疎なデータや幅の広いデータを効率的に検索できます。ワイドカラムストアの例としては、Apache Cassandra や Hbase があります。ワイドカラムにデータが格納される典型的な例を以下に示します。
name | id | dob | city | |
---|---|---|---|---|
Foo bar | 12345 | foo@bar.com | Some city | |
Carn Yale | 34521 | bar@foo.com | 12-05-1972 |
グラフデータベース
グラフデータベースは、ノードとエッジの形式でデータを格納します。グラフデータベースは、ノードとエッジの形式でデータを格納します。ノードは通常、人、場所、物(名詞など)に関する情報を格納し、エッジはノード間の関係に関する情報を格納します。グラフデータベースは、関係やパターンが当初はあまり明らかでないような、高度に接続されたデータに適しています。グラフデータベースの例としては、Neo4J や Amazon Neptune があります。MongoDB も、集約パイプラインの $graphLookup ステージを使ってグラフをトラバーサルする機能を提供しています。以下はデータの格納方法の例です。