最近、私は尋ねられました:
NoSQLがSQLより速いのはなぜですか?
私は質問の前提に同意しませんでした...個人的にはそれはナンセンスです。SQLの代わりにNoSQLを使用しても、パフォーマンスが向上することはありません。たぶん、そうではありませんが、NoSQL上のSQLです。
NoSQLについて何か不足していますか?
最近、私は尋ねられました:
NoSQLがSQLより速いのはなぜですか?
私は質問の前提に同意しませんでした...個人的にはそれはナンセンスです。SQLの代わりにNoSQLを使用しても、パフォーマンスが向上することはありません。たぶん、そうではありませんが、NoSQL上のSQLです。
NoSQLについて何か不足していますか?
回答:
周囲には多くのNoSQLソリューションがあり、それぞれに長所と短所があります。そのため、次のことを一目で理解する必要があります。
しかし、基本的に、多くのNoSQLデータベースが行うことは、非正規化に依存し、非正規化されたケースに合わせて最適化を試みることです。たとえば、ドキュメント指向のデータベースでコメントとともにブログ投稿を読んでいるとしましょう。多くの場合、コメントは投稿自体と一緒に保存されます。つまり、それらは同じ場所に格納され、結合を実行する必要がないため、すべてをまとめて取得する方が高速です。
もちろん、SQLでも同じことができます。パフォーマンスが必要な場合、非正規化は一般的な方法です。多くのNoSQLソリューションは、最初から常にこのように使用されるように設計されています。次に、通常のトレードオフを取得します。たとえば、上記の例でコメントを追加すると、ドキュメント全体を保存する必要があるため、遅くなります。そして、非正規化したら、アプリケーションのデータの整合性を維持する必要があります。
さらに、多くのNoSQLソリューションでは、任意の結合、したがって任意のクエリを実行することは不可能です。CouchDBなどの一部のデータベースでは、必要なクエリを事前に検討し、DB内で準備する必要があります。
全体的に、非正規化されたスキーマを期待し、その状況に対応する読み取りを最適化することに要約されます。
NoSQLで欠けているのは、NoSQlをSQLと比較することはできないということです。NoSQLは、SQLではないすべての永続化テクノロジの名前です。ドキュメントDB、キーバリューDB、イベントDBはすべてNoSQLです。保存されたデータの構造、クエリ、パフォーマンス、利用可能なツールなど、ほぼすべての面でそれらはすべて異なります。
だから誰かがインタビューであなたにそのような質問をした場合、これが答えになるはずです。
「NoSQL」(正確には非リレーショナル)データベースは、速度を向上させるために従来のデータベースの一部の機能を放棄していますが、より重要なのは水平スケーラビリティです。
欠落している機能は、具体的な製品に依存します。一般に、完全なACIDプロパティまたは結合操作さえサポートされていません。それがパフォーマンスの向上の代価です。
通常、NoSQLデータベースは、その周りにデータを設計する場合にのみ意味を持ちます。
それらを単にRDBMSの代替として使用する場合、特に大量のRAMを搭載したサーバーに十分な予算がない場合、パフォーマンスが向上するよりもパフォーマンスが低下する可能性があります。
MySQLのディスク領域の使用量をMongoDBの使用量と比較するこの記事をご覧ください:http : //blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage
どのNoSQLデータベースですか?どのSQLデータベースですか?NoSQLの方がSQLよりも高速だと誰かから言われたら、立ち去るべきです。または、このビデオをご覧ください:
http://www.youtube.com/watch?v=b2F-DItXtZs
NoSQLについて主張していることの半分が間違っているとは言いませんが、NoSQLをあまりよく理解していない人々から多くのNoSQLファンボイズムがあると言います。
SQLには(もちろん)制限がありますが、非常に成熟した技術であり、よく理解されており、SQLの使い方をよく理解している開発者の大規模なプールがあります。すべての形式のNoSQLについて同じことを言うことはできません。
NoSQLは、RDBMSが行指向データベースである列指向データベースでサポートされています...そして、たとえば、Name、Age、Salery、Address、EmployeeIdなどのEmployeeテーブルがあるとしましょう... MySql(RDBMSサポート)とHBaseに同じテーブルを置きます(NoSQLサポート)。顧客/クライアントがクエリを作成して、1Lakhの従業員レコードから平均年齢またはサリーの詳細を取得した場合...どうなりますか?
RDBMSでは、各行を巡回し、値を収集し、結果の合計と除算を行います。Columnarデータベースに関しては、1行の行の繰り返しすべてを心配する必要はありません。ただし、計算が高速な1行のみを処理します。そのため、この方法でNoSQLがSQLよりも高速になることがあります。この場合、NoSQLはACIDの苦情を気にしません。
データベースに関する理論を忘れてください...クエリを理解したら、アプリケーションで実際に使用されている方法でnosqlデータベースにデータを保存できます。
たとえば、この例では、多数の注文と各注文に関連付けられた多くのアイテムを持つ顧客モデルがあり、その後の購入のために多くの保存されたアイテムもあります... 1000万人の顧客と50万件。そして、その顧客はダッシュボードにログインして、この正確なデータ、顧客を見つけ、注文に参加し、各品目と保存された品目に必要なSQLデータベースの作業量を表示します。SQLデータベースでは、このデータはすべて何らかの方法で結合する必要があります...または、ユーザーキャッシュと呼ばれるurデータベースにコレクションを作成し、このデータを実際の使用方法で保存することができます。そのため、これは、すべてのデータを取得するための単一フィールド[id]に対する単一クエリになります。その上、nosqlデータベースは
だから、SQLデータベースは、nosqlよりも速くない場合、単一のIdフィールドを同じくらい速くクエリできますか?はい。ただし、1つのテーブルと1つのフィールドを照会することで、SQLデータベースが必要なすべてのデータを返すことができますか?いいえ、Jsonで大きなテキストフィールド内にデータを保存するようなことをしない限り。しかし、そのデータは将来の使用に備えてクエリ可能ではありません。