Cassandra学习笔记之数据模型

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

http://planetcassandra.org/documentation/

相关文章

一、引言 学习redis 也有一段时间了,该接触的也差不多了。后来有一天,以前的同事问我,如何向redis中...
一、引言 上一篇文章,我介绍了如何在Linux系统上安装和配置MongoDB,其实都不是很难,不需要安装和编译...
一、介绍 Redis客户端使用RESP(Redis的序列化协议)协议与Redis的服务器端进行通信。 虽然该协议是专门...
一、引言 redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本的相关的东西...
一、介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分。...
一、引言 上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入...