Minh họa sử dụng Cassandra
CQLSH là shell tiêu chuẩn để tương tác với Cassandra thông qua CQL. CQL rất giống với SQL, điều đó giúp những người mới sử dụng Cassandra có thể làm quen với nó một cách nhanh chóng. CQLSH đi kèm với mỗi gói Cassandra và sẽ được cài một cách tự động trên máy của bạn khi bạn.
1. Hoạt động
trên Keyspace
Khởi động cqlsh
Sử dụng cqlsh như hình dưới đây để khởi động. Khi khởi động cqlsh, nếu
không truyền địa chỉ IP và port của node muốn connect tới thì lệnh sẽ tự động
truyền giá trị mặc định (IP mặc định là localhost, port mặc định là 9042).
bean@ubuntu:~$ cqlsh
Tạo Keyspace
Sử dụng lệnh CREAT KEYSPACE để tạo keyspace. Cú pháp như sau
CREATE KEYSPACE <identifier> WITH
<properties>
Ví dụ: Tạo một keyspace có tên là tutorial với các tùy chọn class :
SimpleStrategy và replication_factor bằng 3.
cqlsh> CREATE KEYSPACE tutorial
... WITH replication = {'class':'SimpleStrategy',
'replication_factor':3};
Để xác minh xem keyspace có được tạo hay
không, ta dùng lệnh DESCRIBE KEYSPCAE. Kết quả hiển thị tất cả keyspace có
trong cơ sở dữ liệu.
cqlsh> DESCRIBE KEYSPACES;
Lưu ý rằng khi tạo Keyspace, có một thuộc
tính khác là durable_writes, thuộc tính này quyết định xem Cassandra có sử dụng
commitlog cho các bản cập nhật trên Keyspace được tạo ra hay không. Theo mặc định,
tùy chọn này có giá trị true.
Sử dụng Keyspace
Sử dụng Keyspace đã tạo bằng từ khóa USE.
Cú pháp như sau
USE <identifier>
Ví dụ để sử dụng Keyspace có tên tutorial
đã tạo ở phần trước ta dùng lệnh như sau
cqlsh> USE tutorial;
Thay đổi Keyspace
ALTER KEYSPACE được sử dụng để thay đổi các
thuộc tính như replication_factor hay durable_writes của Keyspace. Cú pháp
ALTER KEYSPACE <identifier> WITH
<properties>
Ví dụ: Thay đổi Keyspace có tên tutorial,
chỉ số replication_factor thành 5.
cqlsh> ALTER KEYSPACE tutorial WITH
replication = {'class':'SimpleStrategy', 'replication_factor':5};
Để kiểm tra thay đổi, ta xem bảng keyspaces
trong keyspace system_schema
Xóa bỏ Keyspace
DROP KEYSPACE <identifier>
Ví dụ:
cqlsh> DROP KEYSPACE tutorial;
2. Hoạt động trên Column Family (Table)
Tạo Column Family
Tạo một Column Family có tên employee trong
keyspace tutorial, gồm các cột id, name, city, phone, salary trong đó id là
khóa chính.
cqlsh> USE tutorial;
cqlsh:tutorial> CREATE
COLUMNFAMILY employee (
... id int PRIMARY KEY,
... name text,
... city text,
... salary varint,
... phone varint
... );
Chỉnh sửa Column Family (thêm, xóa cột)
Dưới đây là lệnh thêm một cột có tên
là newcolumn vào bảng employee sau đó lại xóa cột đó đi.
cqlsh:tutorial> ALTER
COLUMNFAMILY employee
... ADD newcolumn text;
cqlsh:tutorial> SELECT * FROM
employee;
id | city | name | newcolumn | phone | salary
----+------+------+-----------+-------+--------
(0 rows)
cqlsh:tutorial> ALTER
COLUMNFAMILY employee DROP newcolumn;
cqlsh:tutorial> SELECT * FROM
employee;
id | city | name | phone | salary
----+------+------+-------+--------
(0 rows)
Xóa Column Family
Tạo một Column Family mới có tên là temp
sau đó lại xóa nó đi.
cqlsh:tutorial> CREATE
COLUMNFAMILY temp (
... tempid int PRIMARY KEY );
cqlsh:tutorial> DESCRIBE
COLUMNFAMILIES;
employee temp
cqlsh:tutorial> DROP
COLUMNFAMILY temp;
cqlsh:tutorial> DESCRIBE
COLUMNFAMILIES;
employee
Thêm, sửa, xóa, truy xuất dữ liệu
Dưới đây là ví dụ về
thêm, sửa, xóa, truy xuất dữ liệu trong Column Family employee vừa tạo.
Thêm dữ liệu
cqlsh:tutorial> INSERT INTO
employee (id, city, name, phone, salary)
... VALUES (1, 'Ha Noi', 'X', 123456,
10000);
cqlsh:tutorial> SELECT * FROM
employee;
id |
city | name
| phone | salary
----+--------+-------+--------+--------
1 | Ha Noi | X | 123456 | 10000
Sửa dữ liệu
cqlsh:tutorial> UPDATE employee
... SET city = 'Ho Chi Minh',
salary = 50000
... WHERE id = 1;
cqlsh:tutorial> SELECT * FROM
employee;
id | city | name
| phone | salary
----+-------------+-------+--------+--------
1 | Ho Chi Minh |X| 123456
| 50000
Xóa dữ liệu trong một cột
cqlsh:tutorial> DELETE salary
FROM employee WHERE id = 1;
cqlsh:tutorial> SELECT * FROM
employee;
id | city | name
| phone | salary
----+-------------+-------+--------+--------
1 | Ho Chi Minh | X | 123456 |
null
Xóa toàn bộ dữ liệu hàng
cqlsh:tutorial> DELETE FROM
employee WHERE id = 1;
cqlsh:tutorial> SELECT * FROM
employee;
id | city | name | phone | salary
----+------+------+-------+--------
Tạo, xóa chỉ mục
Tạo chỉ mục cho cột city trong column family employee rồi xóa chỉ mục đó.
cqlsh:tutorial> CREATE INDEX
city_key ON employee (city);
cqlsh:tutorial> DROP INDEX
city_key;
3. CQL Collections
CQL cung cấp phương tiện sử dụng kiểu dữ liệu
collection. Sử dụng các loại collection, ta có thể lưu trữ nhiều giá trị trong
một biến duy nhất.
3.1. List
LIST: Kiểu dữ liệu lưu trữ một chuỗi các phần tử theo thứ tự chèn của phần tử, cho phép trùng lặp giá trị của phần tử trong cùng một list.
Tạo một bảng mới có tên student gồm
các cột name, email trong đó email có kiểu list.
cqlsh:tutorial> CREATE TABLE
student (
... name text PRIMARY KEY,
... email list<text> );
Thêm dữ liệu vào trong bảng mới tạo, do cột
email thuộc kiểu list nên ta có thể gán giá trị cho cột này là một mảng các
email.
cqlsh:tutorial> INSERT INTO
student (name, email)
... VALUES ('X',
['abc@gmail.com', 'bca@gmail.com']);
cqlsh:tutorial> SELECT * FROM
student;
name |
email
-------+------------------------------------
X | ['abc@gmail.com', 'bca@gmail.com']
Cập nhật thêm một email khác vào cột email
cqlsh:tutorial> UPDATE student
... SET email = email +
['xyz@yahoo.com']
... WHERE name = 'X';
cqlsh:tutorial> SELECT * FROM
student;
name |
email
-------+-----------------------------------------------------
X | ['abc@gmail.com', 'bca@gmail.com', 'xyz@yahoo.com']
3.2. Set
SET: Tương tự LIST nhưng khác ở chỗ các phần tử thuộc SET không được lưu trữ theo trình tự thêm vào SET. Mặt khác, SET không cho phép trùng lặp giá trị.
Tạo bảng với SET và thêm dữ liệu. Có thể thấy rằng tuy phần tử 122 được
thêm vào sau cùng nhưng lại xếp đầu tiên trong phone. Như vậy cho thấy SET
không lưu trữ phần tử theo thứ tự thêm vào mà theo giá trị của chúng.
cqlsh:tutorial> CREATE TABLE
teacher ( name text PRIMARY KEY, phone set<varint> );
cqlsh:tutorial> INSERT INTO
teacher (name, phone) VALUES ('X', {123, 321, 122});
cqlsh:tutorial> SELECT * FROM
teacher;
name |
phone
-------+-----------------
X | {122, 123, 321}
Cập nhật dữ liệu. Thử thêm một phần tử đã có trong SET, SET không thay đổi
– SET không cho phép phần tử trùng lặp.
cqlsh:tutorial> UPDATE teacher
SET phone = phone + {122} WHERE name = 'X';
cqlsh:tutorial> SELECT * FROM
teacher;
name | phone
-------+---------------------
X | {122, 123, 321}
3.3. Map
MAP: Map là kiểu dữ liệu lưu trữ một tập các phần tử có định dạng key – value.
Tạo một bảng mới có cột định dạng kiểu dữ liệu MAP. Cột address gồm các
phần tử có định dạng key – value (time – address).
cqlsh:tutorial> CREATE TABLE data
( name text PRIMARY KEY, address map<text, text> );
cqlsh:tutorial> INSERT INTO data
(name, address) VALUES ('X', {'10AM' : 'home', '2PM' : 'school'});
cqlsh:tutorial> SELECT * FROM data;
name |
address
-------+-----------------------------------
X | {'10AM': 'home', '2PM': 'school'}
Cập nhật dữ liệu.
cqlsh:tutorial> UPDATE data
... SET address = address + {'6PM'
: 'bus'}
... WHERE name = 'X';
cqlsh:tutorial> SELECT * FROM
data;
name |
address
-------+-------------------------------------------------
X | {'10AM': 'home', '2PM': 'school',
'6PM': 'bus'}
Nhận xét
Đăng nhận xét