1. 目的
在本章中,将了解Cassandra CURD操作:创建,更新,读取和删除,将介绍Cassandra中每个CURD操作的语法和示例。
2. 什么是Cassandra CURD操作
Cassandra CURD Operation代表Create,Update,Read和Delete 操作。 这些操作用于操纵Cassandra中的数据。
创建操作 (Create Operation)
创建表
创建新表使用CREATE TABLE语句, 语法如下所示:
create_table_statement ::= CREATE TABLE [ IF NOT EXISTS ] table_name '(' column_definition ( ',' column_definition )* [ ',' PRIMARY KEY '(' primary_key ')' ] ')' [ WITH table_options ] column_definition ::= column_name cql_type [ STATIC ] [ PRIMARY KEY] primary_key ::= partition_key [ ',' clustering_columns ] partition_key ::= column_name | '(' column_name ( ',' column_name )* ')' clustering_columns ::= column_name ( ',' column_name )* table_options ::= COMPACT STORAGE [ AND table_options ] | CLUSTERING ORDER BY '(' clustering_order ')' [ AND table_options ] | options clustering_order ::= column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*
代码示例如:
CREATE TABLE loads ( machine inet, cpu int, mtime timeuuid, load float, PRIMARY KEY ((machine, cpu), mtime) ) WITH CLUSTERING ORDER BY (mtime DESC);
添加数据
用户可以使用Cassandra CURD操作将数据插入表中。 数据存储在表格中一行的列中。 使用INSERT命令,用户可以执行此操作:
INSERT INTO <table name> (<column1>,<column2>....) VALUES (<value1>,<value2>...) USING<option>
创建一个表数据来说明添加数据操作。 示例包含一个表格,其中包含有关大学学生的信息。 下表将提供有关学生的详细信息:
cqlsh:keyspace1> INSERT INTO student(en, name, branch, phone, city) VALUES(001, ‘Ayush’, ‘Electrical Engineering’, 9999999999, ‘Boston’); cqlsh:keyspace1> INSERT INTO student(en, name, branch, phone, city) VALUES(002, ‘Aarav’, ‘Computer Engineering’, 8888888888, ‘New York City’); cqlsh:keyspace1> INSERT INTO student(en, name, branch, phone, city) VALUES(003, ‘Kabir’, ‘Applied Physics’, 7777777777, ‘Philadelphia’);
插入数据后,数据如下:
更新操作
用户可以使用UPDATE命令进行更新操作,该语句使用下列关键词:
Where:此关键字将指定数据更新的位置。
Set:此关键字将指定更新的值。
Must:此关键字包含组成主键的列。
此外,在更新行时,如果行不可用,则Cassandra 将创建新行。
更新操作的语法:
UPDATE <table name> SET <column name>=<new value> <column name>=<value>... WHERE <condition>
示例如下:
cqlsh:keyspace1> UPDATE student SET city=’San Fransisco’ WHERE en=002;
读操作(Read Operation)
读取操作, 用户可以选择读取整个表或单个列。 要从表中读取数据,用户可以使用SELECT语句。
SELECT * FROM <table name>;
例如:
cqlsh:keyspace1> SELECT * FROM student;
读取选定的列 如下所示:
SELECT <column name1>,<column name2> .... FROM <table name>;
示例如下:
cqlsh:keyspace1> SELECT name,city FROM student;
删除操作
删除操作允许用户从表中删除数据。 用户可以使用DELETE命令进行此操作。
删除操作的语法:
DELETE <identifier> FROM <table name> WHERE <condition>;
如从”student”表中,删除003行;
cqlsh:keyspace1> DELETE phone FROM student WHERE en = 003;
3. Batch
通过BATCH语句对多个INSERT,UPDATE和DELETE进行分组并且进行Batch 操作,可以在单个语句中执行,语法如下:
batch_statement ::= BEGIN [ UNLOGGED | COUNTER ] BATCH [ USING update_parameter ( AND update_parameter )* ] modification_statement ( ';' modification_statement )* APPLY BATCH modification_statement ::= insert_statement | update_statement | delete_statement
例如:
BEGIN BATCH INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); DELETE name FROM users WHERE userid = 'user1'; APPLY BATCH;
BATCH语句将多个修改语句(插入/更新和删除)组合到一个语句中。它有几个好处:
在批量处理多个更新时,可以节省客户端和服务器之间的网络往返;
给定分区键的BATCH中的所有更新操作都是隔离执行的;
默认情况下,批处理中的所有操作都会被执行,以确保所有操作要么最终完成,要么不会被完成;
注意:
BATCH语句可能只包含UPDATE,INSERT和DELETE语句(例如,不包含其他Batch处理);
Batch处理不能类同与SQL语言中的事务;
如果未为每个操作指定时间戳,则将应用所有操作使用相同的时间戳;
对单个分区的LOGGED批处理将作为优化转换为UNLOGGED批处理;
UNLOGGED批次
默认情况下,Cassandra使用批处理日志来确保批处理中的所有操作最终完成,或者不会完成。
批处理跨越多个分区时,批处理原子性会受到性能损失。如果不想受到性能的影响,可以使用UNLOGGED选项来跳过批处理日志的处理。如果使用UNLOGGED选项,对于执行失败的Batch ,可能只有部分更新操作执行成功。