ドキュメントベースのデータベースとキー/バリューベースのデータベースの違いは何ですか?


97

非SQLデータベースには、3種類の人気のあるタイプがあることを知っています。

  • キー/値:Redis、Tokyo Cabinet、Memcached
  • ColumnFamily:Cassandra、HBase
  • ドキュメント:MongoDB、CouchDB

私はそれについてあまり理解せずにそれについて長いブログを読みました。

私はリレーショナルデータベースを知っており、MongoDB / CouchDBのようなドキュメントベースのデータベースに慣れ親しんでいます。

誰かがこれらとリストの前者2の主な違いは何か教えてもらえますか?


4
5つあります:(1)Key-Valueストア:Oracle Coherence、Redis、Kyoto Cabinet(2)BigTableスタイルのデータベース:Apache HBase、Apache Cassandra(3)ドキュメントデータベース:MongoDB、CouchDB(4)全文検索エンジン:Apache Lucene、Apache Solr(5)グラフデータベース:neo4j、FlockDB、nosql-data-modeling-techniquesを参照
Gary Gauh 2013年

回答:


74

主な違いは、データモデルとクエリ機能です。

Key-Valueストア

最初のタイプは非常に単純で、おそらくこれ以上の説明は必要ありません。

データモデル:Key-Valueストア以外

Cassandraなどのデータベースの正しい名前についてはいくつかの議論がありますが、それらを列ファミリーストアと呼びたいと思います。キーと値のペアはCassandraの重要な部分ですが、それだけに限定されません。キーと値のペアをネストできるため、キーで複数のサブキーと値のペアを参照できます。

ただし、キーと値のペアを無期限にネストすることはできません。3レベル(列ファミリー)または4レベルのネスト(スーパー列ファミリー)に制限されています。列ファミリーという用語がベルを鳴らさない場合は、WTFがSuperColumnの記事であることを確認してください。これは、 Cassandraのデータモデルの適切な説明です。

CouchDBやMongoDBなどのドキュメントデータベースはドキュメント全体をJSONオブジェクトの形式で格納します。これらのオブジェクトは、ネストされたキーと値のペアと考えることができます。Cassandraとは異なり、キーと値のペアは必要なだけネストできます。JSONは配列もサポートし、文字列、数値、ブール値などのさまざまなデータ型を理解します。

クエリ

列ファミリーストアは、キーまたはmap-reduce関数を記述することによってのみクエリできると思います。SQLデータベースの場合のように値を照会することはできません。アプリケーションがより複雑なクエリを必要とする場合、アプリケーションは目的のデータにアクセスするためにインデックスを作成および維持する必要があります。

ドキュメントデータベースは、キーによるクエリとmap-reduce関数もサポートしていますが、「すべてのユーザーに10を超える投稿を許可する」などの基本的なクエリを値によって実行することもできます。このように、ドキュメントデータベースはより柔軟です。


2
したがって、reditのようなKey-Valueストアでは、ネストされたKey:Valueを保存できませんか?そして、あなたの説明から、データベース全体(RDBMSから)をCassandraに格納することはあまり賢明ではないように思われ、柔軟なクエリを許可せず、ネストの深さが限られていると思いますか?
never_had_a_name 2010

7
@ajsie:正しい、キーと値のストアはネストされたキーと値のペアをサポートしていません。ただし、それらのほとんどは、リストなどの特殊な値をサポートしています。CassandraはRDBMSとは非常に異なり、どちらも非常に異なる問題を解決するように設計されています。RDBMSシステムは、複雑なクエリを必要とするリレーショナルデータを対象としていますが、Cassandraは、ほとんどの非リレーショナルデータを大量に処理することを目的としています。もちろん、RDBMSデータベースをCassandraに移動することは可能ですが、実際にはそれほど賢くはありません。それぞれに独自の用途があります。
Niels van der Rest

したがって、すべてのドキュメントデータベースもキー、値ストアで、値は{value:base64(val)}のような単純なJSONです。
GroovyDotCom

@GroovyDotCom:はい、ドキュメントデータベースを使用して単純なキー/値オブジェクトを格納できます。
Niels van der Rest

15

Ayendeは、Key-Valueデータベースとドキュメントデータベースの違いについて、すばらしい説明をしています。

ドキュメントデータベースは、1つの主要な例外を除いて、コアとなるキー/値ストアです。ドキュメントデータベースでは、ブロブを格納するだけでなく、データベースが理解できる形式(JSON、XMLなど)でデータを格納する必要があります。ほとんどのdoc dbで、つまり、ドキュメントデータに対するクエリ許可できるようになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.