29

NoSQL について読めば読むほど、NoSQL は列指向のデータベースのように思えてきます。

NoSQL (例: CouchDB、Cassandra、MongoDB) と列指向データベース (例: Vertica、MonetDB) の違いは何ですか?

4

7 に答える 7

22

NoSQLはNot Only SQLに使用される用語であり、Key-Value、Document、Column Family、および Graph データベースの4 つの主要なカテゴリをカバーします。

Key-Value データベースは、単純なデータ モデルとともに頻繁に小さな読み取りと書き込みを行うアプリケーションに適しています。これらのレコードは、レコードを一意に識別するキーを使用して保存および取得され、データベース内のデータをすばやく見つけるために使用されます。

例: Redis、Riak など。

ドキュメント データベース には、大量のデータとともにさまざまな属性を格納する機能があります。

例: MongoDB 、CouchDB など。

列ファミリーデータベースは、大量のデータ、読み取りと書き込みのパフォーマンス、および高可用性のために設計されています。

例: Cassandra、HBase など。

グラフデータベースは、ノード、エッジ、およびプロパティを含むセマンティック クエリにグラフ構造を使用してデータを表現および格納するデータベースです。

例:Neo4j、InfiniteGraph など。

NoSQL を理解する前に、いくつかの重要な概念を理解する必要があります。

一貫性– システム内のすべてのサーバーが同じデータを保持するため、システムを使用するすべてのユーザーは、要求に応答するサーバーに関係なく、同じコピーを取得します。

可用性– システムは常に要求に応答します (最新のデータでなくても、システム全体で一貫していなくても、システムが機能していないというメッセージだけであっても)。

Partition Tolerance – 個々のサーバーに障害が発生したり、アクセスできなくなったりしても、システムは全体として動作し続けます。

ほとんどの場合、3 つのプロパティのうち 2 つだけが NoSQL データベースによって満たされます。

ご質問から、

CouchDB : AP (可用性とパーティション) とドキュメント データベース

Cassandra : AP (可用性とパーティション) とカラム ファミリー データベース

MongoDB : CP (一貫性とパーティション) とドキュメント データベース

Vertica : CA (一貫性と可用性) & カラム ファミリー データベース

MonetDB : ACID (Atomicity Consistency Isolation Durability) & リレーショナル データベース

から: http://blog.nahurst.com/visual-guide-to-nosql-systems

ここに画像の説明を入力

特定のタイプのデータベースを選択するためのさまざまなシナリオについては、このarticle1article2、およびpptを参照してください。

于 2015-11-26T14:11:30.147 に答える
8

一部の NoSQL データベースは列指向のデータベースであり、一部の SQL データベースも同様に列指向です。データベースが列指向か行指向かは、データベースの物理ストレージ実装の詳細であり、リレーショナル データベースと非リレーショナル (NoSQL) データベースの両方に当てはまります。

たとえば、Vertica は列指向のリレーショナル データベースであるため、実際には NoSQL データストアとしての資格はありません。

「NoSQL ムーブメント」データストアは、(必然的に) ACID 保証のない、非リレーショナルで共有なしの水平方向にスケーラブルなデータベースとしてより適切に定義されます。一部の列指向データベースは、このように特徴付けることができます。NoSQL の実装には、列ストアの他に、ドキュメント ストア、オブジェクト ストア、タプル ストア、グラフ ストアも含まれます。

于 2010-05-09T18:02:56.720 に答える
6

NoSQLデータベースは、従来のスキーマベースのデータベースとは異なるパラダイムです。これらは、jsonデータなどのドキュメントをスケーリングして保持するように設計されています。明らかに情報をクエリする方法がありますが、データを取得するにはeval( "person = * and age> 10)のような構文を期待する必要があります。標準のSQLインターフェイスをサポートしている場合でも、他の目的で使用されているため、SQLが好きな場合は従来のデータベースに固執する必要があります。

列指向のデータベースは、データの格納方法が従来の行指向のデータベースとは異なります。行ではなく列全体を一緒に格納することにより、多くの列を含む行からいくつかの列を選択するときのディスクアクセスを最小限に抑えることができます。行指向のデータベースでは、行から1つだけ、またはすべてのフィールドを選択しても違いはありません。

ただし、より高価なインサートの代金を支払う必要があります。新しい行を挿入すると、列の数に応じて、多くのディスク操作が発生します。

ただし、SQL、ACID、外部キーなどの点で、従来のデータベースとの違いはありません。

于 2011-08-24T03:11:10.350 に答える
3

NoSQL wikipediaエントリの分類セクションを読んで、従来のスキーマ指向データベースとのNoSQLデータベースの違いを理解することをお勧めします。列指向であることは、行と列を意味します。これは、(2次元)スキーマを意味しますが、NoSQLデータベースは、スキーマがない(Key-Valueストア)か、構造化されたコンテンツがありますが、正式なスキーマがない(ドキュメントストア)傾向があります。

ドキュメントストアの場合、各「ドキュメント」の構造と内容は、同じ「コレクション」内の他のドキュメントから独立しています。フィールドの追加は通常、データベースの変更ではなくコードの変更です。新しいドキュメントは新しいフィールドのエントリを取得しますが、古いドキュメントは存在しないフィールドの値がnullであると見なされます。同様に、フィールドを「削除する」とは、各ドキュメントからフィールドを削除する手間をかけるのではなく、コードでの参照を停止することを意味します(スペースが限られている場合を除き、次のフィールドのみを削除するオプションがあります)。最大のコンテンツ)。これを、従来の行/列データベースで列を追加または削除するためにテーブル全体を変更する必要がある方法と比較してください。

ドキュメントには、リストやその他のネストされたドキュメントを保持することもできます。これは、JSONとして表されたMongoDB(ブログまたは他のフォーラムからの投稿)からのサンプルドキュメントです。

{
  _id : ObjectId("4e77bb3b8a3e000000004f7a"),
  when : Date("2011-09-19T02:10:11.3Z"),
  author : "alex",
  title : "No Free Lunch",
  text : "This is the text of the post.  It could be very long.",
  tags : [ "business", "ramblings" ],
  votes : 5,
  voters : [ "jane", "joe", "spencer", "phyllis", "li" ],
  comments : [
    { who : "jane", when : Date("2011-09-19T04:00:10.112Z"),
      comment : "I agree." },
    { who : "meghan", when : Date("2011-09-20T14:36:06.958Z"),
      comment : "You must be joking.  etc etc ..." }
  ]
}

「コメント」は、独自の独立した構造を持つネストされたドキュメントのリストであることに注意してください。クエリは、外部ドキュメントからこれらのドキュメントに「到達」して、たとえば、ジェーンによるコメントのある投稿や、特定の日付範囲のコメントのある投稿を見つけることができます。

つまり、NoSQLデータベースに典型的な2つの大きな違いは、従来の行/列データベースの2次元方向を超える(正式な)スキーマとコンテンツがないことです。

于 2012-06-29T20:55:20.920 に答える
2

列店の見分け方このブログを読んでください。これはあなたの質問に答えます。

于 2014-01-14T16:36:33.693 に答える
0

列指向データベースは、データがディスクに物理的に格納される方法を扱っています。名前が示すように、各列は独自の個別のスペース/ファイルに保存されます。これにより、次の 2 つの重要なことが可能になります。

  1. 扱うデータ型が 1 つであるため、10:1 程度の圧縮率を達成できます。
  2. 行全体のスキャンを回避し、SELECT クエリで指定された列を選択するだけで済むため、データ読み取りのパフォーマンスが向上します。

一方、NoSQL は、データを説明するために「論理的な」集計レベルを定義する、まったく新しい種類のデータベースです。データを階層関係 (集約は「ノード」) を持つものとして扱うものもあれば、データをドキュメント (集約レベル) として扱うものもあります。物理的なストレージ戦略を決定するものではありません (決定するものもありますが、エンド ユーザーからは抽象化されています)。

また、NoSQL の動き全体は、非構造化データ、またはスキーマを事前に定義できない、または事前に不明なデータ セットに関係しているため、厳密なリレーショナル モデルに準拠することはできません。

列指向データベースは引き続きリレーショナル データを扱いますが、インデックスなどは必要ありません。

于 2013-11-17T07:43:35.623 に答える
0

@tuinstoel が書いたように、記事はポイント 3 の質問に答えます。

3. インターフェース。 グループ A は、NoSQL ムーブメントの一部であることで際立っており、通常、従来の SQL インターフェースを持っていません。グループ B は、標準 SQL インターフェースをサポートします。

于 2011-04-06T13:32:00.030 に答える