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


71

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

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

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

回答:


61

NoSQLは「SQLだけでなく」の略で、通常、データベースがリレーショナルデータベースではないことを意味します。これは過去数十年で非常に人気がありました。

NoSQLがここ数年で非常に人気を博した理由は、主に、リレーショナルデータベースが1つのサーバーから大きくなると、それほど使いにくいからです。つまり、分散システムではうまくスケールアウトしません。Google、Yahoo、Facebook、およびAmazon(Diggについてはあまり知りません)に言及したすべての大規模サイトには、多くのデータがあり、いくつかの理由で分散システムにデータを保存しています。データが1つのサーバーに収まらない場合や、高可用性の要件がある場合があります

CAP定理

分散システムのプロパティは、CAP定理によって説明できます。3つのプロパティのうち、最大で2つしか使用できません。

  • Cの onsistency
  • vailability
  • ネットワークPの調整に対する耐性

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

Google は、CとAのプロパティを持つBigTableで異なるアプローチを取ります。

その他のNoSQLデータベース

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

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


1
良い、網羅的な答え。
TML

NoSQLは非リレーショナルを意味するのではなく、SQL DBMS以外のものを意味します。
-nvogel

1
最近のO'Reilly Strata Conferenceで、Mark Madsenはデータベースの歴史に「NoSQL」の新しい解釈を作り出し、「Not Only SQL」に取って代わるものではないようです。それが今である:「いいえ、SQL」;-)
ルーカス・エデル

6
「だけでなく」はレトロフィットであり、初期のNoSQLの動きはリレーショナルデータベースに対して猛烈な勢いでした。その後、彼らは現実の世界を襲った。
ガイウス

22

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

NoSQLデータベースには共通の特性がほとんどないことがわかります。それらはいくつかのカテゴリに大まかに分けることができます:

  • キー/値ストア
  • Bigtableに触発されたデータベース(Google Bigtableの論文に基づく)
  • Dynamoに触発されたデータベース
  • 分散データベース
  • 文書データベース

これは大きな質問ですが、この「分散データベースの調査」ではかなりよく回答されています。

短い答え:

NoSQLデータベースは、特定のその他の利点を実現するためにACIDのさまざまな部分を省くことができます。パーティションの許容範囲、パフォーマンス、負荷の分散、または新しいハードウェアの追加に伴う線形のスケーリングです。

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


12

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

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

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


3
ポイント1は、多くの(すべての?)NoSQLデータベースで、書き込みが成功しても気にしないことをデータベースに明示的に伝えていない限り、正しくありません。たとえば、Hadoopでバックアップされたデータベースは、データを3つの場所に書き込みます。デフォルトでは、Cassandraは3つの場所に書き込み、2つの場所が成功すると書き込みが成功したことを確認します。
ジェレマイアペシュカ

3
それらの更新を行うとき、どのように並行性を処理しますか?それらの間を行き来する分散型トランザクションはありますか、それとも書き込みは事前にACKされ、サーバーは残りをバックグラウンドで処理しますか?
mrdenny

並行性は実装に完全に依存します。Riakはベクトルクロックを使用して同時実行性を確保し、競合する書き込みが発生した場合は、呼び出し側アプリケーションに返して解決することができます。他の人は最後の書き込みの勝利を使用します。
ジェレマイアペシュカ

書き込み確認に関する限り-ほとんどの場合、書き込みは、OSが書き込みを確認するまで確認されません。永続的な書き込みの確認を要求することもできます。つまり、ビットはOSバッファーにあるのではなく、実際にディスクにフラッシュされます。MongoDBはデフォルトでメモリへの書き込みを確認しますが、ディスクへの書き込みの確認を要求するように設定できます。複製は、製品ごとに異なる方法で処理されます。Hadoopを使用すると、クライアントはサーバーAに書き込み、サーバーAはBに書き込み、Cに書き込みます。Cが応答すると、書き込みは完了し、クライアントは書き込み確認を取得します。
ジェレマイアペシュカ

その場合、私は訂正します。間違ったステートメントを削除しました。私は他に何かしましたか?
mrdenny

6

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

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

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


5

始めるのに適した場所は、ウィキペディアのエントリです。基本的に、あるテーブルのデータを別のテーブルに関連付ける場合、キーと値のペアとして物事を保存し、データベーススキーマはありません。代わりにコードで処理されます。

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


この質問の大部分がWPに行くことによって答えられるという事実は、私がここで答えを熟考するとき、私のあごをこすります。これは少し「フィラーの質問」だと思いますが、今のところそれだけです。
jcolebrand

1
ここで重要な点は、データベース/サーバーインフラストラクチャでリレーション(外部​​キー)のサポートを回避すると、参照整合性を維持する負荷とロック管理のオーバーヘッドからデータベース/サーバーが解放されることです。この結果、トレードオフは、参照整合性、一貫性、およびその他のACIDの懸念がアプリケーションにプッシュされることです。多くのアプリケーションは、これによって制限されるのではなく、この恩恵を受けます。(一部のアプリケーションは、クライアント/サーバーモデルに組み込む必要があります)。
ジム・デニス

0

私は、MongoDB NoSQL DatabaseとOracleに深く取り組んできました。

スキーマ

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

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

拡張性

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

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

データ検索

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.