NoSQLがSQLより速いのはなぜですか?


48

最近、私は尋ねられました:

NoSQLがSQLより速いのはなぜですか?

私は質問の前提に同意しませんでした...個人的にはそれはナンセンスです。SQLの代わりにNoSQLを使用しても、パフォーマンスが向上することはありません。たぶん、そうではありませんが、NoSQL上のSQLです。

NoSQLについて何か不足していますか?


3
パフォーマンスの向上が見られない場合は、それがあなたの言うことです。事実、ほとんどのNoSQLソリューションは、リレーショナルデータベースのACIDプロパティの1つ(またはそれ以上)を放棄しているため、それほど多くはありません。
Oded

1
従来のACID対応のリレーショナルデータベースに簡単にマッピングできないワークフロー(およびデータ構造)がいくつかあります。人のために、あなたが見ることができる巨大なのNoSQLデータベースを使用してパフォーマンスの向上を。ただし、既存の(適切に設計された)SQL DBを単純に取得してNoSQLデータベースに配置すると、パフォーマンスが確実に低下します。
ヨアヒムザウアー

1
答えは次のとおりです。そして、何でより速く?開発時間?時間を読んで?時間を書く?どのタイプの書き込みですか?何と比較しますか?マルチテーブルクエリ?参加しますか?
ロルフ

回答:


65

周囲には多くのNoSQLソリューションがあり、それぞれに長所と短所があります。そのため、次のことを一目で理解する必要があります。

しかし、基本的に、多くのNoSQLデータベースが行うことは、非正規化に依存し、非正規化されたケースに合わせて最適化を試みることです。たとえば、ドキュメント指向のデータベースでコメントとともにブログ投稿を読んでいるとしましょう。多くの場合、コメントは投稿自体と一緒に保存されます。つまり、それらは同じ場所に格納され、結合を実行する必要がないため、すべてをまとめて取得する方が高速です。

もちろん、SQLでも同じことができます。パフォーマンスが必要な場合、非正規化は一般的な方法です。多くのNoSQLソリューションは、最初から常にこのように使用されるように設計されています。次に、通常のトレードオフを取得します。たとえば、上記の例でコメントを追加すると、ドキュメント全体を保存する必要があるため、遅くなります。そして、非正規化したら、アプリケーションのデータの整合性を維持する必要があります。

さらに、多くのNoSQLソリューションでは、任意の結合、したがって任意のクエリを実行することは不可能です。CouchDBなどの一部のデータベースでは、必要なクエリを事前に検討し、DB内で準備する必要があります。

全体的に、非正規化されたスキーマを期待し、その状況に対応する読み取りを最適化することに要約されます。


4
ちなみに、これは単純なマテリアライズドビューまたはキャッシュレイヤーで実現できますが、それでもすべてのSQLの利点を活用できます。適切にモデル化されたものはすべてリレーショナルであり、論理データの複製は解決策ではありません(マットビューは複製ですが、単に他の何かのイメージであるため論理複製ではありません)。
モルグ。

答えで言ったように、SQLでも同じことができます。これが例外ではなくルールになると、NoSQLデータベースは通常より速く、より自然に使用できるようになります。理論的には、SQLは使用可能な最高のモデルですが、データが特定のサイズを超えると、一部のモデルに対応できなくなり、データの複製がより速く、推論しやすくなります。
アンドレア

3
それは雄牛です。リレーショナルモデルは、NoSQLで作成できるものすべてをカバーしています。NoSQLの唯一の利点は、スケーリングに対するシンプルで一貫性のないアプローチが組み込まれており、使いやすいことです。SQLとは関係がなく、ACIDプロパティを気にしないと関係があります。NoSQLストアとまったく同じ(非常に悪い)スケーリングおよび一貫性プロパティを持つ独立したSQLノード間で同期ジョブを実行できます。違いは、選択した場合、SQLノードにも一貫性があることです。
モルグ。

1
500万行のデータがあり、何らかの条件でそれらすべてからコメントを取得したい場合はどうでしょう。SQLを使用してテーブルのコメントフィールドにインデックスを付けた方が高速になりませんか?フルテキストインデックスを作成すると、さらに改善されます。
jwize

@morg-「リレーショナルモデルは、NoSQLで作成できるものすべてをカバーしています。」そうでもない リレーショナルモデルに非常によく適合しないデータの種類の例は多数あり、データを強制的に使用すると、非常に非効率になります。例:オンラインゲームには、プレーヤーの在庫を保存する機能があります。プレイヤーには番号付きのスロットの有限セットがあり、各スロットには特定のタイプの1つ以上のアイテムを保存できます。一部オーバーラップして、4-6関連する属性をそれぞれ有するアイテムの50の異なる種類についてあるので、約80の可能な属性...がある
ジュール

27

NoSQLで欠けているのは、NoSQlをSQLと比較することはできないということです。NoSQLは、SQLではないすべての永続化テクノロジの名前です。ドキュメントDB、キーバリューDB、イベントDBはすべてNoSQLです。保存されたデータの構造、クエリ、パフォーマンス、利用可能なツールなど、ほぼすべての面でそれらはすべて異なります。

だから誰かがインタビューであなたにそのような質問をした場合、これが答えになるはずです。


4
NoSQLの優れた機能が1つあるとすれば、それはスケーラビリティです。FacebookとGoogleがそれを使用する理由です。膨大な量のデータがあるため。NoSQL:大量のデータを処理する必要がある場合。
ピーターB

16

「NoSQL」(正確には非リレーショナル)データベースは、速度を向上させるために従来のデータベースの一部の機能を放棄していますが、より重要なのは水平スケーラビリティです。

欠落している機能は、具体的な製品に依存します。一般に、完全なACIDプロパティまたは結合操作さえサポートされていません。それがパフォーマンスの向上の代価です。


1
NoSQLを非リレーショナルとして記述することは、より正確ではありません。カテゴリNoSQLに分類されない他の古い非リレーショナルDBがあります。NoSQLは、単なる非リレーショナル以上のものを意味します。詳細についてはこちらをご覧
eddyP23

8

あなたは正しい、それを毛布の声明で述べるのはナンセンスだろう。これがおそらく全体のポイントです。インタビュアーは、単一の回答ではなく、質問の回答を期待して、問題のコンテキスト(データの種類、量、オペレーティング環境など)、特定のNoSQLソリューションを把握するのに役立ちます。 。彼らはあなたがどのように問題を分析し、その過程であなたがそこにある様々な解決策についてどれだけ知っているかを見つけようとします。


はい、それは包括的な声明であり、それが真実であると受け入れるならば、質問に対する答えは次のとおりです。
ロルフ

5

通常、NoSQLデータベースは、その周りにデータを設計する場合にのみ意味を持ちます。

それらを単にRDBMSの代替として使用する場合、特に大量のRAMを搭載したサーバーに十分な予算がない場合、パフォーマンスが向上するよりもパフォーマンスが低下する可能性があります。

MySQLのディスク領域の使用量をMongoDBの使用量と比較するこの記事をご覧ください:http : //blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage


3

どのNoSQLデータベースですか?どのSQLデータベースですか?NoSQLの方がSQLよりも高速だと誰かから言われたら、立ち去るべきです。または、このビデオをご覧ください:

http://www.youtube.com/watch?v=b2F-DItXtZs

NoSQLについて主張していることの半分が間違っているとは言いませんが、NoSQLをあまりよく理解していない人々から多くのNoSQLファンボイズムがあると言います。

SQLには(もちろん)制限がありますが、非常に成熟した技術であり、よく理解されており、SQLの使い方をよく理解している開発者の大規模なプールがあります。すべての形式のNoSQLについて同じことを言うことはできません。


-2

NoSQLは、RDBMSが行指向データベースである列指向データベースでサポートされています...そして、たとえば、Name、Age、Salery、Address、EmployeeIdなどのEmployeeテーブルがあるとしましょう... MySql(RDBMSサポート)とHBaseに同じテーブルを置きます(NoSQLサポート)。顧客/クライアントがクエリを作成して、1Lakhの従業員レコードから平均年齢またはサリーの詳細を取得した場合...どうなりますか?

RDBMSでは、各行を巡回し、値を収集し、結果の合計と除算を行います。Columnarデータベースに関しては、1行の行の繰り返しすべてを心配する必要はありません。ただし、計算が高速な1行のみを処理します。そのため、この方法でNoSQLがSQLよりも高速になることがあります。この場合、NoSQLはACIDの苦情を気にしません。


2
書式設定を少し修正しましたが、2つの間で何を取得しようとしているのかわかりません。また、ACIDはRDBMSでも常にサポートされているわけではありません。

-3

データベースに関する理論を忘れてください...クエリを理解したら、アプリケーションで実際に使用されている方法でnosqlデータベースにデータを保存できます。

たとえば、この例では、多数の注文と各注文に関連付けられた多くのアイテムを持つ顧客モデルがあり、その後の購入のために多くの保存されたアイテムもあります... 1000万人の顧客と50万件。そして、その顧客はダッシュボードにログインして、この正確なデータ、顧客を見つけ、注文に参加し、各品目と保存された品目に必要なSQLデータベースの作業量を表示します。SQLデータベースでは、このデータはすべて何らかの方法で結合する必要があります...または、ユーザーキャッシュと呼ばれるurデータベースにコレクションを作成し、このデータを実際の使用方法で保存することができます。そのため、これは、すべてのデータを取得するための単一フィールド[id]に対する単一クエリになります。その上、nosqlデータベースは

だから、SQLデータベースは、nosqlよりも速くない場合、単一のIdフィールドを同じくらい速くクエリできますか?はい。ただし、1つのテーブルと1つのフィールドを照会することで、SQLデータベースが必要なすべてのデータを返すことができますか?いいえ、Jsonで大きなテキストフィールド内にデータを保存するようなことをしない限り。しかし、そのデータは将来の使用に備えてクエリ可能ではありません。

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