zoukankan      html  css  js  c++  java
  • 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), );  textstrings 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; 删除agevalue数据 但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));  nameorderid都为主键

    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表示scorevaluekey(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);

    cassandracql语言与传统关系数据库sql语言的相似对比

     

    更多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';

  • 相关阅读:
    24. Swap Nodes in Pairs
    23. Merge k Sorted Lists
    shell脚本报错:"[: =: unary operator expected"
    一种用 数组元素 指定 所调函数 的方法
    阻塞 非阻塞
    Linux open() 一个函数,两个函数原型
    QT 执行windows cmd 命令并读取结果
    Qt5 escape spaces in path
    获取磁盘的 总容量,空余容量,已用容量 【windows】
    通过进程名称,获取其路径
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11780223.html
Copyright © 2011-2022 走看看