SQL trong Trình duyệt — SQLite-WASM Chuyên Sâu — Lộ Trình Chi Tiết
SQL thật, chạy thẳng trong trình duyệt — không server, không cài đặt
Hầu hết tài liệu SQL dạy bạn cú pháp rồi dừng lại ở đó — chép SELECT/JOIN mẫu mà
không bao giờ chạm tới câu hỏi engine thực sự nghĩ gì khi thực thi 1 câu query, tại sao 1 index làm query
nhanh gấp 100 lần, hay điều gì thực sự xảy ra khi 2 transaction tranh chấp cùng 1 dòng dữ liệu. Series này
biên soạn ở độ sâu học thuật của 1 cuốn sách chuyên ngành: mỗi tính năng được minh hoạ qua nhiều tình
huống thực tế khác nhau (doanh thu, log, tồn kho, phân quyền...), không dừng ở ví dụ trừu tượng.
Engine chạy là SQLite biên dịch sang WebAssembly (sql.js) — SQL thật, không mô phỏng, chạy 100% phía client. Ở những chỗ browser về bản chất không demo nổi (transaction đa kết nối, WAL reader/writer đồng thời, disk I/O thật), series có thêm lab thực hành trên Docker PostgreSQL để bạn tự tay quan sát bằng 2 terminal.
Về Series này
Mỗi bài có 1 SQL workbench thật chạy ngay trên trình duyệt của bạn: gõ query, bấm chạy, xem kết quả và thời gian thực thi tức thì — không cần cài SQLite, không cần backend. 4 bài đánh dấu 🐳 có thêm lab Docker PostgreSQL cho những khái niệm cần môi trường đa tiến trình thật.
3 Dịch chuyển Tư duy quan trọng (Mindset Shifts)
Để dùng SQL như một kỹ sư dữ liệu thay vì chỉ chép cú pháp, bạn cần chuyển đổi tư duy qua 3 điểm mấu chốt:
SELECT có
thể được engine thực thi theo hàng chục cách khác nhau (full scan, index seek, nested loop join, hash
join...) — EXPLAIN QUERY PLAN chính là cửa sổ nhìn vào quyết định đó. Hiểu đây là 1 bài
toán tối ưu, không phải 1 kịch bản tuần tự, là chìa khoá cho mọi bài học phía sau.
Bảng thuật ngữ nền tảng (Glossary)
Để dễ dàng theo dõi loạt bài viết, bạn cần ghi nhớ các định nghĩa kỹ thuật sau:
| Thuật ngữ (EN) | Dịch nghĩa (VI) | Định nghĩa ngắn gọn |
|---|---|---|
| Query Plan | Kế hoạch thực thi | Chuỗi bước cụ thể engine chọn để chạy 1 câu query (scan, seek, join order...). |
| B-Tree Index | Chỉ mục cây B | Cấu trúc dữ liệu sắp xếp sẵn giúp tra cứu O(log n) thay vì quét toàn bảng O(n). |
| Transaction | Giao dịch | Nhóm thao tác được đảm bảo tất-cả-hoặc-không-gì (atomicity) theo tính chất ACID. |
| Isolation Level | Mức cô lập | Mức độ 1 transaction "nhìn thấy" thay đổi từ transaction khác đang chạy song song. |
| WAL | Write-Ahead Log | Ghi thay đổi vào log trước khi cập nhật file chính — cho phép đọc/ghi đồng thời an toàn. |
| CTE | Common Table Expression | Bảng tạm đặt tên trong 1 câu query (WITH ... AS), hỗ trợ cả dạng đệ quy. |
Lộ trình 17 bài học SQL chuyên sâu
Dưới đây là chi tiết lộ trình 17 bài viết thực chiến, từ mô hình quan hệ cơ bản tới nội tại engine, tìm kiếm toàn văn, và dự án Analytics Dashboard hoàn chỉnh. Bài đánh dấu 🐳 DOCKER có thêm lab thực hành trên PostgreSQL thật.
Bài 1: Mô Hình Quan Hệ & SELECT
Bảng/hàng/cột, hệ kiểu động của SQLite (type affinity), WHERE & toán tử,
ORDER BY/LIMIT/OFFSET. Chạy query đầu tiên trên dataset kinh
doanh thật ngay trong trình duyệt.
Bài 2: Môi Trường Thực Hành Kép — Browser & Docker🐳 DOCKER
Setup Docker PostgreSQL + psql, sqlite3 CLI, và bản đồ khác biệt dialect
SQLite↔PostgreSQL. Chuẩn bị lab tại nhà dùng xuyên suốt các bài 🐳 phía sau.
Bài 3: JOIN Toàn Tập
INNER/LEFT/RIGHT/FULL/CROSS JOIN, khoá ngoại, self-join, và cái bẫy tích Descartes. Visualizer Venn minh hoạ từng loại JOIN trên dữ liệu đơn hàng/khách hàng thật.
Bài 4: Aggregate & GROUP BY
COUNT/SUM/AVG/MIN/MAX, GROUP BY nhiều cột, HAVING vs
WHERE. Bảng tổng hợp doanh thu theo nhóm khách hàng + phát hiện dữ liệu bất thường.
Bài 5: Subquery & CTE
Subquery vô hướng/tương quan, IN/EXISTS, WITH (CTE), và CTE
đệ quy duyệt cây danh mục sản phẩm lồng nhau nhiều cấp.
Bài 6: Graph Queries Bằng CTE Đệ Quy
Mô hình đồ thị bằng bảng cạnh (edge list), transitive closure, đường đi ngắn nhất, phát hiện chu trình. Demo mạng chuyến bay: tìm đường bay rẻ nhất bằng đúng 1 câu SQL.
Bài 7: Window Functions
OVER(PARTITION BY), ROW_NUMBER/RANK/DENSE_RANK, LAG/LEAD.
Bảng xếp hạng nhân viên bán hàng & running total doanh thu trực quan.
Bài 8: Index & Query Plan
B-Tree index hoạt động thế nào, EXPLAIN QUERY PLAN, full scan vs index seek, composite
& covering index. So sánh trực tiếp thời gian query trước/sau khi tạo index.
Bài 9: Query Optimizer Sâu🐳 DOCKER
ANALYZE & statistics, thứ tự join, partial/expression index, đọc bytecode VDBE qua
EXPLAIN đầy đủ. Lab Docker: so sánh EXPLAIN ANALYZE của PostgreSQL.
Bài 10: SQLite Internals — B-Tree & File Format
Header 100 byte, cấu trúc page, record format & varint, overflow page, freelist. Page viewer đọc
hex thật của file .sqlite ngay trong trình duyệt.
Bài 11: Transaction & ACID🐳 DOCKER
BEGIN/COMMIT/ROLLBACK, isolation level, ràng buộc toàn vẹn. Lab Docker: 2 terminal
psql tự tay gây lock contention, non-repeatable read, so isolation level thật.
Bài 12: Trigger, View & Virtual Table
Trigger BEFORE/AFTER ghi audit log tự động, view như lớp trừu tượng, cơ chế virtual table đằng sau FTS3/FTS5. Đăng ký hàm SQL tuỳ biến bằng JavaScript.
Bài 13: JSON & Generated Columns
Hàm JSON (json_extract, ->/->>),
json_each/json_tree, generated columns, index trên expression cho kho dữ
liệu bán cấu trúc.
Bài 14: FTS5 Full-Text Search
Inverted index hoạt động thế nào, tokenizer, xếp hạng BM25,
highlight()/snippet(). Xây search engine mini tìm kiếm tức thì trên hàng
nghìn bài viết.
Bài 15: Performance Engineering🐳 DOCKER
Prepared statement, batch insert trong 1 transaction, PRAGMA tuning. Sân chơi benchmark và lab Docker: đo lường disk I/O & fsync thật — thứ browser không đo được.
Bài 16: WAL & Persistence Trong Browser🐳 DOCKER
WAL mode, OPFS + Worker, so sánh các chiến lược lưu trữ (sql.js vs wa-sqlite vs official WASM) và cấu hình CORS (COOP/COEP). Lab Docker: reader/writer đồng thời trên WAL thật.
Bài 17: Dự Án — Mini Analytics Dashboard
Ghép query + render biểu đồ SVG động. Tự động lưu trữ database vào IndexedDB, xuất nhập file .sqlite. Dự án thực chiến tổng kết toàn bộ lộ trình.