Cassandraでは、各行(キーでアドレス指定される)に1つ以上の「列」が含まれます。列はそれ自体がキーと値のペアです。列名を事前定義する必要はありません。つまり、構造は固定されていません。行の列は、キー(名前)に従ってソートされた順序で格納されます。
場合によっては、行に非常に多数の列がある場合があります(たとえば、特定の種類のクエリを有効にするためのインデックスとして機能するため)。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をプリミティブドキュメントストアとして使用できますが、実際のドキュメント指向ストアのすべての機能を利用できるわけではありません。