最近私は尋ねられました:
NoSQLがSQLより速いのはなぜですか?
私は質問の前提に同意しませんでした...それは私にとってはナンセンスです。 SQLの代わりにNoSQLを使用してもパフォーマンスが向上しません。たぶんSQLからNoSQLへ、そうではありませんが、そうではありません。
NoSQLについて何か不足していますか?
周りには多くのNoSQLソリューションがあり、それぞれに独自の長所と短所があるため、以下のことを細かく検討する必要があります。
しかし、本質的に、多くのNoSQLデータベースが行うことは非正規化に依存し、非正規化の場合に最適化しようとします。たとえば、ドキュメント指向のデータベースでブログの投稿とそのコメントを読んでいるとします。多くの場合、コメントは投稿自体と一緒に保存されます。つまり、それらは同じ場所に格納され、結合を実行する必要がないため、それらをすべて一緒に取得する方が高速になります。
もちろん、SQLでも同じことができます。パフォーマンスが必要な場合は、非正規化が一般的です。多くのNoSQLソリューションが最初から常にこの方法で使用されるように設計されているだけです。次に、通常のトレードオフが発生します。たとえば、上記の例でコメントを追加すると、ドキュメント全体を保存する必要があるため、遅くなります。また、非正規化した後は、アプリケーションのデータの整合性を維持する必要があります。
さらに、多くのNoSQLソリューションでは、任意の結合、つまり任意のクエリを実行することは不可能です。 CouchDBなどの一部のデータベースでは、必要なクエリを事前に検討し、DB内で準備する必要があります。
全体として、非正規化されたスキーマを想定し、その状況に合わせて読み取りを最適化することになります。これは、リレーショナル性が高くなく、書き込みよりもはるかに多くの読み取りを必要とするデータに適しています。
NoSQLについて欠けているのは、NoSQlをSQLと比較することはできないということです。 NoSQLは、SQL以外のすべての永続化テクノロジの名前です。ドキュメントDB、Key-Value DB、イベントDBはすべてNoSQLです。保存データの構造、クエリ、パフォーマンス、使用可能なツールなど、ほぼすべての点で異なります。
したがって、誰かがインタビューでそのような質問をした場合、これが答えになるはずです。
'NoSQL'(より正確には非リレーショナル)データベースは、速度のために従来のデータベースのいくつかの機能を放棄しますが、より重要なのは水平方向のスケーラビリティです。
不足している機能は具象製品に依存します。一般に、完全なACIDプロパティ、または結合操作さえサポートされていません。それがパフォーマンスの向上の代償です。
そうです、それを包括的ステートメントで述べるのはナンセンスです。これがおそらくポイントです。インタビュアーは、単一の回答ではなく、おそらく問題のコンテキスト(データの種類、データの量、オペレーティング環境など)、特定のNoSQLソリューションを理解するのに役立つ質問で回答することを期待しています。彼らはあなたが問題を分析する方法を見つけようとし、その過程でそこにあるさまざまな解決策についてあなたがどれだけ知っているかというアイデアを得るでしょう。
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のファンボア主義はたくさんあると言います。
SQLには(もちろん)制限がありますが、SQLも非常に成熟したテクノロジーであり、十分に理解されており、SQLの使い方をよく理解している開発者の大規模なプールを持っています。 NoSQLのすべての形式について同じことを言うことはできません。