web-dev-qa-db-ja.com

ドキュメントベースのデータベースとキー/値ベースのデータベースの違いは?

非SQLデータベースには、3種類の一般的なタイプがあります。

  • キー/値:Redis、東京キャビネット、Memcached
  • ColumnFamily:HBaseのCassandra
  • ドキュメント:MongoDB、CouchDB

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

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

これらとリスト上の2つの前者との主な違いを教えてください。

94

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

キーバリューストア

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

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

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

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

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

問い合わせ

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

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

70

Ayende は、Key-ValueとDocumentデータベースの違いに関する素晴らしい説明を提供しています:

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

14
Ashraf Alam