web-dev-qa-db-ja.com

NoSQLと従来のRDBMSの違いは何ですか?

NoSQLと従来のRDBMSの違いは何ですか?

この数か月間、NoSQLはテクニカルニュースで頻繁に取り上げられてきました。従来のRDBMSと比較して最も重要な機能は何ですか?違いはどのレベル(物理的、論理的)で発生しますか?

NoSQLを使用するのに最適な場所はどこですか?どうして?

71
Spredzy

NoSQLは「SQLだけではない」という意味で、通常、データベースはリレーショナルデータベースではないことを意味します。

ここ数年、NoSQLが非常に人気を博している理由は、リレーショナルデータベースが1つのサーバーから成長すると、使いやすくなくなったためです。つまり、分散システムではスケールアウトがうまくいきません。グーグル、ヤフー、フェイスブック、アマゾン(Diggについてはあまり知りません)で言及したすべての大きなサイトには、多くのデータがあり、いくつかの理由で分散システムにデータを保存しています。データが1つのサーバーに収まらないか、高可用性の要件が存在する可能性があります。

CAP定理

分散システムのプロパティは CAP Theorem で記述できます。 3つのプロパティのうち、最大で2つしか持つことができません。

  • [〜#〜] c [〜#〜]一貫性
  • [〜#〜] a [〜#〜]可用性
  • ネットワークの許容範囲[〜#〜] p [〜#〜] artitioning

Amazon Dynamoは Eventual Consistency を使用して、3つのプロパティすべてを取得します。論文 Dynamo:Amazonの高可用性Key-Valueストア は、NoSQLデータベースと分散システムについて学ぶときに読む価値があります。 Amazon DynamoにはAプロパティとPプロパティがあります。

Googleは、CおよびAプロパティを持つ BigTable を使用した別のアプローチを採用しています。

その他のNoSQLデータベース

最初に書いたように、さまざまな要件向けに設計された他の多くの種類のNoSQLデータベースがあります。例えば。 Neo4j のようなグラフデータベース、 CouchDB のようなドキュメントデータベース、および OrientDB のようなマルチモデル/オブジェクトデータベース。

最後に、リレーショナルデータベースは引き続き人気があると言いたいと思います。それらは非常に柔軟で保守可能です。しかし、それらが常に最良の選択であるとは限りません。

61
Jonas

NoSQLは非常に広義の用語であり、通常は「SQLだけではない」という意味で呼ばれます。この用語は、RDBMS以外のコミュニティでは支持されなくなっています。

NoSQLデータベースには一般的な特徴がほとんどないことがわかります。それらは、いくつかのカテゴリに大別できます。

  • キー/値ストア
  • Bigtableにインスパイアされたデータベース(Google Bigtableペーパーに基づく)
  • Dynamoにインスパイアされたデータベース
  • 分散データベース
  • ドキュメントデータベース

これは大きな質問ですが、これでかなりよく答えられます 分散データベースの調査

短い答えの場合:

NoSQLデータベースでは、ACIDのさまざまな部分を省略して、パーティションの許容度、パフォーマンス、負荷の分散、新しいハードウェアの追加による線形スケーリングなどの特定の利点を実現できます。

それらをいつ使用するかについては、それは完全にアプリケーションのニーズに依存します。

22

NoSQLは、従来のRDBMSのような固定スキーマを持たないデータベースの一種です。 NoSQLデータベースの場合、スキーマは実行時に開発者によって定義されます。データベースに対して通常のSQLステートメントを作成するのではなく、APIを使用して必要なデータを取得します。 NoSQLデータベースは通常、探しているデータがどのサーバーにあるかを知る必要なく、さまざまな物理サーバー間で簡単に拡張できます。

ただし、このすべての柔軟性にはいくつかのトレードオフがあります。NoSQLデータベースは、SQL Server、Oracle、DB2、MySQLなどのRDBMSシステムに比べてかなり機能が不足しています。ServiceBroker、トランザクションログ、ETLパッケージなどはありません。

NoSQLは新しいものではありません。それは実際に50-60年の間あります。当時はCOBOLと呼ばれていました。まったく同じアイデア、ただ別のグループがそれを思いついた。

12
mrdenny

基本的には、リレーショナル設定、主キーと外部キー、およびトランザクションの安全性の維持に伴う追加のオーバーヘッドを省くと、多くの場合、パフォーマンスが大幅に向上します。ただし、これは新しいデータベース/データストアに固有のものではありません。たとえば、MySQLはレイヤーをバイパスして「NoSQLレベル」で実行するように調整されています。

つまり、データが失われる可能性があるというリスクを負っていれば、多くの場合、印象的なパフォーマンスを得ることができます。ほとんどのNoSQLシステムがこれを行います。たとえば、MongoDBは、都合の良いときに書き込まれるデータ変更をステージングします。データ自体は安全でトランザクション的に安全ですが、揮発性ストレージ(メモリ)に保持されます。電源が切れた場合、データが失われていないか、データが破損していないかを100%確認することはできません。

これは、セキュリティとパフォーマンスの間のトレードオフです。

6
Johanna Larsson

開始するのに適した場所は Wikipediaのエントリ です。基本的に、あるテーブルのデータを別のテーブルに関連付け、キーと値のペアとして格納します。データベーススキーマはなく、コードで処理されます。

いくつかのサイトでは、NoSQLと一般的なRDBMSサーバーの両方を同時に使用していますが、異なるデータを格納しています。したがって、どちらか一方を選択する必要はありません。

5
steve.lippert

MongoDB NoSQLデータベースとOracleに重点的に取り組んできました。

スキーマ

SQLデータベースには、構造化データを格納するための独自の定義済みスキーマがあります。

NoSQLデータベースには、事前定義されたスキーマはありません。スキーマは、データ要素に基づく最も動的な要素です。

スケーラビリティ

SQLデータベースは垂直方向にスケーラブルです。つまり、SQLベースのデータベースをスケーリングする場合は、DBMSシステムがインストールされているハードウェアを強化する必要があります。これは、スケーラビリティの制限のために時々行くところです。

NoSQLデータベースは水平方向にスケーラブルです。つまり、スケーリングする場合は、ノードを追加し、独自のニーズと必要なパワーに基づいて分散ネットワークを作成する必要があります。これは、データベースへの負荷を軽減する方法です

データ検索

SQLベースのデータベースでは、データを定義および操作するために、現在非常に強力なSQL(構造化照会言語)を使用できます。

NoSQLデータベースに関しては、クエリはコレクションとドキュメントに重点を置いています。 UnQL(Unstructured Query Language)と呼ばれることもあります。これはまだ発展段階にあるため、NoSQLデータベースのベンダーによって異なります。

主な違いの詳細については、私のブログ: SQLとNoSQLデータベースの違い

0