cassandra 学习心得

本文介绍了Cassandra的数据模型,包括key-value、column family、key-space等核心概念,并详细解析了Standard Column Family和Super Column Family的区别。此外,还讨论了数据排序和分区策略,以及如何在Cassandra中进行简单的数据操作。
摘要由CSDN通过智能技术生成


//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插入数据的方法



4. 批评

http://wenku.baidu.com/link?url=bW9MuT2Tzz4-ahtEHzKxFVbstuV6FxocC48kmLIyJ9lVA9BMe14DMiwotT6yuLxH5mH1FBlPCijpxVsxP42xwZph1vZfE4GSiZlUQUFIJa3


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值