[解決済み] 列指向のNoSQLは文書指向とどう違うのか?
質問
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を原始的なドキュメントストアとして使うこともできますが、本当のドキュメント指向ストアのすべての機能は得られないでしょう。
関連
-
[解決済み】MongoDBデータベースの名前を変更する方法とは?
-
[解決済み] 配列のサイズが1より大きい文書を検索します。
-
[解決済み] MongoDB Compass フィルタ (クエリ)
-
[解決済み] ストア enum MongoDB
-
[解決済み] mongooseを使ってmongodbにドキュメントを挿入し、生成されたidを取得する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み】mongoコンソールでObjectIdを使用してオブジェクトを検索する方法は?
-
[解決済み] MongoDB/NoSQL。ドキュメントの変更履歴を残す
-
[解決済み] NoSQLでレコードのリレーションを追跡するには?
-
[解決済み] MongoDBでObjectIDの代わりにUUIDを使用する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Mongodbでキーに基づいた重複を削除する方法は?
-
[解決済み] mongoimport : 'error validating settings: positional argument is only one allowed' (設定の検証エラー:位置引数は1つしか許可されません。
-
[解決済み] MongoDBでコレクションを削除するには?
-
[解決済み] 条件付きでMongoDBを更新する
-
[解決済み】MongoDBのシェルで20以上のアイテム(ドキュメント)をプリントアウトする方法は?
-
[解決済み】Node.js Mongoose.js の文字列を ObjectId に変換する関数
-
[解決済み】2つの異なるコレクションで重複したMongo ObjectIdが生成される可能性?
-
[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?
-
[解決済み] 値が NULL ではないマングースクエリ
-
[解決済み] mongoがどのポートをリッスンしているか、mongoシェルから見るにはどうしたらいいですか?