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

Bài đăng phổ biến từ blog này

Mô hình dữ liệu trong Cassandra

Các loại cấu trúc liên kết mạng (Network Topology)