86

人々がSQLとnoSQLを比較し、それぞれの長所と短所を結論付けているとき、誰も話を聞いたことがないのは速度です。

一般的に、SQLクエリの実行はnoSQLクエリの実行よりも高速ではありませんか?

つまり、データベースの構造を知っている場合は、知らない場合よりも常に何かをすばやく見つけることができるはずなので、これは本当に明白な結論になります。

しかし、人々はこれについて決して言及していないようですので、私の結論が正しいか間違っているかを知りたいです。

4

5 に答える 5

91

noSQL を使用する傾向がある人は、ユース ケースに適合するため、特に使用します。通常の RDBMS テーブルの関係と制約、およびデータの ACID 性から切り離されているため、非常に簡単に実行を高速化できます。

Twitter について考えてみましょう。NoSQL を使用するのは、ユーザーがサイト上で非常に限られたこと、または正確に 1 つのことしかできないためです。また、(1) 他の誰もあなたのツイートを変更できず、(2) 通常、複数のデバイスから同時にツイートすることはないため、同時実行性は存在しないと見なすことができます。

于 2012-11-15T13:07:58.923 に答える
61

noSQLシステムの定義は非常に広範です。SQLを使用しないデータベースはRDBMSではありません。したがって、あなたの質問に対する答えは、要するに「それは依存する」ということです。

一部のnoSQLシステムは、基本的には永続的なキー/値ストレージです(Project Voldemortなど)。クエリのタイプが「特定のキーの値を検索する」の場合、そのようなシステムは、はるかに小さな機能セットしか必要としないため、RDBMSよりも高速になります(または少なくとも高速である必要があります)。

もう1つの一般的なタイプのnoSQLシステムは、ドキュメントデータベース(CouchDBなど)です。これらのデータベースには、事前定義されたデータ構造はありません。それらの速度の利点は、非正規化と、実行するクエリに合わせて調整されたデータレイアウトの作成に大きく依存しています。たとえば、ブログの場合、ブログの投稿をコメントと一緒にドキュメントに保存できます。これにより、結合とルックアップの必要性が減り、クエリが高速になりますが、クエリに関する柔軟性が低下する可能性もあります。

于 2012-11-15T13:13:01.827 に答える
11

アインシュタインが言ったように、速度は相対的です。

マスター/詳細の単純なアプリケーション (ショッピング カートなど) を保存する必要がある場合は、SQL アプリケーションでいくつかの Insert ステートメントを実行する必要があります。また、購入を取得するためにクエリを実行すると、情報のデータ セットが取得されます。 NoSQL を使用していて、それをうまく使用している場合は、1 つの注文のすべてのデータが 1 つの単純な「レコード」に含まれます (djondb などの NoSQL データベースの用語を使用する場合はドキュメント)。

したがって、注文を保存するために複数の挿入を行う必要があり、データベースに単純な挿入が1つだけ必要な場合、アプリケーションのパフォーマンスは、単一の要件を達成するために必要な作業の数によって測定できると本当に思いますdjondb のように、NoSQL の世界ではパフォーマンスが 10 倍高速になります。これは、データベース レイヤーへの呼び出しが 10 分の 1 になっているからです。それだけです。

私の要点を説明するために、NoSQL と SQL データ モデルのアプローチの違いについて以前に書いた例をリンクさせてください。 masterdetail-sample/、私はそれが自己参照であることを知っていますが、基本的に私はこの質問に対処するためにそれを書きました。これはRDBMS担当者が持つ可能性のある最も難しい質問であり、NoSQLがSQLの世界と非常に異なる理由を説明するための常に良い方法です. 、そしていつでもより良いパフォーマンスを達成できる理由は、「nasa」テクノロジーを使用しているからではなく、NoSQL によって開発者が行うことを減らし、より多くのコードを取得できるためです。コードが少ない = パフォーマンスが向上します。

于 2012-11-15T15:13:15.983 に答える
3

答えは、場合によります。一般的に言えば、NoSQL DATABASES (「クエリ」なし) の目的はスケーラビリティです。RDBMS には通常、従来の手段 (レプリケーション、クラスタリング、パーティショニング) ではこれ以上スケーリングできない時点 (数百万行について話している) にいくつかのハード制限があり、ニーズが増え続けるため、さらに何かが必要になります。または、スケーリングできたとしても、全体的なセットアップは非常に複雑です。または、読み取りはスケーリングできますが、書き込みはスケーリングできません。

また、クエリは、サーバーの特定の実装、実行しているクエリの種類、テーブル内の列などによって異なります。クエリは RDBMS の一部にすぎないことを思い出してください。

于 2012-11-15T13:08:35.220 に答える
-15

1000 人のデータに対する SQL のようなリレーショナル データベースのクエリ時間は 2000 ミリ秒で、neo4j のようなグラフ データベースは 2 ミリ秒です。

于 2014-08-04T11:37:13.637 に答える