[解決済み] ドキュメントベースとキー/バリューベースの違いとは?
質問
非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"のような値による基本的なクエリを行うことも可能です。このように、ドキュメントデータベースはより柔軟性があります。
関連
-
[解決済み】MongoError: 最初の接続でサーバー [localhost:27017] への接続に失敗しました。
-
[解決済み】MongoDBシェルですべてのコレクションを一覧表示するには?
-
[解決済み] mongodb count フィールド/キーごとの明確な値の数
-
[解決済み] MongoDB の重複レコードを検索する
-
[解決済み] Mongodb: ensureIndex をいつ呼び出すか?
-
[解決済み] MongoDB Compass フィルタ (クエリ)
-
[解決済み] MongoDB: 1つのコマンドで複数のドキュメントを更新するには?
-
[解決済み] 特定の値を含む配列で文書を検索する
-
[解決済み】Cassandraのパーティションキー、コンポジットキー、クラスタリングキーの違い?
-
[解決済み】Node.js Mongoose.js の文字列を ObjectId に変換する関数
最新
-
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データベースの名前を変更する方法とは?
-
[解決済み] mongodb count フィールド/キーごとの明確な値の数
-
[解決済み] Mongodb: ensureIndex をいつ呼び出すか?
-
[解決済み] 条件付きでMongoDBを更新する
-
[解決済み] MongoDB: 大文字小文字を区別しないクエリを作ることはできますか?
-
[解決済み] mongodb Failed: error connecting to db server: no reachable servers
-
[解決済み] or' 条件を含む MongoDB クエリ
-
MongoDBラーニングノート
-
[解決済み】ネストされたオブジェクトをクエリする方法は?
-
[解決済み] mongoがどのポートをリッスンしているか、mongoシェルから見るにはどうしたらいいですか?