Khởi động Node CockroachDB ở chế độ Single-Node
Chạy lệnh khởi tạo với cờ --insecure
Chúng ta sẽ khởi động một instance CockroachDB độc lập trên localhost để phục vụ mục đích thử nghiệm và phát triển. Chế độ single-node sử dụng cờ --insecure để bỏ qua xác thực TLS, giúp quá trình setup nhanh chóng.
Chạy lệnh này trong terminal với quyền người dùng hiện tại (không cần sudo nếu đã cài đặt theo phần 2, nhưng cần quyền truy cập thư mục dữ liệu).
cockroach start-single-node --insecure --listen-addr=localhost:26257 --http-addr=localhost:8080 --store=/var/lib/cockroach
Khởi động thành công. Bạn sẽ thấy log output bắt đầu với dòng "node started" và "cluster started". Terminal sẽ bị giữ lại (blocking) bởi quá trình chạy.
Verify kết quả khởi động
Mở một terminal mới để kiểm tra trạng thái. Lệnh này sẽ cho biết node đã sẵn sàng chưa.
cockroach node status --insecure --host=localhost:26257
Kết quả trả về một bảng JSON hoặc text hiển thị liveness là alive và build_info khớp với phiên bản đang cài.
Truy cập CLI và Khởi tạo Cluster
Thực hiện lệnh Init Cluster
Trước khi có thể tạo database, cluster CockroachDB phải được khởi tạo (initialized) để xác định root user và cấu hình mặc định. Trong môi trường single-node, việc này rất nhanh.
Chạy lệnh init từ terminal mới (không phải terminal đang chạy service).
cockroach init --insecure --host=localhost:26257
Lệnh thực thi thành công sẽ hiển thị thông báo: "Successfully initialized new cluster!". Lúc này, user root đã tồn tại và có quyền quản trị toàn bộ.
Verify kết quả Init
Kiểm tra xem user root đã được tạo chưa bằng cách list user.
cockroach sql --insecure --host=localhost:26257 -e "SHOW USERS;"
Kết quả hiển thị một dòng duy nhất: root. Nếu thấy lỗi "cluster has not been initialized", hãy chạy lại lệnh init ở bước trên.
Tạo Database và Cấu trúc Row-Oriented
Định nghĩa Database mẫu
CockroachDB mặc định lưu trữ dữ liệu dưới dạng Row-Oriented (dòng) khi không có chỉ số phân vùng (Zones) đặc biệt hoặc Secondary Index phức tạp. Chúng ta sẽ tạo một database để chứa dữ liệu giao dịch mẫu.
Chạy lệnh tạo database và chuyển ngữ cảnh sang database đó.
cockroach sql --insecure --host=localhost:26257 -e "CREATE DATABASE ecommerce;"
Database ecommerce được tạo thành công. Không có lỗi báo về.
Tạo bảng với cấu trúc Row-Oriented tiêu chuẩn
Tạo bảng orders với các trường dữ liệu điển hình. Primary Key sẽ quyết định thứ tự lưu trữ vật lý (Row-Oriented storage engine của CockroachDB lưu các giá trị của một row liên tiếp nhau).
Chạy lệnh tạo bảng sau trong SQL shell hoặc qua lệnh -e.
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
product_name VARCHAR(255) NOT NULL,
quantity INT NOT NULL,
unit_price DECIMAL(10, 2) NOT NULL,
order_date TIMESTAMP DEFAULT now(),
status VARCHAR(50) DEFAULT 'pending'
);"
Bảng orders được tạo. Dữ liệu sẽ được lưu trữ theo thứ tự tăng dần của order_id (Primary Key) trên đĩa, đây là đặc trưng của mô hình Row-Oriented trong CockroachDB.
Verify cấu trúc bảng
Kiểm tra schema của bảng để đảm bảo các trường đã được định nghĩa đúng.
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "\d orders"
Hiển thị danh sách các cột, kiểu dữ liệu và ràng buộc (Primary Key, Not Null). Dòng order_id sẽ được đánh dấu là PRIMARY KEY.
Chèn dữ liệu và Kiểm tra Hiệu năng cơ bản
Chèn dữ liệu mẫu (Bulk Insert)
Để kiểm tra hiệu năng ghi (Write throughput) của mô hình Row-Oriented, chúng ta sẽ chèn một lượng lớn dữ liệu ngẫu nhiên vào bảng.
Sử dụng câu lệnh INSERT kết hợp với hàm generate_series để tạo 10,000 bản ghi một cách nhanh chóng.
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "
INSERT INTO orders (customer_id, product_name, quantity, unit_price, status)
SELECT
(random() * 1000)::INT,
'Product_' || (random() * 10000)::INT::TEXT,
(random() * 50)::INT + 1,
(random() * 1000)::DECIMAL(10,2),
CASE WHEN random() > 0.5 THEN 'shipped' ELSE 'pending' END
FROM generate_series(1, 10000);"
Lệnh thực thi xong và trả về thông báo INSERT 10000. Thời gian thực hiện trên máy ảo chuẩn (4 vCPU, 8GB RAM) thường dưới 2 giây.
Kiểm tra hiệu năng Đọc (Read Performance)
Thực hiện truy vấn chọn toàn bộ dữ liệu để kiểm tra tốc độ đọc hàng loạt (Scan) của engine Row-Oriented. Vì dữ liệu được lưu theo thứ tự Primary Key, đọc toàn bộ sẽ rất nhanh (sequential read).
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "SELECT COUNT(*) FROM orders;"
Kết quả trả về số nguyên 10000. Thời gian thực thi (latency) hiển thị ở dòng cuối cùng của terminal (ví dụ: 1 row (0.012 sec)).
Kiểm tra hiệu năng Đọc theo Primary Key (Point Query)
Thực hiện truy vấn tìm kiếm một record cụ thể theo Primary Key. Đây là trường hợp mạnh nhất của Row-Oriented, CockroachDB sẽ dùng B-Tree index để nhảy trực tiếp đến vị trí của row đó.
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "SELECT * FROM orders WHERE order_id = 5000;"
Kết quả trả về đúng 1 dòng dữ liệu với order_id là 5000. Thời gian thực thi thường ở mức 0.005 sec hoặc thấp hơn.
Verify toàn bộ dữ liệu
Xuất ra 5 dòng đầu tiên để xác nhận dữ liệu đã được lưu trữ và hiển thị đúng định dạng.
cockroach sql --insecure --host=localhost:26257 -d ecommerce -e "SELECT * FROM orders LIMIT 5;"
Hiển thị bảng với 5 dòng, các cột dữ liệu (product_name, quantity, unit_price) có giá trị hợp lệ, không bị NULL ở các trường bắt buộc.
Điều hướng series:
Mục lục: Series: Triển khai Database Row-Oriented với CockroachDB trên Ubuntu 24.04
« Phần 2: Cài đặt CockroachDB và cấu hình dịch vụ Systemd trên Ubuntu
Phần 4: Tối ưu hóa hiệu năng cho mô hình Row-Oriented trong CockroachDB »