Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace。下面分别介绍这几种类型。
Column
Column是Cassandra中最小的数据单元,它是一个三元的数据类型,包括:name,value,timestamp。将一个Column使用JSON的形式表现出来,如下所示:
{ //this is a Column name:"ysl", value:"ysl@test.com" timestamp:4654646546 }
在这里,name和value的类型都是Java中的byte[]。
SuperColumn
SuperColumn可以看做是由Column组成的数组,它包含一个name以及一些列相应的Column,我们将SuperColumn使用JSON的形式表现出来如下:
{ //this is a SuperColumn name:"emails", value:{ { name:"ysl", value:"ysl@test.com" timestamp:4654646546 }, { name:"ddd", value:"ddd@test.com" timestamp:4654646546 } } }
值得注意的是SuperColumn没有timestamp属性
ColumnFamily
ColumnFamily是一个包含许多Row的结构,可以将它想象为关系型数据库中的表。Row是由key以及key关联的Column组成的。下面的实例代表了一个ColumnFamily。
//this is a ColumnFamily users = { ysl:{//this is a key { name:"username", value:"ysl", timestamp:4342423 }, { name:"email", value:"ysl@test.com", timestamp:4545645 }, { name:"phone", value:"1236564545", timestamp:4342443 } }, ketty:{//this is a key { name:"username", value:"ketty", timestamp:4342423 }, { name:"email", value:"ketty@test.com", timestamp:4545645 }, { name:"phone", value:"13655556666", timestamp:4342443 } } }
Keyspace
每一个Keyspace包含多个ColumnFamily,并且可以制定Keyspace的数据备份策略和数据的备份数。
一般来说,每一个Cassandra集群中有一个Keyspace就可以了,但是当集群足够庞大,并且业务足够的复杂的时候,就需要拆分为多个Keyspace了,比如说两个系统使用同一个Cassandra集群,一个数据的备份数要求是3,而另外一个数据备份数要求是5,这样就需要为每个系统单独创建一个Keyspace了。