Cassandra介绍与使用
来源:互联网 发布:jdbc.properties mysql 编辑:程序博客网 时间:2024/05/16 21:10
介绍
Apache Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩放性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
它是一个开源的、分布式、无中心、支持水平扩展、高可用的KEY-VALUE类型的NOSQL数据库。
官网文档地址http://cassandra.apache.org/doc/latest/
版本
Apache Cassandra,目前最新版3.0.13
DataStax Community Edition(基于Apache Cassandra,推荐使用)
- 支持yum、rpm快速安装
- yum安装升级方便
- 目录环境自动配置
- 方便与OpsCenter结合
CQL开发工具-DevCenter
运维工具-OpsCenter
DataStax是针对Cassandra进行商业化运作的公司。
系统架构
由亚马逊的Dynamo与Google 的BigTable两部分组成。
一致性
什么叫数据库的一致性?读操作一定会返回最新写入的结果。
Cassandra是最终一致性(弱一致性):成功写入后,读取的并不一定是最新数据,但过一段时间(毫秒级别,跨机房时间会更长)所有副本才会达成一致。
Cassandra是最终一致性原因:优化写入性能,支持ONE、Qurum、ALL等。
Cassandra支持致性调节:当要求成功写入节点数与副本数一致时,即ALL时,认为是强一致性的。
CAP理论
CAP理论指出在一个分布式系统中,你只能强化其中两个方面
- Consistent:一致性,每次读取都是最新的数据
- Available:可用性,客户端总是可以读写数据
- Partition Tolerant:分区耐受性,数据库分散到多台机器,即使某台机器故障,也可以提供服务
编程驱动
DataStax Java Driver for Apache Cassandra是Apache Cassandra的一个Java驱动。它支持Cassandra Query Language version 3(CQL3)和Cassandra的二进制协议。它主要包括以下模块。
- driver-core:核心层
- driver-mapping:对象映射
- driver-extras:JAVA驱动的可选特性
- driver-examples
- driver-tests
驱动文档地址http://docs.datastax.com/en/developer/java-driver/3.0/
关系数据库对比
Cassandra概述与数据模型设计https://wenku.baidu.com/view/8eaabe6987c24028915fc386.html
DB-Engine数据库排名https://db-engines.com/en/ranking
HBase位于15名。
数据类型
查询语言(CQL)
如果有不熟悉命令的,进行cqlsh
命令行模式后,输入help
进行查看支持的命令。
数据类型
CQL是一种类似SQL的查询语言,它支持相当丰富的数据类型,如下。 cql_type ::= native_type | collection_type | user_defined_type | tuple_type | custom_type
native_type
native_type ::= ASCII | BIGINT | BLOB | BOOLEAN | COUNTER | DATE | DECIMAL | DOUBLE | DURATION | FLOAT | INET | INT | SMALLINT | TEXT | TIME | TIMESTAMP | TIMEUUID | TINYINT | UUID | VARCHAR | VARINT
数据库数据类型与JAVA数据类型的映射关系。
创建keyspace
Cassandra的存储抽象结构和数据库一样,keyspace对应关系数据库的database或schema,column family对应于table。
示例如下: CREATE KEYSPACE iotstp WITH replication = {'class': 'SimpleStrategy','replication_factor': 1};
其它操作
ALTER KEYSPACE iotstp WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4};use iotstp;DROP KEYSPACE iotstp;
查看当前有哪些keyspace使用命令desc keyspaces
。
创建Table
创建示例如下:
CREATE TABLE IF NOT EXISTS iotstp.user ( id timeuuid, tenant_id timeuuid, email text, additional_info text, PRIMARY KEY (id, tenant_id));
修改示例:
alter_table_statement ::= ALTER TABLE table_name alter_table_instructionalter_table_instruction ::= ADD column_name cql_type ( ',' column_name cql_type )* | DROP column_name ( column_name )* | WITH options
ALTER TABLE iotstp.user ADD address varchar;ALTER TABLE iotstp.user WITH comment = 'A most excellent and useful table' AND read_repair_chance = 0.2;
删除表
drop_table_statement ::= DROP TABLE [ IF EXISTS ] table_name
清空表
truncate_statement ::= TRUNCATE [ TABLE ] table_name
查看当前有哪些table使用命令desc tables
。
数据操作
select查询
select_statement ::= SELECT [ JSON | DISTINCT ] ( select_clause | '*' ) FROM table_name [ WHERE where_clause ] [ GROUP BY group_by_clause ] [ ORDER BY ordering_clause ] [ PER PARTITION LIMIT (integer | bind_marker) ] [ LIMIT (integer | bind_marker) ] [ ALLOW FILTERING ]select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] )selector ::= column_name | term | CAST '(' selector AS cql_type ')' | function_name '(' [ selector ( ',' selector )* ] ')' | COUNT '(' '*' ')'where_clause ::= relation ( AND relation )*relation ::= column_name operator term '(' column_name ( ',' column_name )* ')' operator tuple_literal TOKEN '(' column_name ( ',' column_name )* ')' operator termoperator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEYgroup_by_clause ::= column_name ( ',' column_name )*ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
SELECT name, occupation FROM users WHERE userid IN (199, 200, 207);SELECT JSON name, occupation FROM users WHERE userid = 199;SELECT name AS user_name, occupation AS user_occupation FROM users;SELECT time, valueFROM eventsWHERE event_type = 'myEvent' AND time > '2011-02-03' AND time <= '2012-01-01'SELECT COUNT (*) AS user_count FROM users;
insert插入
insert_statement ::= INSERT INTO table_name ( names_values | json_clause ) [ IF NOT EXISTS ] [ USING update_parameter ( AND update_parameter )* ]names_values ::= names VALUES tuple_literaljson_clause ::= JSON string [ DEFAULT ( NULL | UNSET ) ]names ::= '(' column_name ( ',' column_name )* ')'
INSERT INTO NerdMovies (movie, director, main_actor, year) VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) USING TTL 86400;INSERT INTO NerdMovies JSON '{"movie": "Serenity", "director": "Joss Whedon", "year": 2005}';
update更新
update_statement ::= UPDATE table_name [ USING update_parameter ( AND update_parameter )* ] SET assignment ( ',' assignment )* WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ]update_parameter ::= ( TIMESTAMP | TTL ) ( integer | bind_marker )assignment ::= simple_selection '=' term | column_name '=' column_name ( '+' | '-' ) term | column_name '=' list_literal '+' column_namesimple_selection ::= column_name | column_name '[' term ']' | column_name '.' `field_namecondition ::= simple_selection operator term
UPDATE NerdMovies USING TTL 400 SET director = 'Joss Whedon', main_actor = 'Nathan Fillion', year = 2005 WHERE movie = 'Serenity';UPDATE UserActions SET total = total + 2 WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 AND action = 'click';
delete 删除
delete_statement ::= DELETE [ simple_selection ( ',' simple_selection ) ] FROM table_name [ USING update_parameter ( AND update_parameter )* ] WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ]
DELETE FROM NerdMovies USING TIMESTAMP 1240003134 WHERE movie = 'Serenity';DELETE phone FROM Users WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14);
更新与删除只支持按主键进行,意思是where关键字后面必须携带主键字段。
物化视图(Materialized Views)
安装
datastax社区版
如果采用datastax社区免费版本,则下载地址https://academy.datastax.com/planet-cassandra//cassandra/,我下载的为windows 3.0.9版本。
配置
当cassandra安装好后,配置文件放在安装目录的conf目录下,如我的机器中F:\Program Files\DataStax Community\apache-cassandra\conf
,配置文件名为cassandra.yaml
,主要关注以下两部分。
- Main runtime properties(主要的cassandra运行时属性)
a) cluster_name:集群名,同一集群的多个节点,集群名要一致
b) seeds: 种子节点,集群中的全部机器的ip,以逗号隔开
c) storage_port: Cassandra服务器与服务器之间连接的端口号,一般不需要修改,但要保证此端口上没有防火墙
d) listen_address: Cassandra集群中服务器与服务器之间相互通信的地址。如果留空,将默认使用服务器的机器名
e) native_transport_port: 默认的CQL本地服务端口,本地的cql客户端与服务器交互的端口
- Changing the location of directories(相关的文件目录)
a) data_file_directories: 数据文件存放的目录,一个或多个
b) commitlog_directory: 提交信息的日志文件存放的目录
c) saved_caches_directory: 缓存存放的目录
apache
下载地址http://cassandra.apache.org/download/
- Cassandra介绍与使用
- cassandra简单介绍与基本操作
- cassandra使用
- Cassandra 入门介绍
- Cassandra原理介绍
- cassandra 并发技术介绍
- Cassandra Secondary Index 介绍
- Cassandra 入门介绍
- Cassandra概要介绍
- Cassandra概要介绍
- Cassandra之jdbc-cassandra使用笔记
- Cassandra学习笔记 --- cassandra-driver使用
- Cassandra安装与配置
- hbase与cassandra比较
- Cassandra与Hadoop整合
- cassandra与hadoop整合
- Cassandra部署与安装
- Cassandra内核介绍--写操作
- Leaflet的make(图标)点击事件的绑定,并且附加其他信息
- MTK LCD屏幕做偏的解决办法(软件)
- NGINX 添加响应头
- android studio 混淆编译注意
- Java学习之定时器
- Cassandra介绍与使用
- svn 服务连接失败
- 解决selenium无法运行testng文件问题
- c3p0数据库连接池的使用详解
- PCM分析及音量控制
- VirtualBox虚拟机启动报错
- js 获取输入的首字母拼音
- linux修改root用户密码
- Unity VR简单操作原理方法