//bookmark
http://sergeyenin.com/apache-cassandra-1-1-part-1-basic-architecture
1. 数据模型:key-value, column family, key-space解释
http://dongxicheng.org/nosql/cassandra-data-model/
http://tech.ddvip.com/2013-08/1375645227200251.html
1.1 Key(对应SQL数据库中的主键)
One Row One Key(一行一键) ,相当于主键。 在Cassandra中,每一行数据记录是以key/value的形式存储的,其中key是唯一标识。 value其实即使这一行数据,可以包括多个column, 一个column相当于一个field
1.2 column(对应SQL数据库中的field)
Column是个三元组,即:name,value和timestamp,其中name需要是唯一的。一个Column相当于mysql数据表中的某个一个字段。 一个value可以由多个column组成。
1.3 super column(SQL数据库不支持)
cassandra 允许key/value中的value里面某个column是由多个之列组成,这些子列由某个子key 来代表。 相当于某个field 被拆分成几个子field,或者某个field其实一个子行(sub-row)。
说白了,逻辑上 其实还是行式数据库,一个行对应一个row,row由key代表, 一个row里面有很多个column(相当于一个field),每个field又可以是一个super column,这点比mysql灵活多了。 每一行的实际的字段数是由客户端程序决定的,每个column的可以由应用程序动态决定,这点又比mysql 灵活了
1.4 Standard Column Family(相对应SQL数据库中的table)
Column family 是指所有key中的column而不是单个key 的,所以这个概念其实就是对应于mysql的表. 标准的CF中只能存储name/value形式的标准column,不能存储Super column
1.5 Super Column Family(SQL数据库不支持)
每个SCF由一系列row组成,每个row包含一个key以及其对应的若干super column。 SCF中只能存储super column, 不能有standard column
1.6 static column family
对于静态的column family,字段名是固定的,比较适合对于这些column都有预定义的元数据,如下图所示:
1.7 dynamic column family
动态的column family,字段名是应用程序计算出来并且提供的,所以column family只能定义这些字段的类型,但是不可以指定这些字段的名字和值,这些名字和值是由应用程序插入某字段才得出的,如下图所示:
1.8 Key Space(对应SQL数据库中的database)
一个Key Space中可包含若干个CF,如同SQL数据库中一个database可包含多个table。
2
2.1 排序
在Cassandra的每个row中,所有Column按照会按照name自动进行排序,排序的类型有:BytesType, UTF8Type,LexicalUUIDType, TimeUUIDType, AsciiType,和LongType,不同的排序类型,会产生不同的排序结果,如:
{name: 123, value: “hello there”},
{name: 832416, value: “kjjkbcjkcbbd”},
{name: 3, value: “101010101010″},
{name: 976, value: “kjjkbcjkcbbd”}
采用LongType排序类型,结果是:
{name: 3, value: “101010101010″},
{name: 123, value: “hello there”},
{name: 976, value: “kjjkbcjkcbbd”},
{name: 832416, value: “kjjkbcjkcbbd”}
采用UTF8Type排序类型,结果是:
{name: 123, value: “hello there”},
{name: 3, value: “101010101010″},
{name: 832416, value: “kjjkbcjkcbbd”},
{name: 976, value: “kjjkbcjkcbbd”}
2.2 数据分区
http://blog.csdn.net/qinzhihu/article/details/8807531
3. 简单操作
首先,启动cassandra:
进入安装目录,使用命令:bin/cassandra
然后,连接到一个节点上:
$ ./cassandra-cli -host localhost -port 9160
Connected to:
"Test Cluster"
on localhost/9160
Welcome to cassandra CLI.
Type
'help;'
or
'?'
for
help. Type
'quit;'
or
'exit;'
to quit.
[
default
@unknown] create keyspace twissandra with replication_factor=1
and placement_strategy=
'org.apache.cassandra.locator.SimpleStrategy'
;
[
default
@unknown] use twissandra;
Authenticated to keyspace: twissandra
------------
... schemas agree across the cluster
[
default
@twissandra] create column family users with comparator = UTF8Type;
c21f48d5-8748-11e0-8afd-e700f669bcfc
Waiting
for
schema agreement...
... schemas agree across the cluster
[
default
@twissandra] set users[
'Bob'
][
'phone'
]=
'1251892983'
;
Value inserted.
[
default
@twissandra] set users[
'Bob'
][
'address'
]=
'Haidian,Beijing'
;
Value inserted.
[
default
@twissandra] set users[
'Bob'
][
'birthday'
]=
'1980-08-09'
;
Value inserted.
[
default
@twissandra] get users[
'Bob'
];
=> (column=address, value=4861696469616e2c4265696a696e67, timestamp=1306380804182000)
=> (column=birthday, value=313938302d30382d3039, timestamp=1306380831152000)
=> (column=phone, value=31323531383932393833, timestamp=1306380777399000)
Returned 3 results.
删除phone column:
[
default
@twissandra] del users[
'Bob'
][
'phone'
];
删除users CF:
[
default
@twissandra] drop column family users;
查看这个keyspace下所有的column family
describe
twissandra
;
查看某个column family
describe
users
;
说明:
(1) column family插入数据的方法
(2) Super column family插入数据的方法
![scf](https://i-blog.csdnimg.cn/blog_migrate/688094774a901b2dfe40d2e244b7643d.png)
4. 批评
http://wenku.baidu.com/link?url=bW9MuT2Tzz4-ahtEHzKxFVbstuV6FxocC48kmLIyJ9lVA9BMe14DMiwotT6yuLxH5mH1FBlPCijpxVsxP42xwZph1vZfE4GSiZlUQUFIJa3