NoSQLとは何ですか、どのように機能し、どのような利点がありますか?[閉まっている]


168

私はNoSQLについての話を聞いていましたが、DBの相互作用はWeb上の速度のボトルネックになることが多いため、SQLのストレージメソッドの代わりになるかもしれません。

だから私はいくつかの質問があります:

  1. 正確には何ですか?

  2. どのように機能しますか?

  3. SQLデータベースを使用するよりも優れているのはなぜですか?そしてそれはどれほど良いのですか?

  4. テクノロジーはまだ実装を開始するには新しすぎますか、それとも調査する価値がありますか?


ここにたくさんの良い答えがあります。私はまた、他の同様の質問に対する有用な回答を見つけました:(1)車のメタファーと多くの参照で説明されているSQLを 150以上の賛成意見がありません(2)70以上のnosql がnosqlがどのように作成されたのか/なぜ説明されたかの歴史を説明しました今日存在する理由
Trevor Boyd Smith

回答:


110
  1. 正確には何ですか?

    一方では、特定のシステムですが、リレーショナルDBモデルに従わないさまざまな新しいデータストレージバックエンドの総称にもなっています。

  2. どのように機能しますか?

    総称名でラベル付けされた各システムは異なる動作をしますが、基本的な考え方は、総称RDBMSのすべての機能をサポートしていませんが、まだ十分な機能を備えているDBモデルを使用することにより、スケーラビリティとパフォーマンスを向上させることです。ある意味、MySQLのようでしたが、トランザクションのサポートが一時的に欠けていましたが、原因で、他のDBシステムをしのぐことができました。トランザクションを必要としない方法でアプリを書くことができれば、それは素晴らしいことでした。

  3. SQLデータベースを使用するよりも優れているのはなぜですか?そしてそれはどれほど良いのですか?

    サイトを大規模に拡張する必要があり、最高のハードウェアで実行でき、可能な限り最適化されたRDBMSができるだけ負荷に追いつけない場合に適しています。それがどれほど優れているかは、特定のユースケースに依存します(多くの結合と結合された多くの更新アクティビティは、「従来の」RDBMSでは非常に困難です)-極端な場合、1000倍になる可能性があります。

  4. テクノロジーはまだ実装を開始するには新しすぎますか、それとも調査する価値がありますか?

    主に達成しようとしていることに依存します。それは確かに使用するのに十分成熟しています。しかし、それを大規模に拡張する必要のあるアプリケーションはほとんどありません。ほとんどの場合、従来のRDBMSで十分です。ただし、インターネットの利用がますますユビキタスになるにつれて、それを行うアプリケーションがより一般的になる可能性が高くなります(おそらく支配的ではありません)。


2
はどういう意味transactionですか?
Shawn Mclean


「さまざまな新しいデータストレージバックエンド」リンクが機能しなくなった
csguy

1
@csguyのおかげで、消える可能性が低いものに置き換えられました
Michael Borgwardt

135

NoSQLのようなものはありません!

NoSQLは流行語です。

何十年もの間、人々がデータベースについて話していたとき、彼らはリレーショナルデータベースを意味しました。そして、人々がリレーショナルデータベースについて話しているとき、それらはあなたがエドガーF.コッドの構造化クエリ言語で制御するものを意味しました。他の方法でデータを保存していますか?狂気!それ以外は単なるフラットファイルです。

しかし、ここ数年、人々はこの教義に疑問を投げかけ始めました。人々は、行と列を持つテーブルが本当にデータを表現する唯一の方法であるかどうか疑問に思いました。人々は考え始め、コーディングを始め、データを整理する方法について多くの新しい概念を思いつきました。そして、これらの新しいデータ操作方法用に設計された新しいデータベースシステムの作成を開始しました。

これらすべてのデータベースの哲学は異なっていました。しかし、これらすべてのデータベースに共通していることの1つは、構造化クエリ言語がデータベースの使用に適していないことです。そのため、各データベースはSQLを独自のクエリ言語に置き換えました。そのため、NoSQLという用語は、古典的なリレーショナルデータベースモデルを無視するすべてのデータベーステクノロジーのラベルとして生まれました。

では、NoSQLデータベースの共通点は何でしょうか。

実際、それほどではありません。

次のようなフレーズをよく耳にします。

  • NoSQLはスケーラブルです!
  • NoSQLはBigData用です!
  • NoSQLはACIDに違反しています!
  • NoSQLは栄光のキー/バリューストアです!

本当?まあ、これらのステートメントの一部は、一般的にNoSQLと呼ばれる一部のデータベースに当てはまる場合がありますが、1つ1つすべてが少なくとも1つの他にも当てはまります。実際、NoSQLデータベースの唯一の共通点は、SQLを使用しないデータベースであることです。それでおしまい。それらを定義する唯一のものは、それらを互いに区別するものです。

では、NoSQLデータベースの違いは何ですか?

そのため、一般的にNoSQLと呼ばれているデータベースはすべて異なり、それらを一緒に評価することはできません。それぞれを個別に評価して、特定の問題を解決するのに適しているかどうかを判断する必要があります。しかし、どこから始めますか?ありがたいことに、NoSQLデータベースは、さまざまなユースケースに適した特定のカテゴリにグループ化できます。

ドキュメント指向

例:MongoDB、CouchDB

長所:異種データ、実用的なオブジェクト指向、アジャイル開発

それらの利点は、一貫したデータ構造を必要としないことです。これらは、要件、したがってデータベースレイアウトが絶えず変化する場合、または同じに属しているが非常に異なって見えるデータセットを処理している場合に役立ちます。「キー」と「値」と呼ばれる2つの列を持つ多くのテーブルがある場合、これらは調べる価値があります。

グラフデータベース

例:Neo4j、GiraffeDB。

長所:データマイニング

ほとんどのNoSQLデータベースはデータ関係の管理の概念を放棄しますが、これらのデータベースは、いわゆるリレーショナルデータベースよりもさらにそれを採用しています。

彼らの焦点は、他のデータとの関係によってデータを定義することです。他の2つのテーブルの主キーである主キー(およびおそらくそれらの間の関係を説明するいくつかのデータ)を持つ多くのテーブルがある場合、これらはあなたにとって何かかもしれません。

Key-Valueストア

例:Redis、Cassandra、MemcacheDB

長所:既知のキーによる値の高速検索

これらは非常に単純化されていますが、そのため、高速で使いやすくなっています。ストアドプロシージャ、制約、トリガー、およびこれらのすべての高度なデータベース機能が必要なく、データの高速な保存と取得だけが必要な場合は、これらが最適です。

残念ながら、彼らはあなたが探しているものを正確に知っていると想定しています。User157641のプロファイルが必要ですか?問題ありません。マイクロ秒しかかかりません。しかし、16歳から24歳までのすべてのユーザーの名前が必要で、お気に入りの食べ物として「ワッフル」があり、過去24時間にログインした場合はどうでしょうか。頑張ってください。特定の結果に対する明確で一意のキーがない場合、KVストアから簡単に取得することはできません。

SQLは廃止されましたか?

一部のNoSQL支持者は、お気に入りのNoSQLデータベースは新しい方法であり、SQLは過去のものであると主張しています。

彼らは正しいですか?

いいえ、もちろんそうではありません。SQLには適さない問題がありますが、SQLにはまだ長所があります。多くのデータモデルは、互いに参照するテーブルのコレクションとして最もよく表されます。特に、ほとんどのデータベースプログラマーは何十年もの間、リレーショナルな方法でデータについて考えるように訓練されており、この考え方を、それのために作られていない新しいテクノロジーに押し付けようとすることはめったに終わりません。

NoSQLデータベースはSQLの代わりにはなりません-それらは代替です。

さまざまなNoSQLデータベースを取り巻くほとんどのソフトウェアエコシステムは、まだ成熟していません。進歩はありますが、一般的なSQLデータベースで利用できるほど成熟して強力な補足ツールはまだありません。

また、SQLにはさらに多くのノウハウがあります。何世代にもわたるコンピュータサイエンティストは、リレーショナルデータベースに焦点を当てた研究に数十年のキャリアを費やしてきました。それは次のことを示しています。データ用のリレーショナルデータベースを構築する方法は非常によく研究されているトピックであり、一般的に認められている本のベストプラクティスがない一般的なケースを見つけるのは困難です。

一方、ほとんどのNoSQLデータベースはまだ初期段階にあります。私たちはまだそれらを使用する最良の方法を考え出しています。


NoSQLは非リレーショナルデータベースを意味するのですか?GraphデータベースもNoSQLであり、リレーショナルであるためです。正しい?
tomasb 2013

1
@tomasb「リレーショナルデータベース」の定義方法によって異なります。グラフデータベースでは、関係は通常リレーショナルと呼ばれるデータベースよりも重要です。
フィリップ

「問題ありません。マイクロ秒しかかかりません。」-たとえば、psqlで同じ非トランザクションの読み取りパフォーマンスを取得できませんか?
Nakilon

2
Adam Ruinsが "Philipp Ruins noSQL"を除いてすべてを台無しにするように、ほぼ正確に表現されたいい答えです;-)
JGlass

2
これが最良の答えです。

28

誰かが私の以前の投稿はトピックから外れていると言ったので、私は補償しようとします:-) NoSQLは、より主流のSQLデータベースの代わりになることを意図したものではありませんでしたが、正しい視点で物事。

NoSQLの哲学の中心にあるのは、おそらく商用および移植性の理由から、SQLエンジンはUNIXオペレーティングシステムとその派生物の途方もない能力を無視する傾向があるという考慮事項です。

ファイルシステムベースのデータベースを使用すると、現在ムーアの法則に従って長年着実に増加し続けている、基盤となるオペレーティングシステムの絶えず増加する機能と能力をすぐに活用できます。このアプローチでは、多くのオペレーティングシステムコマンドが自動的に「データベースオペレーター」にもなります(「ls」、「sort」、「find」、その他の無数のUNIXシェルユーティリティを考えてください)。

これを念頭に置き、少し創造性を発揮すれば、少なくとも特定の使用パターンに関して、多くの一般的なSQLエンジンの制限を克服できるファイルシステムベースのデータベースを実際に作成できます。これは、NoSQLの哲学である、私がそれを見る方法。

私は何百ものウェブサイトを運営しており、それらはすべて多かれ少なかれNoSQLを使用しています。実際、それらは大量のデータをホストしていませんが、それらの一部をホストしていても、ボトルネックを克服するためのNoSQLとファイルシステムの独創的な使用法を考えることができます。従来のSQLの「刑務所」ではもっと難しいと思われる何か。「unix」、「manis」、「shaffer」を検索して、私の意味を理解してください。


9

私が正しく思い出せば、リレーショナル形式に必ずしも従わないタイプのデータベースを指します。ドキュメントデータベースが思い浮かびます。特定の構造を持たず、SQLを特定のクエリ言語として使用しないデータベースです。

一般に、データベースのパフォーマンスに依存し、リレーションデータベースエンジンのより高度な機能を必要としないWebアプリケーションに適しています。たとえば、IDインターフェースによる単純なクエリを提供するKey-> Valueストアは、対応するSQLサーバーの実装よりも10〜100倍高速で、開発者のメンテナンスコストが低い場合があります。

1つの例は、OLTPタプルストアのこのペーパーです。これは、シングルスレッド処理のトランザクションを犠牲にし(同時実行が許可されていないため、同時実行の問題はありません)、すべてのデータをメモリに保持しました。同様のRDBMS駆動システムと比較して、10〜100倍優れたパフォーマンスを実現します。基本的に、SQLとデータベースシステムの「1つのサイズですべてに対応」ビューから遠ざかっています。


1
NoSQL(「this」というラベル)の意味を参照する最初のリンクは無効になっているようです。修正してください。
jobin 2013

7

実際には、NoSQLは、キーベースのアクセス戦略を使用して、大きなバイナリオブジェクト(ドキュメント、jpgなど)への高速アクセスをサポートするデータベースシステムです。これは、英数字の値に対してのみ十分な従来のSQLアクセスからの逸脱です。内部ストレージとアクセス戦略だけでなく、表示形式の構文と制限も従来のSQLを制限します。従来のリレーショナルデータベースのBLOB実装も、これらの制限の影響を受けます。

舞台裏では、SQLモデルが何らかの形式のOLTPをサポートしたり、新しいデータ形式をサポートしたりできなかったことを間接的に認めています。「サポート」とは、格納だけでなく、フルアクセス機能を意味します-標準モデルを使用したプログラムおよびクエリ単位。

リレーショナル愛好家は、SQLを現状のままに保つために、NoSQLの定義をNot-SQLからNot-Only-SQLにすばやく変更しました!これは特に、今日のほとんどのJavaプログラムが、基礎となるリレーショナルモデルのORMマッピングに頼っている場合によくありません。新しいコンセプトには明確な定義が必要です。そうでなければ、SOAのようになります。

NoSQLシステムの基礎は、ランダムなキーと値のペアにあります。しかし、これは新しいことではありません。IMSやIDMSなどの従来のデータベースシステムは、ハッシュされたランダムキーを(インデックスを使用せずに)サポートしていましたが、今でもサポートしています。実際、IDMSにはすでにキーワードNONSQLがあり、NONSQLと呼ばれていた古いネットワークデータベースへのSQLアクセスをサポートしています。


5

それはジャグジーのようなものです:ブランドと一般名の両方。これは特定のテクノロジーではなく、特定のタイプのテクノロジーであり、この場合はGoogleのBigTableやCouchDBなどの大規模な(多くの場合は疎)「データベース」を指します。


5

NoSQL実際のプログラムは、バックエンドのフラットファイルを使用してawkに実装されたリレーショナルデータベースのようです。「NoSQLには基本的に任意の制限はなく、他の製品ができない場所でも機能します。たとえば、データフィールドのサイズ、列の数、またはファイルサイズに制限はありません」と彼らは公言しているが、私はそうは思わない未来の大規模データベース。

Joelが言うように、BigTableHBaseなどの大規模にスケーラブルなデータベースは、はるかに興味深いものです。GQLは、BigTableとApp Engineに関連付けられているクエリ言語です。Googleがボトルネック(結合など)と見なしている機能を回避するために、主にSQLが調整されています。しかし、これが「NoSQL」と呼ばれるのを聞いたことがありません。


5

NoSQLは、データのフェッチに文字列ベースのSQLクエリを使用しないデータベースシステムです。

代わりに、クエリが提供するAPIを使用してクエリを作成します。たとえば、Amazon DynamoDBはNoSQLデータベースの良い例です。

NoSQLデータベースは、スケーラビリティが重要な大規模アプリケーションに適しています。


1

NoSQLは非リレーショナルデータベースを意味しますか?

はい、NoSQLはRDBMSやOLAPとは異なります。従来のリレーショナルデータベースよりも緩い整合性モデルを使用します。

整合性モデルは、分散共有メモリシステムや分散データストアなどの分散システムで使用されます。

内部ではどのように機能しますか?

NoSQLデータベースシステムは、多くの場合、取得と追加の操作に対して高度に最適化されており、多くの場合、レコードストレージ以外の機能はほとんど提供していません(キーと値のストアなど)。完全なSQLシステムと比較して実行時の柔軟性が低下していることは、特定のデータモデルのスケーラビリティとパフォーマンスの著しい向上によって補われています。

構造化データと非構造化データを処理できます。テーブルの代わりにコレクションを使用します

そのような「データベース」をどのようにクエリしますか?

ウォッチのNoSQL対SQL:バックエンドの戦い。それはすべてを説明します。

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