NoSQL("Not only SQL"の略)データベースはテーブル形式ではなく、関係テーブルとは異なる方法でデータを保存します。NoSQLデータベースには、データモデルに基づいたさまざまなタイプがあります。主なタイプは、ドキュメント、キーバリュー、ワイドカラム、グラフです。柔軟なスキーマを利用でき、大量のデータや高いユーザー負荷がある場合には簡単に拡張できます。

NoSQLとは何か

一般に、“NoSQLデータベース” という用語は関係データベース以外のデータベースを指します。“NoSQL(NoSQL)“ が “non SQL“ を意味すると考える人もいれば、“not only SQL“ を意味すると考える人もいます。いずれにしても、ほとんどの人はNoSQLデータベースは関係テーブルとは異なるフォーマットでデータを保存するデータベースであると認識しています。

よくある誤解に、NoSQLデータベースつまり非関係データベースでは、関係データをうまく保存できないというものがあります。しかし、NoSQLデータベースも関係データを保存できます。単に関係データベースとは保存方法が異なるだけです。実際、SQLデータベースと比較すると、NoSQLデータベースでの関係データのモデリングは、関連するデータを複数のテーブルに分割する必要がないため、SQLデータベースより簡単であることがわかります。

NoSQLデータモデルでは、関連するデータを単一のデータ構造内にネストできます。

NoSQLデータベースは、ストレージの価格が大幅に下がった2000年代後半に登場しました。データの重複を減らすことだけを目的に、複雑で管理の大変なデータモデルを作成する必要性はなくなりました。ソフトウェア開発の主なコストは(ストレージではなく)開発者になりつつあったため、NoSQLデータベースは開発者の生産性向上を目的に最適化されるようになりました。

ストレージのコストが急速に下がる中で、アプリケーションが保存およびクエリする必要があるデータの量は増加しました。このデータは、構造化、半構造化、多形など形やサイズがさまざまに異なっており、事前にスキーマを定義しておくことがほぼ不可能になりました。NoSQLデータベースを使用すると、開発者は構造化されていないデータを大量に保存できるため、柔軟性が大きく向上します。

加えて、アジャイルマニフェストの人気が高まり、ソフトウェアエンジニアはソフトウェアの開発方法を考え直していました。エンジニアたちは、変化する要件に迅速に適応する必要性を認識しつつありました。データベースモデルに至るまで、ソフトウェアスタック全体にわたって迅速な反復処理と変更を行えることが必要になりました。この柔軟性をもたらしたのがNoSQLデータベースでした。

また、クラウドコンピューティングも一般化し、開発者がパブリッククラウドを使用してアプリケーションとデータをホストするようになりました。求められたのは、複数のサーバーやリージョンにデータを分散してアプリケーションの復元力を高め、スケールアップではなくスケールアウトし、データを地理的な場所にインテリジェントに配置する機能でした。そのような機能を提供していたのが、MongoDBなどの一部のNoSQLデータベースでした。

SQLとは何か

NoSQLデータベースについて理解できたところで、次はこれまで最も一般的に使用されてきた、SQL(構造化問い合わせ言語)でアクセスされる関係データベースと比較してみましょう。SQLは、固定の列と行を持つテーブルにデータを保存する関係データベースと対話する場合に使用できます。

SQLデータベースは1970年代初頭から広く使用されるようになりました。当時、ストレージは非常に高価であったため、ソフトウェアエンジニアはデータの重複を減らすためにデータベースを正規化していました。

また、1970年代のソフトウェアエンジニアは一般に、ウォーターフォールソフトウェア開発モデルに従っていました。プロジェクトは、開発を開始する前に詳細に計画されていました。ソフトウェアエンジニアは、保存する必要があるすべてのデータについて入念に考慮するため、苦労して複雑な実体関連(E-R)図を作成していました。この事前計画モデルのため、開発サイクルの途中で要件が変更された場合、ソフトウェアエンジニアはこれに適応するのに苦労していました。その結果、プロジェクトが予算や納期を超過し、ユーザーの要求どおりに納品できないことがよくありました。

NoSQLデータベースのタイプ

これまで、主に4つのタイプのNoSQLデータベースが登場しています。ドキュメントデータベースキーバリュー型データベース、ワイドカラムストア、そしてグラフデータベースの4つです。各タイプについて詳しく見ていきましょう。

  • ドキュメントデータベースは、JSON(JavaScript Object Notation)オブジェクトに似たドキュメントにデータを保存します。各ドキュメントにはフィールドと値のペアが含まれます。通常、値として文字列、数値、ブール型、配列、オブジェクトなどさまざまなタイプを指定できます。また一般的に、値の構造は開発者がコードで使用するオブジェクトに合わせて決められます。フィールド値のタイプが多様で、問い合わせ言語が強力であるため、ドキュメントデータベースは幅広い使用例に適しており、汎用的なデータベースとして使用できます。水平方向に拡張することで大量のデータに対応できます。MongoDBもドキュメントデータベースであり、DB-Enginesによると、世界で最も人気のあるNoSQLデータベースとして常にランクされています。ドキュメントデータベースの詳細については、「ドキュメントデータベースとは」を参照してください。

  • キーバリュー型データベースは、より単純なタイプのデータベースで、各項目にキーと値が含まれます。値は通常、そのキーを参照することでのみ取得できるため、特定のキーバリューペアに対するクエリ方法を簡単に学習できます。キーバリュー型データベースは、大量のデータを保存する必要がある一方で、それを取得するために複雑なクエリを実行する必要がない場合に最も適しています。一般的な使用例は、ユーザー設定の保存やキャッシュなどです。よく使用されているキーバリュー型データベースには、RedisやDynanoDBがあります。

  • ワイドカラムストアでは、データをテーブル、行、および動的な列に保存します。ワイドカラムストアは、各行に同じ列がある必要がないため、関係データベースよりも柔軟です。一般的には、ワイドカラムストアは2次元のキーバリュー型データベースであると見なされています。ワイドカラムストアは、大量のデータを保存する必要があり、クエリパターンが予想できる場合に最適です。ワイドカラムストアは、モノのインターネット(IoT)データやユーザープロファイルデータの保存によく使用されます。最もよく使用されるワイドカラムストアには、CassandraやHBaseがあります。

  • グラフデータベースでは、ノードとエッジにデータを保存します。ノードは通常、人、場所、物事に関する情報を保存するのに対し、エッジはノード間の関係に関する情報を保存します。グラフデータベースは、ソーシャルネットワーク、不正検出、レコメンデーションエンジンなど、関係を横断してパターンを探す必要がある用途に適しています。Neo4jやJanusGraphはグラフデータベースの例です。

NoSQLデータベースの仕組み

設計の観点からNoSQLデータベースの利点を理解する方法の1つとして、非常に簡略化された住所データを使用する例で、SQLおよびNoSQLデータベースのデータモデルがどのように見えるかを確認しましょう。

SQLの場合: SQLデータベースの場合、住所用データベースのセットアップは、論理的なフォーマット構築から開始され、保存されるレコードは比較的変更されないことが想定されます。予想されるクエリパターンを分析した後、SQLデータベースのストレージを2つのテーブルに最適化します。1つを基本情報のテーブル、もう1つを顧客テーブルとし、姓が両方のテーブルのキーとなります。各テーブルの各行が1人の顧客です。各列は次のような固定属性を持ちます。

  • 姓 :: 名 :: ミドルイニシャル :: 住所フィールド :: メールアドレス :: 電話番号
  • 姓 :: 生年月日 :: 口座番号 :: 顧客年数 :: 希望の連絡方法

NoSQLの場合: 上記の「NoSQLデータベースのタイプ」セクションで4つのタイプについて説明しました。各タイプには、それぞれ独自のデータモデルがあります。

NoSQLデータベースの各タイプは、特定の顧客状況を想定して設計され、各種のデータベースの編成方法については技術的な理由があります。 最も簡単に記述できるタイプは、ドキュメントデータベースです。このデータベースでは、基本情報と顧客情報を1つのJSONドキュメントにまとめるのが自然です。この場合、各SQL列の属性はフィールドとなり、顧客のレコードの詳細は各フィールドに関連付けられたデータ値となります。

例: Last_name: "Jones", First_name: "Mary", Middle_initial: "S", など

NoSQLデータベースを試してみる

NoSQLデータベースを試すには、MongoDB Atlasから始めることをお勧めします。AtlasはMongoDBによる完全管理データベースサービスで、すべての主要なクラウドプロバイダーで利用できます。Atlasには無期限の無料利用枠があり、試しに使用して基本を理解することができます。

Atlasアカウントを取得した後、何をしたらよいかわからない場合は、MongoDB Universityにアクセスしてみましょう。MongoDBエンジニアによる無料のオンライントレーニングを利用できます。MongoDB Universityのコース登録数は140万を超えています。クイックスタートチュートリアルから始めるのもお勧めです。お好きなプログラミング言語ですぐに利用を開始できます。

この記事はMongoDBデベロッパーアドボケイトであるLauren Schaeferが作成したものです。

NoSQLデータベースとSQLデータベースの主な違いの詳細については、「NoSQL vs SQLデータベース」を参照してください。

MongoDB Atlasを始める

優れたNoSQLデータベースであるMongoDBのメリットをクラウド上で体験してください。