Cassandra快速上手

Cassandra

1.特点介绍

面向列的NoSQL数据库有HBase。存储jsaon文本的NoSQL有 MongoDB。存储key-value键值对的有Redis。

关系型数据库:
在这里插入图片描述
非关系型数据库:
在这里插入图片描述
Cassandra是NoSQL数据库 , 是一个面向列的列存储数据库,特点如下:

  • 可以线性扩展, 通过增加群集中的节点数量提高吞吐量
  • 每个节点都有相同数据的副本,可容错, 每个节点是独立的,同时与其他节点互连。集群中的所有节点都扮演着相同的角色, 每个节点都可以接受读取和写入请求
  • 支持事务,诸如原子性,一致性,隔离和持久性(ACID)等属性。
  • 数据分发简单, 可以灵活地通过在多个数据中心复制数据来分发所需的数据。
  • 执行快速写入,可以存储数百TB的数据,而不会牺牲读取效率。

2.组成部分

Cassandra的主要组成部分主要有:

  • 节点(Node):Cassandra节点是存储数据的地方。

  • 数据中心(Data center):数据中心是相关节点的集合。

  • 集群(Cluster):集群是包含一个或多个数据中心的组件。

  • 提交日志(Commit log):在Cassandra中,提交日志是一个崩溃恢复机制。 每个写入操作都将写入提交日志。

  • 存储表(Mem-table):内存表是内存记录着最近所做的修改。 提交日志后,数据将被写入内存表。 有时,对于单列系列,将有多个内容表。

  • SSTable:SSTable在磁盘上记录着Cassandra所承载的绝大部分数据,当内容达到阈值时,它是从内存表刷新数据的磁盘文件。在SSTable内部记录着一系列根据键排列的一系列键值对

  • 布鲁姆过滤器(Bloom filter):这些只是快速,非确定性的,用于测试元素是否是集合成员的算法。 它是一种特殊的缓存。 每次查询后都会访问Bloom过滤器。

3.写操作/读操作

在写操作中,首先提交日志(Commit log)捕获每次写操作,接着将其存储在内存表(memtable)中。当内存表已满时,数据将被写入SSTable数据文件。 所有写入在整个集群中自动分区和复制。 Cassandra定期整合SSTables,丢弃不必要的数据。

在这里插入图片描述
在读操作中,Cassandra从mem-table中获取值,并通过bloom过滤器找到包含所需数据的适当SSTable。 每个SSTable都有一个Bloom Filter,以用来判断与其关联的SSTable是否包含当前查询所请求的一条或多条数据。如果是,Cassandra将尝试从该SSTable中取出数据;如果不是,Cassandra则会忽略该SSTable,以减少不必要的磁盘访问。

4.数据模型

提供了数据过期功能, 在数据插入期间,以秒为单位指定“ttl”值,这段时间后,数据会被自动清除

  • 集群: Cassandra按照环形格式将节点排列在集群中,并为它们分配数据。

  • 键空间(keyspace): 是Cassandra中数据的最外层容器,有三个属性:

    • 复制因子 - 它指定集群中的机器数量,将接收相同数据的副本。

    • 副本放置策略 -有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。

    • 列族 - 键空间是一个或多个列族的列表的容器。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。是一系列列的集合并且每一个列都会有一个key
      在这里插入图片描述
      列:是Cassandra的基本数据结构,具有三个值,即键或列名称,值和时间戳。

5.安装

python2.7 JDK8 Cassandra3.11.6

在配置conf时,不要自己写,去掉注释即可

6.基本操作

键空间

DURABLE_WRITES:使用此选项,可以指示Cassandra是否对当前KeySpace的更新使用commitlog

策略名称描述
SimpleStrategy为集群指定简单的复制因子。
NetworkTopologyStrategy使用此选项,可以单独为每个数据中心设置复制因子。
cassandra -R
cqlsh启动
//创建一个名为tutorial01的键空间,并使用简单策略,复制因子为3
CREATE KEYSPACE tutorial01 WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

//验证
DESCRIBE tutorial01;
//查看所有的键空间
DESCRIBE keyspace;

//使用键空间
use tutorial01;

//修改键空间tutorial01,使用网络拓扑策略,复制因子为1,禁用DURABLE_WRITES(持久写入)
//Cassandra中的键名称不能更改。
ALTER KEYSPACE tutorial01
	WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3}
	AND DURABLE_WRITES = false;

//删除键空间tutorial01
DROP KEYSPACE tutorial01;
表(列家族)
//使用键空间tutorial01,并创建表
USE tutorial01;
CREATE TABLE student(  
   student_id int PRIMARY KEY,  
   student_name text,  
   student_city text,  
   student_fees varint,  
   student_phone varint  
);
//验证
SELECT * FROM student;

//修改表,加入一列文本类型的student_email
ALTER TABLE student ADD student_email text;
//删除3列
ALTER TABLE student DROP (student_email, student_phone,student_fees);

//删除表
DROP TABLE student;
//验证
DESCRIBE COLUMNFAMILIES;

//向表中插入三行数据
INSERT INTO student (student_id,student_name,student_city)
	VALUES(1,'Maxsu','NY');
	if not exists;
INSERT INTO student (student_id,student_name,student_city)
	VALUES(2,'Jack','DC');
INSERT INTO student (student_id,student_name,student_city)
	VALUES(3,'kyle','LA');
//截断操作(删除表中所有数据)
TRUNCATE student;

//为student表中的student_name列创建索引,创建索引后可以通过索引进行查找
CREATE INDEX name ON student (student_name);

//批量操作增删改查
//1.添加两条数据;2.删除id为2的行;3.更新id为3的行的名字和城市
BEGIN BATCH
INSERT INTO student(student_id,student_name,student_city)
	values(4, 'Rose', 'DE');
INSERT INTO student(student_id,student_name,student_city)
	values(5, 'Green', 'SC');

UPDATE student SET student_name='Kid',student_city='GA' WHERE student_id=3;

DELETE student_fees FROM student WHERE student_id=2;
APPLY BATCH;
删除/读取补充
//删除student表中的指定行的指定列的数据
DELETE student_name FROM student WHERE student_id=2;

//读取表中指定的两列
SELECT student_id, student_name FROM student;
//读取student表中id为2的行
SELECT * FROM student WHERE student_id=2

7. CQL数据类

cassandra中集合类型不能做主键,不能建索引

  • set集合:用于存储一组元素的数据类型。集合的元素将按排序顺序返回。

  • 不允许null值,key重复会被更新

  • 使用列表中元素的索引来获取列表数据类型的值

    //创建
    CREATE TABLE data1 (name text PRIMARY KEY, phone set<varint>);
    //插入值
    INSERT INTO data1 (name, phone) VALUES ('aa',{12345,54321});
    //向set集合中添加
    UPDATE data1
       ... SET phone = phone + {9848022330}
       ... where name = 'aa';
    //删除指定元素
    UPDATE data1 set phone=phone-{12345} where name='aa';
    
  • Map集合:用于存储元素的键值对的数据类型。

    //创建
    CREATE TABLE data2 (name text PRIMARY KEY, address map<timestamp,text>);
    //插入值
    INSERT INTO data2 (name, address)
       VALUES ('bb', {'home' : 'nanjing' , 'office' : 'suning' } );
    //向Map集合中添加
    UPDATE data2
       ... SET address = address+{'office':'xiaomi'}
       ... WHERE name = 'bb';
    //删除指定元素
    delete address[‘office’] from data2 where name = 'bb‘;
    
    //嵌套map
    complex map<text,frozen<map<text,text>>>
    
  • list集合:将保持元素的顺序,并且值将被多次存储。

  • 不允许null值,key重复会被更新

    //创建
    CREATE TABLE data3 (name text PRIMARY KEY, email list<text>);
    //插入值
    INSERT INTO data3 (name, email) VALUES ('cc',
    ['abc@gmail.com','cba@yahoo.com'])
    //向列表中添加
    UPDATE data3
    	... SET email = email +['xyz@gmail.com','xyz@qq.com']
    	... where name = 'cc';
    //删除指定元素
      UPDATE data3 set phone=phone-['xyz@qq.com'] where name='cc';	
    

    【注】: Cassandra 会按照set内数据类型进行排序返回查询结果,如果希望按照插入序返回结果,请使用list.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值