Ngày 25: Làm việc với dữ liệu lớn (Big Data)
🎯 Mục tiêu học tập
- Hiểu khái niệm dữ liệu lớn trong SQL.
- Tối ưu hóa hiệu suất truy vấn với Partitioning (Phân vùng bảng).
- Sử dụng Sharding (Chia nhỏ dữ liệu) và Compression (Nén dữ liệu) để cải thiện hiệu suất.
📝 1. Khái niệm dữ liệu lớn trong SQL
Dữ liệu lớn (Big Data) đề cập đến tập dữ liệu có dung lượng quá lớn để xử lý bằng các phương pháp truyền thống. Trong SQL, làm việc với dữ liệu lớn cần chú ý đến:
- Partitioning (Phân vùng bảng)
- Sharding (Chia nhỏ dữ liệu)
- Indexing (Chỉ mục)
- Compression (Nén dữ liệu)
📝 2. Partitioning (Phân vùng bảng)
Partitioning giúp chia nhỏ bảng lớn thành nhiều phần nhỏ hơn, giúp tăng tốc truy vấn. Có 3 loại phân vùng phổ biến:
🔹 2.1. Range Partitioning (Phân vùng theo khoảng)
Chia dữ liệu thành các vùng dựa trên giá trị của một cột, ví dụ: phân vùng dữ liệu theo năm.
🔹 Ví dụ (PostgreSQL):
CREATE TABLE sales (
id SERIAL PRIMARY KEY,
sale_date DATE NOT NULL,
amount DECIMAL(10,2) NOT NULL
) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2023 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2023-12-31');
CREATE TABLE sales_2024 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2024-12-31');
🔹 2.2. List Partitioning (Phân vùng theo danh sách)
Phân vùng dữ liệu theo danh sách giá trị cụ thể, ví dụ: chia dữ liệu theo khu vực.
🔹 Ví dụ (PostgreSQL):
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
region TEXT NOT NULL
) PARTITION BY LIST (region);
CREATE TABLE customers_vietnam PARTITION OF customers
FOR VALUES IN ('Vietnam');
CREATE TABLE customers_usa PARTITION OF customers
FOR VALUES IN ('USA');
🔹 2.3. Hash Partitioning (Phân vùng theo băm)
Phân vùng dữ liệu bằng cách băm giá trị của một cột.
🔹 Ví dụ (PostgreSQL):
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT NOT NULL
) PARTITION BY HASH (customer_id);
CREATE TABLE orders_p0 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE orders_p1 PARTITION OF orders FOR VALUES WITH (MODULUS 4, REMAINDER 1);
📝 3. Sharding (Chia nhỏ dữ liệu)
Sharding là kỹ thuật chia nhỏ dữ liệu thành nhiều máy chủ khác nhau.
Ví dụ: Một hệ thống lưu trữ khách hàng trên 2 server:
- Server 1: Chứa khách hàng có
idtừ 1-500000. - Server 2: Chứa khách hàng có
idtừ 500001 trở đi.
💡 Lưu ý: Sharding thường áp dụng cho các hệ thống có dữ liệu lớn và yêu cầu mở rộng theo chiều ngang (horizontal scaling).
📝 4. Compression (Nén dữ liệu)
Dữ liệu lớn có thể làm chậm truy vấn, vì vậy cần sử dụng nén dữ liệu để giảm kích thước lưu trữ.
🔹 Ví dụ (PostgreSQL - Nén cột dữ liệu)
ALTER TABLE sales
SET (storage = EXTERNAL);
🔹 Ví dụ (MySQL - Sử dụng InnoDB compression)
CREATE TABLE sales (
id INT PRIMARY KEY,
sale_date DATE NOT NULL,
amount DECIMAL(10,2) NOT NULL
) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;