Cassandra
简介
以Amazon Dynamo为最初的模仿对象,结合Google Big Table基于列族的数据模型,NoSQL产品;
Cassandra集群是无中心化结构,每个一个节点的角色几乎相同,不过有“种子服务器”的概念(当一个新的节点加入集群,需要寻找种子服务器)。即使一个节点宕机也能正常运作整个集群,缺点是性能差(信息交流付出代价大)。集群高可用、支持热替换故障节点,支持多数据中心,可调节一致性(参数控制);
安装过程
略
数据模型
列族(集合):
实例:
超级列族:
从顶向下描述Cassandra模型
1. 集群(cluster)
2.Keyspaces
集群是Keyspace的容器;
Keyspace是数据的最外层容器(类似Oracle的表空间Table Space概念);
System Keyspcae(系统运作用到的数据使用和维护);
副本因子(当建立了Keyspace后可以指定副本因子,当存放数据时,这段数据会复制多少份到多少个节点,可用空间减少,数据安全性提高);
副本放置策略(在不同的服务器中、不同机房等如果放置副本);
3.列族和列
Keyspace是列族的容器,列族类似于Oracle中的表;
列族需要在Keyspace中预先定义;
列族选项;
列是最基本的数据结构单元,列是不预先定义,可以每一行都不一样;
列数据结构:
超级列:
例子:
指定一个超级列时的层级:
基本语法
create keyspace test;// 创建Keyspcae
show keyspaces;// 展示所创建的Keyspace
use test;// 使用test这Keyspace
create column family users;// 创建名为users的列族
show schema;// 展示当前Keyspace有哪些模式
drop column family users;// 删除列族
create column family users
with column_type = 'Stendard'
and comparator = 'UTF8Type'
and defualt_validation_class = 'UTF8Type'
and key_validation_class = 'UTF8Type'// 创建名为users的列族及定义
set users[lew1sss][age]=18 // 插入列族users一个行 行为lew1sss 列为age=8
get users[lew1sss]// 查询列族users的lew1sss行
list users;// 列出列族所有的行
与关系型数据库的设计差别
很弱的查询语言(使用cqlsh支持类似sql语法的shell);
不支持表间连接;
没有外键的概念;
第二索引;
排序也是设计策略;
反范式化设计;
场景应用
- 关系型数据库建模
- Cassandra建模
集群安装
略
集群机制
一致性哈希(控制数据分布在哪些节点)
image-20200223011648804.pngGossip协议
用于在环内节点之间传播状态信息;
周期运行,每次在环中随机挑选一个对象节点,发起会话;
每次绘画传送三条消息;
Phi增量故障监测算法;
网友评论