SQL 以外のデータベースには、3 つの異なる一般的なタイプがあることを知っています。
- キー/値: Redis、東京キャビネット、Memcached
- カラムファミリー: Cassandra、HBase
- ドキュメント: MongoDB、CouchDB
あまり理解せずに、それについての長いブログを読みました。
私はリレーショナル データベースを知っており、MongoDB/CouchDB のようなドキュメント ベースのデータベースに慣れています。
これらとリストの2つの前者の主な違いは何ですか?
SQL 以外のデータベースには、3 つの異なる一般的なタイプがあることを知っています。
あまり理解せずに、それについての長いブログを読みました。
私はリレーショナル データベースを知っており、MongoDB/CouchDB のようなドキュメント ベースのデータベースに慣れています。
これらとリストの2つの前者の主な違いは何ですか?
主な違いは、データ モデルとクエリ機能です。
最初のタイプは非常に単純で、おそらくこれ以上の説明は必要ありません。
Cassandra などのデータベースの正しい名前についてはいくつかの議論がありますが、列ファミリー ストアと呼びたいと思います。キーと値のペアは Cassandra の重要な部分ですが、それだけに限定されません。キーと値のペアをネストできるため、キーは複数のサブキーと値のペアを参照できます。
ただし、キーと値のペアを無期限にネストすることはできません。3 レベル (列ファミリー) または 4 レベルの入れ子 (スーパー列ファミリー) に制限されています。列ファミリーという用語がよくわからない場合は、WTF is a SuperColumnの記事を参照してください。これは、Cassandra のデータ モデルの適切な説明です。
CouchDB や MongoDB などのドキュメント データベースは、ドキュメント全体をJSON オブジェクトの形式で格納します。これらのオブジェクトは、ネストされたキーと値のペアと考えることができます。Cassandra とは異なり、キーと値のペアを必要なだけネストできます。JSON は配列もサポートし、文字列、数値、ブール値などのさまざまなデータ型を理解します。
列ファミリー ストアは、キーによって、または map-reduce 関数を記述することによってのみクエリを実行できると思います。SQL データベースのように値をクエリすることはできません。アプリケーションがより複雑なクエリを必要とする場合、アプリケーションは目的のデータにアクセスするためにインデックスを作成して維持する必要があります。
ドキュメント データベースは、キーによるクエリと map-reduce 関数もサポートしていますが、「10 件以上の投稿があるすべてのユーザーを教えてください」など、値による基本的なクエリも実行できます。このように、文書データベースはより柔軟です。
Ayendeは、Key-Value データベースとドキュメント データベースの違いについて、次のように説明しています。
ドキュメント データベースは、その核となるキー/バリュー ストアですが、大きな例外が 1 つあります。ドキュメント データベースでは、ブロブを格納するだけでなく、データベースが理解できる形式 (つまり、JSON、XML など) でデータを格納する必要があります。これは、ほとんどのドキュメント データベースで、ドキュメント データに対するクエリを許可できるようになったことを意味します。