1. CQL
Cassandra Query Language (CQL)
数据类型
-
built-in 数据类型
其中需要说明的是Blob数据类型,它是二进制数据集合,可以用来存储image or short string,容量限制1MB -
Collection 数据类型
举个例子,一个人有好几个邮箱,在关系型数据库中,我们使用many-one连接users和email两个tables, 但是在Cassandra中,我们直接将多个邮箱作为collection结构存放在user table中。- lists:order of the elements needs to be maintained
- maps:key-values
- sets:unique and do not need to be stored in a specific order
-
User-Defined数据类型
for one-to-one
就像c语言中的struct
举个例子:
2. keyspaces
需要在创建table之前定义
keyspaces可以包含多个tables,一个table只属于一个keyspace
创建keyspace需要指定replication factor
语法
其中,replication factor表示要复制到的节点群名字以及复制的个数。
replication strategy表示复制的策略,决定具体复制到哪个节点中。
所有的replicas都同样重要。
通常,复制的个数,不应该超过cluster中包含的node个数。
举例:
- 创建keyspaces
CREATE KEYSPACE training WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
- 查看所有keyspaces
describe keyspaces
- 查看某个keyspaces < training>
describe training
- 修改keyspaces
alter复制个数的时候,需要带上classALTER KEYSPACE training WITH replication = {'class': 'NetworkTopologyStrategy'};
- 使用keyspace
use training
- 列出这个keyspace下面所有的table
describe tables
- 删除keyspace
drop keyspace training
3. table 操作
- 在cassandra,数据被组织在table中
- table的metadata需要指定primary key——指导如何分布将table data分布到cluster and node level,创建之后不可以被修改
- 可以在table level添加TTL(Time-To-Live)——说明多长时间之后,这个table将会删除掉
- 整体的语法和sql DDL定义table部分很像,create,alter, truncate, drop
举个例子
- 创建table
use training; CREATE TABLE movies( movie_id int PRIMARY KEY, movie_name text, year_of_release int );
- 查看全部tables:
describe tables
- 查看table < movies>:
describe movies
输出结果:CREATE TABLE training.movies ( movie_id int PRIMARY KEY, movie_name text, year_of_release int ) WITH bloom_filter_fp_chance = 0.01 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 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 AND speculative_retry = '99PERCENTILE';
- 添加一列actor,数据类型为text:
ALTER TABLE movies ADD actor text;
- 删除actor 列:
ALTER TABLE movies drop actor;
- 删除该table:
drop table movies;