web-dev-qa-db-ja.com

NoSQLとは何ですか、どのように機能し、どのような利点がありますか?

私はNoSQLについて聞いていましたが、DBの相互作用はWebでの速度のボトルネックになることが多いため、最終的にはSQL SQLのストレージメソッドの代わりになる可能性があると考えています。

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

  1. 正確には何ですか?

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

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

  4. 技術はまだ実装を開始するには新しすぎますか、または検討する価値がありますか?

165
Matt
  1. 正確には何ですか?

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

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

    汎用名のラベルが付いたシステムはそれぞれ動作が異なりますが、基本的な考え方は、汎用RDBMSのすべての機能をサポートしていないDBモデルを使用することにより、スケーラビリティとパフォーマンスを向上させることですが、それでも有用な機能です。ある意味では、トランザクションのサポートが欠けていたMySQLに似ていますが、正確にであるため、他のDBシステムよりも優れたパフォーマンスを発揮しました。トランザクションを必要としない方法でアプリを作成できれば、素晴らしかったです。

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

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

  4. 技術はまだ実装を開始するには新しすぎるのですか、それとも検討する価値がありますか?

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

108

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

NoSQLは流行語です。

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

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

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

それでは、NoSQLデータベースには何が共通していますか?

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

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

  • NoSQLはスケーラブルです!
  • NoSQLはBigData用です!
  • NoSQLはACIDに違反しています!
  • NoSQLは栄光に満ちたキー/値ストアです!

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

それでは、NoSQLデータベースの特徴は何ですか?

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

ドキュメント指向

例:MongoDB、CouchDB

長所:異種データ、作業オブジェクト指向、アジャイル開発

それらの利点は、一貫したデータ構造を必要としないことです。要件やデータベースレイアウトが絶えず変化する場合、または同じグループに属していても外観が非常に異なるデータセットを扱う場合に便利です。 「キー」と「値」と呼ばれる2つの列を持つ多くのテーブルがある場合、これらを調べる価値があるかもしれません。

グラフデータベース

例:Neo4j、GiraffeDB。

長所:データマイニング

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

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

Key-Valueストア

例:Redis、Cassandra、MemcacheDB

強み:既知のキーによる値の高速検索

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

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

SQLは廃止されましたか?

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

彼らは正しいですか?

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

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

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

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

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

130
Philipp

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

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

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

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

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

27
Carlo Strozzi

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

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

たとえば、 paper for [〜#〜] oltp [〜#〜] タプルストア。シングルスレッド処理のためにトランザクションを犠牲にしました(同時実行が許可されていないため、同時実行の問題はありません) )、およびすべてのデータをメモリに保持しました。同様の [〜#〜] rdbms [〜#〜] 駆動システムと比較して、10〜100倍のパフォーマンスを達成します。基本的に、SQLおよびデータベースシステムの「すべてに適合するサイズ」ビューから離れています。

8
CoderTao

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

舞台裏では、SQLモデルがOLTPの形式または新しいデータ形式のサポートをサポートしていないという失敗を間接的に認めています。標準モデルを使用したクエリ単位。

リレーショナル愛好家は、NoSQLの定義をNot-SQLからNot-Only-SQLにすばやく変更して、SQLを常に把握できるようにしました!これは、ほとんどのJavaプログラムが今日、基礎となるリレーショナルモデルのORMマッピングに頼っていることがわかった場合、良くありません。新しい概念には明確な定義が必要です。

NoSQLシステムの基本は、ランダムなキーと値のペアにあります。しかし、これは新しいことではありません。 IMSおよびIDMSは(インデックスを使用せずに)ハッシュramdomキーをサポートしていましたが、それでもサポートしています。実際、IDMSには古いバージョンへのSQLアクセスをサポートするNONSQLというキーワードがあります。 NONSQLと呼ばれるネットワークデータベース。

5
Gopi Nathan

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

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

4

それはジャグジーのようなものです:ブランドと一般的な名前の両方。それは特定の技術だけでなく、特定の技術のtypeであり、この場合、GoogleのBigTableやCouchDBのような大規模な(しばしばスパースな) "データベース"を指します。

4
Joel Coehoorn

NoSQLは、データを取得するために文字列ベースのSQLクエリを使用しないデータベースシステムです。

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

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

3
David Xu

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

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

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

内部的にはどうですか?

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

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

このような「データベース」をどのように照会しますか?

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

0
Arun C