回答:
NoSQLは「SQLだけでなく」の略で、通常、データベースがリレーショナルデータベースではないことを意味します。これは過去数十年で非常に人気がありました。
NoSQLがここ数年で非常に人気を博した理由は、主に、リレーショナルデータベースが1つのサーバーから大きくなると、それほど使いにくいからです。つまり、分散システムではうまくスケールアウトしません。Google、Yahoo、Facebook、およびAmazon(Diggについてはあまり知りません)に言及したすべての大規模サイトには、多くのデータがあり、いくつかの理由で分散システムにデータを保存しています。データが1つのサーバーに収まらない場合や、高可用性の要件がある場合があります。
分散システムのプロパティは、CAP定理によって説明できます。3つのプロパティのうち、最大で2つしか使用できません。
Amazon Dynamoは最終的な整合性を使用して、3つのプロパティすべてを取得します。論文Dynamo:Amazonの高可用性Key-Valueストアは、NoSQLデータベースと分散システムについて学ぶときに読む価値があります。Amazon DynamoにはAおよびPプロパティがあります。
Google は、CとAのプロパティを持つBigTableで異なるアプローチを取ります。
最初に書いたように、さまざまな要件に合わせて設計された他の種類のNoSQLデータベースがたくさんあります。例えば、Neo4jのようなグラフデータベース、CouchDBのようなドキュメントデータベース、OrientDBのようなマルチモデル /オブジェクトデータベース。
最後に、リレーショナルデータベースは引き続き人気があると言いたいと思います。彼らは非常に柔軟で保守可能です。しかし、常に最良の選択とは限りません。
NoSQLは非常に広義の用語であり、通常は「SQLだけではない」という意味です。この用語は、RDBMS以外のコミュニティでは支持されなくなりました。
NoSQLデータベースには共通の特性がほとんどないことがわかります。それらはいくつかのカテゴリに大まかに分けることができます:
これは大きな質問ですが、この「分散データベースの調査」ではかなりよく回答されています。
短い答え:
NoSQLデータベースは、特定のその他の利点を実現するためにACIDのさまざまな部分を省くことができます。パーティションの許容範囲、パフォーマンス、負荷の分散、または新しいハードウェアの追加に伴う線形のスケーリングです。
それらをいつ使用するかについては、アプリケーションのニーズに完全に依存します。
NoSQLは、従来のRDBMSのような固定スキーマを持たない一種のデータベースです。NoSQLデータベースでは、スキーマは実行時に開発者によって定義されます。データベースに対して通常のSQLステートメントを作成するのではなく、代わりにAPIを使用して必要なデータを取得します。通常、NoSQLデータベースは、探しているデータがどのサーバーにあるかを知る必要なく、異なる物理サーバーに簡単に拡張できます。
ただし、このすべての柔軟性にはいくつかのトレードオフがあります。NoSQLデータベースは、SQL Server、Oracle、DB2、MySQLなどのRDBMSシステムに比べてかなり機能が不足しています。ServiceBroker、トランザクションロギング、ETLパッケージなどはありません。
NoSQLは新しいものではありません。それは実際に50-60年の間ありました。当時はCOBOLと呼ばれていました。まったく同じ考えで、別のグループが思いついただけです。
基本的に、リレーショナルセットアップ、プライマリキー、外部キー、およびトランザクションの安全性を維持するための追加のオーバーヘッドを省くことにより、パフォーマンスが大幅に向上することがよくあります。ただし、これは新しいデータベース/データストアに固有のものではありません。たとえば、MySQLは、レイヤーをバイパスして「NoSQLレベル」で実行するように調整されています。
要するに、データを失う可能性があるというリスクを冒しても大丈夫であれば、多くの場合、印象的なパフォーマンスを得ることができます。ほとんどのNoSQLシステムはこれを行います。例えば、MongoDBは、都合の良いときにデータの変更を書き込みます。データ自体は安全でトランザクション的に安全ですが、揮発性ストレージ(メモリ)に保持されます。電源が失われた場合、データが失われていないこと、または破損したデータがないことを100%確信することはできません。
セキュリティとパフォーマンスのトレードオフです。
始めるのに適した場所は、ウィキペディアのエントリです。基本的に、あるテーブルのデータを別のテーブルに関連付ける場合、キーと値のペアとして物事を保存し、データベーススキーマはありません。代わりにコードで処理されます。
一部のサイトでは、NoSQLと一般的なRDBMSサーバーの両方を同時に使用していますが、異なるデータを保存しています。したがって、どちらかを選択する必要はありません。
私は、MongoDB NoSQL DatabaseとOracleに深く取り組んできました。
スキーマ
SQLデータベースには、構造化データを保存するための独自の定義済みスキーマがあります。
NoSQLデータベースには、事前定義されたスキーマはありません。ここで、スキーマはデータ要素に基づく最も動的な要素です。
拡張性
SQLデータベースは垂直方向にスケーラブルです。つまり、SQLベースデータベースを拡張する場合、DBMSシステムがインストールされているハードウェアを強化する必要があります。これは、スケーラビリティの制限のために時々行くところです。
NoSQLデータベースは水平方向にスケーラブルです。つまり、スケーリングする場合は、独自のニーズと必要な電力に基づいてノードを追加し、配信ネットワークを作成する必要があります。これは、データベースの負荷を軽減する方法です
データ検索
SQLベースのデータベースでは、データを定義および操作するために、現在非常に強力なSQL(構造化照会言語)を使用できます。
NoSQLデータベースに関しては、クエリはコレクションとドキュメントに焦点を当てています。UnQL(Unstructured Query Language)と呼ばれることもあります。これはまだ進化段階にあるため、NoSQLデータベースのベンダーによって異なります。
主な違いの詳細については、私のブログ:SQLとNoSQLデータベースの違い