Column
Column是Cassandra中最小的数据单元,它是一个三元的数据类型,包含name,value,timestamp.
Column必须有一个名称,类似于JAVA中的字符串,应用创建后可以动态地设置,Column可以在name上建索引。不要求每个name都有对应的value,value可以为空。还有一列是时间戳,标识column最新更新的时间。时间戳是由客户端应用程序提供的,请求到来时总是希望返回时间戳最新的数据,如果多个客户端同时更新相同的列,列值与最近的更新相同。
SuperColumn
ColumnFamily可以是一个常规Column,也可以是一个SuperColumn.可以将SuperColumn想象成Column的数组,它包含一个name以及一系列Column.
注意:SuperColumn本身不包含timestamp属性。使用SuperColumn有一个限制,要读取其中一个子列的值,必须把所有子列都反序列化,且不能在子列中建索引。因此SuperColumn的应用场合是子列数相对较小的情况。
ColumnFamily
相比关系型数据库,Cassandra中的ColumnFamily相当于数据库中的表,它是一个包含了许多行的结构,每一行由Key和这个Key所关联的Column组成。与关系数据库不同的是,每行不要求有相同数目的列。有两种不同的列族设计:静态和动态。
静态ColumnFamily:使用一组不变的列名,这点更像关系型数据库。如下图:
动态ColumnFamily:每一行的列名不相同,是在运行过程中动态计算和设置的。如下图:
ColumnFamily每一行可以是一系列Column,也可以是一系列SuperColumn。
Keyspace
每个Keyspace包含多个ColumnFamily,并且可以指定数据备份策略和备份数。一般一个Cassandra一个Keyspace。
下节学习:Cassandra集群通信协议-Gossip.
参考资料:
http://www.datastax.com/documentation/cassandra/1.2/cassandra/architecture/architectureIntro_c.html