0. 介绍
1. 和MongoDB的区别
2. key feature
3. 应用场景
4. cassandra架构
分布式系统。由节点组成,每个node都平等。共同构成一到多个ring 或者cluster
节点读写操作中的组成部分:
- memtable
- commitLog
- SSTables
单个节点的写入操作:
单个节点的读取操作:
5. data model
logical entities:tables and keyspaces
我们会在之后教程中详细说明tables和keyspaces的含义与操作。链接如下
Apache Cassandra:数据结构,keyspaces,table相关操作
执行create, drop, alter等操作,并不会影响在证运行的update 或者查询操作。
本部分说明的例子按照按照如下所示的代码创建。分别创建一个名字为intro_cassandra
的keyspace和groups
的table.
上图中最后一行我们需要解释一下:
PRIMARY KEY ((groupid), username)
其中
groupid
列被称为Patition key
username
column 被称作Clustering Key
primary key
- primary key 包含两种key,partition key 和 clustering key
- partition key: mandatory 必须有
- clustering key(s): optional
- 与传统关系数据库一样,primarykey需要在创建table的时候申明。
- 一旦被定义,无法更改
- 两个主要作用:
- 优化读取数据的速度:query driven table design(把最常用的query列作为primary key)
- uniqueness to the entries (这个功能跟之前SQL一样)
插入操作的时候,必须将所有primary key指定col的value填写进去。
partition keys
数据写入的时候,需要按照partition分组进而分布到cluster上的nodes中。这就是partition key的作用。
partition key的hash值被用来决定哪个node来存储写入的数据。也就是说,它决定了数据在cluster中的分布。
partition key -> hash(token) -> Node
拥有相同的patition key的entries存储在唯一的相同的node中。
用图示范一下:
clustering key
用于确保data在partition key 找到的node中的插入位置(默认升序)
所以如果我们查询某个确定partition key下的数据,返回来的数据是按照clustering key 的data值升序排列好的。
作用:
- 快速的存取数据,尤其相似的数据。
- give uniqueness to primary key
举个例子说明clustering key的作用。
先create table:
clustering key 为age 和username,插入数据会按照age排序,age相同的再按照username排序。
插入如下数据:
当我们查询groupid=12,age为32的信息的时候,直接就能在这个node以及node内部相邻位置,返回查询结果。进而减少查询时间。
当我们想要插入新的entry时候:
插入之后,groupid为45的就和右边的node联系在一起。只要不发生node的增减打破整个cluster,以后都会直接在这个node中找到45号组的信息。
table的类型
table有两种类型: static和dynamic
static tables:
- PRIMARY KEY(username)
- 只有partition key(一列或者多列)
- 1 partition = 1 entry
dynamic tables:
- PRIMARY KEY((groupid), username)
- 既有partition key,也有clustering key
总结
data modeling 的原则:
选择合适的partition key,尽量能够将data平均分配到整个cluster中。
提高查询速度,可以通过clustering key的正确设置。