Cơ sở dữ liệu (database)
Database là trái tim của mọi ứng dụng, nơi dữ liệu được lưu trữ, quản lý và truy xuất một cách có cấu trúc, giúp doanh nghiệp và người dùng đưa ra quyết định nhanh chóng và chính xác
Cơ sở dữ liệu (Database) là nền móng của mọi hệ thống phần mềm. Nhưng “database” không chỉ là MySQL hay MongoDB — mà là một hệ sinh thái lớn, với nhiều loại kiến trúc khác nhau, tối ưu cho những nhu cầu khác nhau.
Database dùng để làm gì?
Lưu trữ dữ liệu có cấu trúc hoặc không cấu trúc.
Cho phép truy vấn nhanh và đáng tin cậy.
Đảm bảo dữ liệu không mất khi tắt máy.
→ Nó là bộ nhớ dài hạn của hệ thống, khác với RAM.
Phân loại
Có 2 cách phân loại chính: về cấu trúc tổ chức mô hình dữ liệu và về tác vụ hệ thống phải xử lý.
SQL và NoSQL
Đây là cách phân loại dựa trên cấu trúc dữ liệu và cách tổ chức lưu trữ.
SQL → quan hệ, dạng bảng (relational model)
NoSQL → phi quan hệ, dạng document/kv/column/graph
SQL
Cấu trúc: Dữ liệu lưu trong bảng (table), gồm hàng (row) và cột (column).
Schema: Cứng, phải định nghĩa trước các cột, kiểu dữ liệu.
Quan hệ: Bảng có thể liên kết nhau bằng khóa chính/khóa ngoại.
Tính năng nổi bật:
ACID (giao dịch an toàn, dữ liệu chính xác)
Dễ truy vấn phức tạp bằng SQL
Ví dụ: MySQL, PostgreSQL, Oracle
Minh họa:
Một bảng
SinhViencó cộtid,ten,tuoi.Một bảng
Diemcó cộtsinhvien_id,mon,diem.Dùng join để biết sinh viên nào có điểm môn nào.
NoSQL
Cấu trúc: Không nhất thiết theo bảng, có thể là document, key-value, cột, hoặc graph.
Schema: Linh hoạt, thêm trường mới không ảnh hưởng dữ liệu cũ.
Quan hệ: Ít hoặc không dùng join.
Tính năng nổi bật:
Dễ mở rộng ngang (dùng nhiều máy)
Hiệu năng cao cho dữ liệu lớn hoặc phi cấu trúc
Một số trade-off về tính nhất quán (không ACID 100%)
Ví dụ: MongoDB (document), Redis (key-value), Cassandra (column)
Minh họa:
Trong MongoDB, một document
SinhViencó thể chứa luôn danh sách điểm:
{ “id”: 1, “ten”: “An”, “tuoi”: 20, “diem”: [{”mon”: “Toan”, “diem”: 9}, {”mon”: “Ly”, “diem”: 8}] }So sánh nhanh
Cấu trúc dữ liệu:
SQL: Dữ liệu lưu trong bảng cố định, gồm hàng và cột.
NoSQL: Dữ liệu có thể là document, key-value, cột hoặc graph, không cố định.
Schema:
SQL: Cứng, phải định nghĩa trước các cột và kiểu dữ liệu.
NoSQL: Linh hoạt, có thể thêm trường mới dễ dàng mà không ảnh hưởng dữ liệu cũ.
Quan hệ giữa dữ liệu:
SQL: Có, sử dụng join để liên kết các bảng.
NoSQL: Ít hoặc không dùng join.
ACID (tính toàn vẹn dữ liệu):
SQL: Đảm bảo ACID đầy đủ (an toàn, chính xác).
NoSQL: Không hoàn toàn ACID, một số trade-off để tăng hiệu năng.
Ví dụ hệ quản trị:
SQL: MySQL, PostgreSQL, Oracle.
NoSQL: MongoDB, Redis, Cassandra.
Khi nào dùng:
SQL: Hệ thống giao dịch, dữ liệu quan trọng, cần tính toàn vẹn cao.
NoSQL: Dữ liệu lớn, web, realtime, dữ liệu phi cấu trúc hoặc semi-structured.
OLTP và OLAP
Đây là cách phân loại dựa trên mục đích sử dụng, tính chất truy vấn, và pattern vận hành.
OLTP → giao dịch nhỏ, độ trễ thấp
OLAP → phân tích dữ liệu lớn, throughput cao
OLTP (Online Transaction Processing)
Mục đích: Xử lý giao dịch hàng ngày, dữ liệu thay đổi liên tục.
Đặc điểm:
Nhiều ghi/đọc nhỏ (insert/update/delete nhanh)
Dữ liệu chi tiết, tươi mới
Yêu cầu ACID (an toàn, chính xác)
Thường là bảng chuẩn hóa (normalized) để tránh dư thừa
Ví dụ:
MySQL lưu đơn hàng, khách hàng, giao dịch ngân hàng
Một bảng
OrdersvớiOrderID,CustomerID,Amount,Status
Truy vấn: Nhanh, đơn giản, truy vấn theo hàng, số lượng bản ghi ít mỗi lần
OLAP (Online Analytical Processing)
Mục đích: Phân tích dữ liệu lớn, tổng hợp thông tin để ra quyết định.
Đặc điểm:
Nhiều đọc lớn, ít ghi (bulk insert)
Dữ liệu thường tóm tắt, gộp, không cần tươi mới ngay lập tức
Thường dùng bảng dạng cột (columnar) để tính toán nhanh
Thiết kế denormalized (dữ liệu lặp để tăng tốc phân tích)
Ví dụ:
ClickHouse lưu dữ liệu bán hàng theo tháng, theo sản phẩm, tổng doanh thu
Một bảng
SalesSummaryvớiMonth,ProductID,TotalAmount
Truy vấn: Phức tạp, tính tổng, trung bình, group by, trend, báo cáo
So sánh nhanh
Mục đích:
OLTP: Xử lý giao dịch hàng ngày.
OLAP: Phân tích dữ liệu, làm báo cáo.
Dữ liệu:
OLTP: Chi tiết, luôn mới.
OLAP: Tóm tắt, dữ liệu lịch sử.
Ghi/đọc:
OLTP: Nhiều ghi/đọc nhỏ, thao tác nhanh.
OLAP: Ít ghi, nhiều đọc lớn, xử lý nhiều bản ghi cùng lúc.
ACID:
OLTP: Quan trọng, đảm bảo giao dịch an toàn.
OLAP: Không bắt buộc 100%, một số trade-off để tăng tốc phân tích.
Thiết kế dữ liệu:
OLTP: Chuẩn hóa (normalized) để tránh dư thừa.
OLAP: Denormalized hoặc dạng cột (columnar) để truy vấn nhanh.
Ví dụ cơ sở dữ liệu:
OLTP: MySQL, PostgreSQL.
OLAP: ClickHouse, Amazon Redshift.
Truy vấn:
OLTP: Nhanh, đơn giản, thao tác trên vài bản ghi.
OLAP: Phức tạp, chậm hơn nhưng tính toán nhanh trên lượng lớn dữ liệu.



