列データベースは、列のグループを一緒に格納する必要があります。しかし、Cassandraはデータを行ごとに格納します。SSテーブルは、対応するパーティションキーにマップされたデータの複数の行を保持します。したがって、Cassandraは行ごとです。 MySQLのようなデータストアですが、「幅の広い行」などの他の利点があり、すべての列がすべての行に存在する必要はなく、もちろんメモリ内にあります。間違っている場合は修正してください。
Apache Cassandra GitHubのプロジェクト に移動し、[エグゼクティブサマリー]まで下にスクロールすると、次のような答えが得られます。
Cassandraはパーティション化された行ストアです。行は、必要な主キーを持つテーブルに編成されます。
パーティショニングとは、Cassandraが、アプリケーションを透過的に複数のマシンにデータを分散できることを意味します。Cassandraは、マシンがクラスターに追加およびクラスターから削除されると、自動的に再パーティショニングされます。
行ストアとは、リレーショナルデータベースと同様に、Cassandraがデータを行と列で整理することを意味します。
「だから私はCassandraは行ごとのデータストアだ」と感じます
そしてそれは正しいでしょう。
列指向または列指向のデータベースでは、データは列ごとにディスクに保存されます。
例:テーブルBonuses
table
ID Last First Bonus
1 Doe John 8000
2 Smith Jane 4000
3 Beck Sam 1000
行指向データベース管理システムでは、データは次のように格納されます。1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;
列指向データベース管理システムでは、データは次のように格納されます。1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;
Cassandraは基本的にcolumn-familyストアです
"Bounses" : { row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2 : { "ID":2, "Last":"Smith", "Jane":"John", "Bonus":4000} ... }
として保存します。Vertica、VectorWise、MonetDBは、私が聞いたことがある列指向データベースです。
詳細については、 this をお読みください。
お役に立てれば。
cassandraは、内部マップがキーでソートされているマップのマップとして考えるのが良い方法です。パーティションには多くの列があり、それらは常に一緒に格納されます。それらはクラスタリングによってソートされます。キー-最初に最初のキー、次に次、次に次...など。パーティションはレプリカ間で複製されます。複製戦略に基づいて異なるノードに異なる行が格納され、アクティブであるため、必ずしも「行」として格納されるとは限りません。つまり、ProductIdがパーティションキーである場合、ProductId1のパーティションはProductId2の隣に格納されない可能性があります。ただし、Product Id1の列は常に一緒に格納されます。
定義に関しては、ほとんどのNoSQLストアは何らかの方法で線をぼかしています。それらは通常、複数のカテゴリにまたがっています。これが列型データベースとして適格かどうかを判断するのはあなたに任せます:)