NoSQLについて読むほど、列指向データベースのように聞こえるようになります。
NoSQL(CouchDB、Cassandra、MongoDBなど)と列指向データベース(Vertica、MonetDBなど)の違いは何ですか?
NoSQLは、SQLだけでなく、4つの主要なカテゴリをカバーする用語です。 -Key-Value、ドキュメント、列ファミリー、グラフデータベース。
Key-valueデータベースは、単純なデータモデルとともに頻繁に小さな読み取りと書き込みを行うアプリケーションに最適です。これらのレコードは、レコードを一意に識別するキーを使用して保存および取得され、データベース内のデータをすばやく見つけるために使用されます。
例: Redis、Riakなど
ドキュメントデータベースには、大量のデータとともにさまざまな属性を格納する機能があります
例: MongoDB、CouchDBなど
列ファミリーデータベースは、大量のデータ、読み取りと書き込みのパフォーマンス、および高可用性のために設計されています
例:Cassandra、HBaseなど
Graphデータベースは、ノード、エッジ、プロパティを使用したセマンティッククエリにグラフ構造を使用して、データを表現および保存するデータベースです。
例:Neo4j、InfiniteGraphなど
NoSQLを理解する前に、いくつかの重要な概念を理解する必要があります。
Consistency–システム内のすべてのサーバーは同じデータを持つため、システムを使用するすべてのサーバーは、要求に応答するサーバーに関係なく、同じコピーを取得します。
Availability–システムは常にリクエストに応答します(最新のデータでなくても、システム全体で一貫性がなくても、システムがそうではないというメッセージだけでも) t作業中)。
Partition Tolerance–個々のサーバーに障害が発生したり、到達できない場合でも、システムは全体として動作し続けます。
ほとんどの場合、NoSQLデータベースが満たすのは上記の3つのプロパティのうち2つだけです。
あなたの質問から、
CouchDB:[〜#〜] ap [〜#〜](可用性とパーティション)&ドキュメントデータベース
Cassandra:[〜#〜] ap [〜#〜](可用性とパーティション)&列ファミリーデータベース
MongoDB:[〜#〜] cp [〜#〜](一貫性とパーティション)&ドキュメントデータベース
Vertica:[〜#〜] ca [〜#〜](一貫性と可用性)&列ファミリーデータベース
MonetDB:ACID(Atomicity Consistency Isolation Durability)&リレーショナルデータベース
差出人: http://blog.nahurst.com/visual-guide-to-nosql-systems
特定のタイプのデータベースを選択するためのさまざまなシナリオについて、これを見てください article1 、 article2 および ppt 。
一部のNoSQLデータベースは列指向データベースであり、一部のSQLデータベースも列指向です。データベースが列指向か行指向かは、データベースの物理ストレージ実装の詳細であり、リレーショナルデータベースと非リレーショナル(NoSQL)データベースの両方に当てはまります。
たとえば、Verticaは列指向のリレーショナルデータベースであるため、実際にはNoSQLデータストアとしての資格はありません。
「NoSQLムーブメント」データストアは、(必然的に)ACIDが保証されていない、非リレーショナル、シェアードナッシング、水平方向にスケーラブルなデータベースとしてより適切に定義されます。一部の列指向データベースは、この方法で特徴付けることができます。列ストアに加えて、NoSQLの実装には、ドキュメントストア、オブジェクトストア、タプルストア、グラフストアも含まれます。
NoSQLデータベースは、従来のスキーマベースのデータベースとは異なるパラダイムです。これらは、jsonデータなどのドキュメントをスケーリングして保持するように設計されています。明らかに情報をクエリする方法がありますが、データを取得するにはeval( "person = * and age> 10)のような構文を期待する必要があります。標準のSQLインターフェイスをサポートしている場合でも、他の目的で使用されているため、SQLが好きな場合は従来のデータベースに固執する必要があります。
列指向データベースは、データの格納方法が従来の行指向データベースとは異なります。行ではなく列全体を一緒に格納することにより、多くの列を含む行からいくつかの列を選択するときのディスクアクセスを最小限に抑えることができます。行指向のデータベースでは、行から1つだけ、またはすべてのフィールドを選択しても違いはありません。
ただし、より高価なインサートの代金を支払う必要があります。新しい行を挿入すると、列の数に応じて、多くのディスク操作が発生します。
ただし、SQL、ACID、外部キーなどの点で、従来のデータベースとの違いはありません。
NoSQL wikipediaエントリの 分類セクション を読んで、従来のスキーマ指向データベースとのNoSQLデータベースの違いを理解することをお勧めします。列指向であることは、行と列を意味します。これは(2次元)スキーマを意味しますが、NoSQLデータベースはスキーマがない(キー値ストア)か、構造化されたコンテンツを持っているが正式なスキーマがない(ドキュメントストア)傾向があります。
ドキュメントストアの場合、各「ドキュメント」の構造と内容は、同じ「コレクション」内の他のドキュメントから独立しています。フィールドの追加は通常、データベースの変更ではなくコードの変更です。新しいドキュメントは新しいフィールドのエントリを取得しますが、古いドキュメントは存在しないフィールドの値が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次元方向を超える(正式な)スキーマとコンテンツがないことです。
列の店を区別する このブログを読んでください。これはあなたの質問に答えます。
私の見方は次のとおりです。列指向データベースは、データがディスクに物理的に格納される方法を処理しています。名前が示すように、各列は独自の個別のスペース/ファイルに格納されます。これにより、2つの重要なことが可能になります。
一方、NoSQLは、データを説明するための「論理的な」集計レベルを定義するまったく新しい種類のデータベースです。データを階層的な関係(集合体が「ノード」)として扱うものもあれば、データをドキュメント(集合体レベル)として扱うものもあります。それらは物理ストレージ戦略を指示しません(一部は指示しますが、エンドユーザーから抽象化されます)。
また、NoSQLの動き全体は、非構造化データ、つまりスキーマを事前定義できない、または事前に不明なデータセットに関係しているため、厳密なリレーショナルモデルに準拠できません。
列指向データベースは、インデックスなどの必要性を排除しますが、依然としてリレーショナルデータを処理します。
@tuinstoelが書いたように、 article はポイント3であなたの質問に答えます。
3。インターフェイス。グループAは、NoSQLムーブメントの一部であるという点で区別され、通常、従来のSQLインターフェイスはありません。グループBは、標準のSQLインターフェイスをサポートしています。