cassandra数据库

配置java环境

#下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-8u91-linux-x64.tar.gz

tar -xzf  jdk-8u91-linux-x64.tar.gz  ; mkdir -p /usr/java/ ; mv jdk1.8.0_25/ /usr/java/jdk1.8

#然后配置环境变量,这样可以任何地方引用jdk,如下配置:

#vi /etc/profile 最后面加入以下语句:

export JAVA_HOME=/usr/java/jdk1.8

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

#source /etc/profile   #使环境变量马上生效

#java -version    #查看java版本,看到jdk1.8.0版本即代表java安装成功。

 

搭建cassandra

tar xf apache-cassandra-3.11.4-bin.tar.gz  && mv apache-cassandra-3.11.4 /usr/local/cassandra

cd /usr/local/cassandra/bin/ && ./cassandra -R

 

启动cql客户端

python cql.sh

keyspace键空间操作 keyspace名不超过32个字符

create keyspace ks1 with replication = { 'class':'SimpleStrategy','replication_factor':1 }; 创建 with后接键空间属性,class:复制协议 replication_factor 几个副本

alter keyspace ks1 with replication = { 'class':'SimpleStrategy','replication_factor':2 }; 修改

desc keyspace ks1; 查询键空间结构

drop keyspace ks1; 删除

 

cql创建

创建列族 table 列族名不超过32字符

create table testtable( name text, age int, profile text, PRIMARY KEY (name), );  text为strings PRIMARY KEY指定主键

desc table testtable; 查看列族结构

alter table testtable with comment='test'; 修改列族属性 comment描述信息

alter table testtable add sex text; 添加列

alter table testtable drop sex; 删除列

drop table testtable; 删除列族

 

创建index 第二索引

create table student(orderid int,name text,age int,sex text,primary key(orderid));

create index on student(name); 对student 的name创建作为第二索引

desc table student;  注释:CREATE INDEX student_name_idx ON ks1.student (name);  student_name_idx即为默认索引名

drop index student_name_idx; 删除第二索引

 

创建自定义数据类型

create type address(country text,provinace text,city text,road text);

desc type address; 查看自定义数据类型

alter type address add roomno int; 修改增加列

drop type address; 删除自定义数据类型

 

cql操作

insert into student(name,age,orderid,sex) values('zhangshan',20,10001,'man');

select * from student; 查询是否插入

update student set name='lisi' where orderid=10001; 修改数据

delete age from student where orderid=10001; 删除age的value数据 但age列不删除

delete from student where orderid=10001;  删除orderid=10001整行数据

 

cql查询操作

insert into student(name,age,orderid,sex) values('zhangshan',20,10001,'man');

desc student;

select * from student where orderid=10001;  primary-key 可以作为where查询条件

 

select * from student where name='zhangshan'; 会报错 提示使用第二索引或 ALLOW FILTERING

create index on student(name);

select * from student where name='zhangshan';

 

select count(*) from student; 统计查询到有多少行数据

select count(*) as totalrow from student; 给输出显示的count起一个别名totalrow

 

map和复合主键

create table scores(name text,score map<text,int>,orderid int, primary key(orderid,name));  name和orderid都为主键

select * from scores where name=' ' allow filtering; 复合主键除了第一个主键之外使用其他主键作为where查询条件会报错,除非加上allow filtering

 

insert into scores(name,orderid,score) values ('zhanshan',10001,{'yuwen':89,'shuxue':99});  

score map<text,int>  map表示score的value为 key(text): value(int)

 

contains条件 包含的意思 包含这个关键字的都查出来

insert into scores(name,orderid,score) values ('lisi',10002,{'yuwen':89,'shuxue':99,'yinyu':100});

create index on scores(keys(score)); map数据类型键作为索引 将score的关键字作为索引

select * from scores where score contains key 'yinyu';  查询score列包含key里面含有yinyu关键字的数据

 

in条件查询 in里面含有的都查出来

select * from scores where orderid in (10001,10002);

 

更多cql语法查询:https://www.w3cschool.cn/cassandra/

 

主配置文件解读

vim cassandra.yaml

cluster_name: 'Test Cluster' 集群名字,即当前节点在cassandra集群中叫什么名字,每个节点集群名不一样

listen_address: localhost 集群监听地址,一般0.0.0.0

seed_provider  需要联系的节点地址

storage_port: 7000  节点间通讯端口

native_transport_port: 9042 本地客户端通信端口

data_file_directories 数据文件的存放目录

commitlog_directory  commitlog保存路径

commit_failure_policy 提交失败时采取的策略

disk_failure_policy 磁盘故障策略

rpc_address: localhost 监听客户端连接的地址

 

nodetool运维工具

./nodetool version 查看cassandra版本

./nodetool status 查看节点状态

./nodetool stopdaemon 关闭cassandra服务

./nodetool clearsnapshot 删除所有快照 删除之前把所有有用的快照移到别的目录

./nodetool -h 127.0.0.1 netstats 查看节点网络连接信息

./nodetool compact 合并sstable文件

./nodetool compactionstats 显示压缩进度

./nodetool upgradesstables -a  更新sstable

./nodetool snapshot -t NAME  为键空间或列族创建快照 -t 指定快照名,不指定以当前时间戳作为快照名

./nodetool clearsnapshot -t SNAPSHOTNAME 指定要删除快照的名字 不指定清理全部快照

./nodetool refresh +keyspace +TABLENAME  加载新的sstable文件到集群中 恢复快照

./nodetool decommission 关闭当前节点,并把数据复制到环中紧邻的下一个节点

./nodetool describecluster 描述集群信息

./nodetool describering +KEYSPACE_NAME  显示圆环的节点信息

./nodetool drain 把memtable中的数据刷新sstable,并且当前节点会终止与其他节点的联系,执行完这条命令需要重启节点,一般在cassandra版本升级的时候才使用这条命令

./nodetool flush 单纯的把memtable中的数据刷新到sstable,不需要重启节点

./nodetool getendpoints 查看key分布在哪个节点上,需要三个参数: keyspace_name,table_name,key_name

./nodetool getsstables 查看key分布在哪一个sstable上,需要三个参数:keyspace_name,table_name,key_name

./nodetool rebuild 当有新的数据中心加入,运行该命令复制数据到新数据中心

./nodetool repair 在删除数据时候,cassandra并非真实的删除,而是重新插入一条数据,记录了删除的记录的信息和时间,叫做tombstone墓碑。使用nodetool repair,可以删除tombstone数据。频繁修改的数据节点可以使用这个命令节省空间,提高读速度

./nodetool tpstats 列出cassandra维护的线程池的信息,可以看到每个阶段的操作,以及他们的状态是活动中,等待还是完成

./nodetool cfstats 列族名 -H   查看表的一些信息,包括读的次数,写的次数, sstable的数量,memtable信息,压缩信息,bloomfilter信息

./nodetool cleanup 清理不需要的keyspace,当新增的数据节点或减少数据节点时,数据会重新分发,可以运行这个命令,清除不再分布在这个节点上的keyspace,唯一目的是为了节省磁盘空间

 

 

压力测试

tools/bin/cassandra-stress write -n=1000000 插入1000000数据

tools/bin/cassandra-stress read n=200000 读取200000数据

tools/bin/cassandra-stress read duration=3m 持续读取3分钟数据

 

列族参数

desc ks1.scores;

    AND bloom_filter_fp_chance = 0.01 指定bloom_filter算法的容错率,一般 0.01-0.1

    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 设置缓存方案

    AND comment = ''   描述信息

    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} 数据压缩策略

    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 数据压缩算法

    AND crc_check_chance = 1.0

    AND dclocal_read_repair_chance = 0.1

    AND default_time_to_live = 0 数据存活时间,0表示永久

    AND gc_grace_seconds = 864000

    AND max_index_interval = 2048 

    AND memtable_flush_period_in_ms = 0 内存数据刷新时间间隔

    AND min_index_interval = 128

AND read_repair_chance = 0.0  0-1之间的数值,与数据的一致性有关

AND speculative_retry = '99PERCENTILE';

上一篇:MySQL-数据库三范式


下一篇:【NServiceBus】什么是Saga,Saga能做什么