在Cassandra中,每一行(用键寻址)都包含一个或多个“列”。列本身就是键值对。列名不需要预定义,即结构不是固定的。行中的列根据其键(名称)以排序的顺序存储。
在某些情况下,一行中的列可能非常多(例如,用作启用特定种类查询的索引)。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的数据建模链接
回复:与面向文档的数据库进行比较-后者通常插入整个文档(通常为JSON),而在Cassandra中,您可以处理单个列或超列,并分别进行更新,即它们以不同的粒度级别工作。每列都有自己单独的时间戳记/版本(用于协调分布式集群中的更新)。
Cassandra列的值仅为字节,但可以键入为ASCII,UTF8文本,数字,日期等。
当然,您可以通过插入包含JSON的列来将Cassandra用作原始文档存储-但是您不会获得真正的面向文档的存储的所有功能。