1. ホーム
  2. mongodb

[解決済み] 列指向のNoSQLは文書指向とどう違うのか?

2022-12-09 18:22:12

質問

NoSQLデータベースには、キーバリュー型、カラム型、ドキュメント型の3種類があると聞きましたが、それぞれどのような特徴がありますか?

Key-Valueは非常にわかりやすいもので、キーに平易な値がついています。

ドキュメント指向のデータベースがキー-バリューのように説明されるのを見たことがありますが、値はJSONオブジェクトのような構造体であることがあります。しかし、値はJSONオブジェクトのような構造体であることもあります。各「ドキュメント」は、他のものと同じキーをすべて持つことも、いくつかを持つことも、まったく持たないこともできます。

カラム指向は、構造を指定しないという点で、ドキュメント指向に非常によく似ているようです。

では、この2つの違いは何でしょうか。また、なぜどちらかを使うのでしょうか。

私は特にMongoDBとCassandraを調べました。私は基本的に、変化しても他の値に影響を与えない動的な構造を必要としています。同時に、私は特定のキーを検索/フィルタリングし、レポートを実行できるようにする必要があります。CAPでは、APが私にとって最も重要です。データは、競合やデータの損失がない限り、ノード間で同期させることができます。各ユーザーは自分自身の "テーブル"を取得することになります。

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

Cassandraでは、各行(キーでアドレス指定)には1つまたは複数の"columns"が含まれます。カラムはそれ自体がキー-バリュー ペアです。カラム名は事前に定義する必要はなく、つまり構造は固定されていません。行の中の列は、そのキー(名前)に従ってソートされた順序で格納されます。

場合によっては、行に非常に多くのカラムを持つことがあります(たとえば、特定の種類のクエリを可能にするインデックスとして機能するため)。Cassandraはそのような大きな構造を効率的に扱うことができ、カラムの特定の範囲を取得することができます。

スーパーカラムと呼ばれる、(それほど一般的に使用されていない)構造のさらなるレベルがあり、そこではカラムがネストされた(サブ)カラムを含んでいます。

全体的な構造は、2つまたは3つのレベルのキーを持つ、ネストされたハッシュテーブル/辞書と考えることができます。

通常の列の系列です。

row
    col  col  col ...
    val  val  val ...

スーパーカラムファミリ。

row
      supercol                      supercol                     ...
          (sub)col  (sub)col  ...       (sub)col  (sub)col  ...
           val       val      ...        val       val      ...

さらに上位の構造として、カラムファミリやキースペースがあり、これらを用いてデータを分割したりまとめたりすることができます。

こちらの質問もご覧ください。 Cassandra:サブカラムとは何ですか?

または、データ・モデリング・リンクから http://wiki.apache.org/cassandra/ArticlesAndPresentations

Re: ドキュメント指向のデータベースとの比較 - 後者は通常、ドキュメント全体(通常はJSON)を挿入しますが、Cassandraでは個々の列またはスーパーカラムに対処し、これらを個別に更新することができ、すなわち異なるレベルの粒度で動作します。各カラムは独自の個別のタイムスタンプ/バージョンを持ちます(分散クラスター間で更新を調整するために使用されます)。

Cassandraのカラム値は単なるバイトですが、ASCII、UTF8テキスト、数字、日付などとして入力することができます。

もちろん、JSONを含むカラムを挿入することで、Cassandraを原始的なドキュメントストアとして使うこともできますが、本当のドキュメント指向ストアのすべての機能は得られないでしょう。