1. ホーム
  2. mongodb

[解決済み] ドキュメントベースとキー/バリューベースの違いとは?

2022-12-13 01:24:15

質問

非SQLデータベースには、3つの異なる一般的なタイプがあることは知っています。

  • キー/バリュー Redis、Tokyo Cabinet、Memcached
  • カラムファミリ。Cassandra、HBase
  • ドキュメント MongoDB、CouchDB

私はそんなに理解せずに、それについて長いブログを読んできました。

リレーショナルデータベースを知っていて、MongoDB/CouchDBのようなドキュメントベースのデータベースを使いこなすことができる。

これらとリストの前者2つとの主な違いは何なのか、誰か教えてください。

どのように解決するのですか?

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

キー・バリュー・ストア

最初のタイプは非常にシンプルで、おそらくこれ以上の説明は必要ないでしょう。

データモデル: キー-バリューストア以上のもの

データモデルには いくつかの議論 のようなデータベースの正しい名称については議論がありますが、私はそれらを カラムファミリーストア . Cassandraではキー・バリュー・ペアが不可欠ですが、それだけにとどまりません。キー-バリュー・ペアをネストすることができるので、1つのキーが複数のサブキー-バリュー・ペアを参照することができます。

しかし、key-valueペアを無制限にネストすることはできません。ネストは3レベル(カラムファミリー)または4レベル(スーパーカラムファミリー)に制限されています。カラム ファミリという用語にピンとこない方のために、以下のサイトを参照してください。 WTF is a SuperColumn の記事を参照してください。Cassandraのデータ・モデルに関する良い説明です。

ドキュメント・データベース CouchDBやMongoDBのような、全体のドキュメントは、フォームに格納します。 JSONオブジェクト . これらのオブジェクトはネストされたキー-バリュー・ペアと考えることができます。Cassandraとは異なり、Key-Valueペアは好きなだけネストすることができます。JSONは配列もサポートし、文字列、数値、ブール値などのさまざまなデータ型も理解します。

クエリ

カラムファミリーストアは、キーによるクエリか、map-reduce関数を書くことでしかクエリできないと思っています。SQLデータベースのように値をクエリすることはできません。もしアプリケーションがより複雑なクエリを必要とするならば、目的のデータにアクセスするために、アプリケーションはインデックスを作成し、維持しなければならないでしょう。

ドキュメントデータベースは、キーによるクエリやマップ還元関数もサポートしていますが、"Give me all users with more than 10 posts"のような値による基本的なクエリを行うことも可能です。このように、ドキュメントデータベースはより柔軟性があります。