Lộ Trình Học SQL & NoSQL: Làm Chủ Lưu Trữ Dữ Liệu

Giới Thiệu
Mọi ứng dụng đều cần lưu trữ dữ liệu. Câu hỏi không bao giờ là liệu bạn có cần database hay không — mà là database nào, cách query hiệu quả, và cách thiết kế schema không bị sụp đổ dưới tải thực tế.
Hầu hết developers học SQL bằng cách copy query từ Stack Overflow và xem như xong. Họ không bao giờ hiểu tại sao index giúp tăng tốc query, điều gì mà isolation levels thực sự ngăn chặn, hay khi nào MongoDB thực sự hiệu quả hơn PostgreSQL. Khoảng trống đó lộ ra ngay khi một query chậm lại trong production, dữ liệu bị hỏng, hoặc một quyết định thiết kế ban đầu trở nên không thể thay đổi.
Lộ trình này lấp đầy khoảng trống đó. Mười hai bài, ba giai đoạn, bao gồm từ SQL cơ bản đến kiến trúc NoSQL đến các vấn đề xuyên suốt áp dụng cho mọi hệ thống. Đến cuối, bạn sẽ tự tin đưa ra quyết định về database và viết query có khả năng scale.
Tại Sao Database Đáng Để Thành Thạo
Mọi công việc backend đều yêu cầu nó
Dù bạn viết Java, Python, Go hay TypeScript, bạn tương tác với databases mỗi ngày. Hiểu chúng sâu sắc giúp bạn nhanh hơn, tự tin hơn và có giá trị hơn.
Các vấn đề hiệu năng là vấn đề database
Trong các ứng dụng production, slow queries là bottleneck hiệu năng phổ biến nhất. Một vấn đề N+1 query hoặc một index bị thiếu có thể làm ứng dụng nhanh bị chậm lại.
Dữ liệu là tài sản quý giá nhất
Code có thể được viết lại. Dữ liệu không thể tái tạo. Quyết định schema tệ, thiếu constraints và isolation levels sai có thể làm hỏng dữ liệu theo những cách đau đớn hoặc không thể sửa.
SQL là phổ quát
SQL tồn tại từ những năm 1970 và không có dấu hiệu biến mất. PostgreSQL, MySQL, SQLite, BigQuery, Redshift, Snowflake — tất cả đều dùng SQL. Đây là một trong những kỹ năng có ROI cao nhất bạn có thể phát triển.
NoSQL là tình huống cụ thể, không phổ quát
MongoDB, Redis, Cassandra, DynamoDB đều xuất sắc trong các tình huống cụ thể. Biết khi nào và tại sao dùng chúng — thay vì dùng theo mặc định hoặc tránh hoàn toàn — là dấu hiệu của một kỹ sư trưởng thành.
Những Gì Bạn Sẽ Xây Dựng Được
Đến cuối lộ trình này, bạn sẽ có thể:
✅ Viết SQL queries phức tạp với JOINs, subqueries, CTEs và window functions
✅ Thiết kế schemas thực thi data integrity và hoạt động tốt ở quy mô lớn
✅ Hiểu PostgreSQL làm gì khi bạn chạy một query
✅ Model dữ liệu trong MongoDB cho các access patterns dựa trên document
✅ Dùng Redis cho caching, sessions, rate limiting và pub/sub
✅ Tạo indexes thực sự cải thiện hiệu năng query
✅ Hiểu transactions, ACID và cách concurrency có thể gây lỗi
✅ Chọn giữa SQL và NoSQL dựa trên access patterns, không phải hype
Yêu Cầu Trước
Lộ trình này giả định:
✅ Kinh nghiệm lập trình với ít nhất một ngôn ngữ backend (Python, Java, Go, TypeScript, v.v.)
✅ Hiểu biết cơ bản về database là gì (tables, rows, queries — dù mơ hồ)
✅ Quen thuộc với việc chạy lệnh trong terminal
✅ Cam kết thời gian — 8-10 giờ mỗi tuần trong 10-12 tuần
Nếu bạn muốn nền tảng thêm, các bài viết này trên blog bổ sung cho lộ trình:
- Relational Database Fundamentals — cách databases hoạt động bên trong
- Database Schema Design Guide — normalization, ERDs, design patterns
Tổng Quan Lộ Trình Học
Lộ trình này trải dài 3 giai đoạn qua 12 bài:
DB-1 (Lộ Trình & Tổng Quan) ← Bạn đang ở đây
│
├─ Giai Đoạn 1: SQL Cơ Bản (Bài 2-3)
│ ├─ DB-2: SQL Fundamentals (SELECT, JOIN, Subqueries)
│ └─ DB-3: Advanced SQL (Window Functions, CTEs, Recursive Queries)
│
├─ Giai Đoạn 2: NoSQL Cơ Bản (Bài 4-6)
│ ├─ DB-4: NoSQL Fundamentals (Document, Key-Value, Column, Graph)
│ ├─ DB-5: Deep Dive: PostgreSQL Mastery
│ └─ DB-6: Deep Dive: MongoDB Complete Guide
│
└─ Giai Đoạn 3: Vấn Đề Xuyên Suốt (Bài 7-12)
├─ DB-7: Deep Dive: Redis Beyond Caching
├─ DB-8: Deep Dive: Indexing & Query Performance
├─ DB-9: Deep Dive: Transactions & Concurrency Control
├─ DB-10: Deep Dive: Schema Design Patterns
├─ DB-11: Deep Dive: Database Migrations & Versioning
└─ DB-12: Deep Dive: SQL vs NoSQL — Choosing the Right DatabaseGiai Đoạn 1: SQL Cơ Bản
SQL là ngôn ngữ của các relational databases. Nó đã được chuẩn hóa, được kiểm chứng qua 50 năm và chạy trên hàng tỷ hệ thống. Học tốt SQL sẽ mang lại lợi ích cho cả sự nghiệp của bạn.
DB-2: SQL Fundamentals — SELECT, JOIN, Subqueries
Mục Tiêu: Viết các queries lấy chính xác dữ liệu bạn cần
Những Gì Bạn Sẽ Học:
- Cấu trúc của một câu lệnh SELECT
- Lọc với WHERE, ORDER BY, GROUP BY, HAVING
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN — với sơ đồ minh họa
- Các aggregation functions: COUNT, SUM, AVG, MIN, MAX
- Subqueries trong mệnh đề WHERE và FROM
- Thứ tự thực thi SQL thực sự dùng (không phải thứ tự bạn viết)
- Các lỗi query phổ biến silently trả về kết quả sai
Ví Dụ Thực Tế:
- E-commerce: tìm top customers theo doanh thu tháng này
- Blog: lấy tất cả posts với tên tác giả và số lượng comments
- Analytics: tính tốc độ tăng trưởng tuần theo tuần
Tại Sao Quan Trọng: Mọi tương tác database bạn viết đều dùng những nền tảng này. JOINs và aggregations xuất hiện trong 90% queries thực tế. Nắm đúng từ đầu ngăn chặn một loại bugs khó phát hiện.
🔗 Sắp Ra Mắt: SQL Fundamentals — SELECT, JOIN, Subqueries →
DB-3: Advanced SQL — Window Functions, CTEs, Recursive Queries
Mục Tiêu: Viết các queries phức tạp thay thế code xử lý phức tạp ở tầng ứng dụng
Những Gì Bạn Sẽ Học:
- Common Table Expressions (CTEs) — các khối xây dựng query có thể đọc và tái sử dụng
- Window functions: ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG()
- PARTITION BY — chạy tính toán theo từng nhóm
- Recursive CTEs — duyệt qua các hierarchies (danh mục, sơ đồ tổ chức, threaded comments)
- CASE WHEN — logic có điều kiện bên trong queries
- Lateral joins — subqueries theo từng row
- EXPLAIN ANALYZE — đọc query execution plans
Ví Dụ Thực Tế:
- Xếp hạng sản phẩm theo doanh số trong từng danh mục
- Tính rolling averages 7 ngày cho dữ liệu time-series
- Tìm top N items theo nhóm không dùng subqueries
- Duyệt một cây danh mục có độ sâu tùy ý
Tại Sao Quan Trọng: Window functions và CTEs thay thế cả một loại quyết định "tôi sẽ làm điều này trong application code". Lấy ít dữ liệu hơn từ database và làm ít công việc hơn trong ứng dụng gần như luôn nhanh hơn.
🔗 Sắp Ra Mắt: Advanced SQL — Window Functions & CTEs →
Giai Đoạn 2: NoSQL Cơ Bản
Các NoSQL databases không thay thế SQL — chúng bao gồm các access patterns mà relational databases xử lý kém. Hiểu khi nào và tại sao dùng mỗi loại là kỹ năng cốt lõi.
DB-4: NoSQL Fundamentals — Document, Key-Value, Column, Graph
Mục Tiêu: Hiểu toàn cảnh NoSQL và khi nào mỗi loại phát huy sức mạnh
Những Gì Bạn Sẽ Học:
- Bốn loại NoSQL chính và vấn đề mỗi loại giải quyết
- Document stores (MongoDB, Firestore) — flexible schemas, nested data
- Key-value stores (Redis, DynamoDB) — tra cứu cực nhanh theo key
- Wide-column stores (Cassandra, HBase) — dữ liệu time-series, event data ở quy mô cực lớn
- Graph databases (Neo4j, Amazon Neptune) — dữ liệu nặng về relationships
- BASE vs ACID: eventual consistency thực sự có nghĩa gì trong thực tế
- CAP theorem — tại sao bạn không thể có tất cả mọi thứ
Framework So Sánh:
| Loại | Tốt Nhất Cho | Trade-off |
|---|---|---|
| Document | Flexible schemas, nested data | Khó query qua nhiều documents |
| Key-Value | Tra cứu nhanh, sessions | Không có complex queries |
| Wide-Column | Write-heavy, time-series | Data modeling phức tạp |
| Graph | Duyệt relationships | Use cases ngách |
| Relational | Dữ liệu có cấu trúc, nhất quán | Schema cứng nhắc, joins ở quy mô lớn |
Tại Sao Quan Trọng: Hầu hết developers chọn MongoDB vì "mọi người đều dùng nó" hoặc tránh NoSQL hoàn toàn vì không quen. Cả hai đều không phải chiến lược. Bài này cho bạn framework tư duy để đưa ra lựa chọn có cơ sở.
🔗 Sắp Ra Mắt: NoSQL Fundamentals — Document, Key-Value, Column, Graph →
DB-5: Deep Dive — PostgreSQL Mastery
Mục Tiêu: Vượt qua SQL cơ bản để dùng toàn bộ sức mạnh của PostgreSQL
Những Gì Bạn Sẽ Học:
- Kiến trúc PostgreSQL: cách xử lý connections, memory, disk I/O
- Các data types bạn nên biết: JSONB, UUID, arrays, ranges, ENUM
- Full-text search không cần Elasticsearch
- Partial indexes, expression indexes, covering indexes
- Row-level security (RLS) cho multi-tenant applications
- Stored procedures và triggers — khi chúng giúp ích, khi chúng gây hại
- pg_stat_statements — tìm slow queries trong production
- Connection pooling với PgBouncer
- Logical replication và read replicas
Ví Dụ Thực Tế:
- Lưu và query dữ liệu bán cấu trúc với JSONB
- Implement data isolation multi-tenant với RLS
- Thiết lập full-text search với ts_vector và ts_query
- Chẩn đoán một slow query từ đầu đến cuối
Tại Sao Quan Trọng: PostgreSQL có thể là database open-source có khả năng nhất hiện tại. Hầu hết teams chỉ dùng 20% tính năng của nó. Bài này mở khóa 80% còn lại.
🔗 Sắp Ra Mắt: PostgreSQL Mastery →
DB-6: Deep Dive — MongoDB Complete Guide
Mục Tiêu: Model dữ liệu hiệu quả trong MongoDB và query nó hiệu quả
Những Gì Bạn Sẽ Học:
- Data model của MongoDB: documents, collections, embedding vs referencing
- Khi nào nên embed và khi nào nên reference — các quy tắc thực sự
- Các CRUD operations chuyên sâu
- Aggregation pipeline — tương đương của MongoDB với SQL GROUP BY + JOIN
- Các schema design patterns: bucket pattern, outlier pattern, computed pattern
- Indexing trong MongoDB: single, compound, multikey, text, geospatial
- Transactions trong MongoDB (có, chúng tồn tại)
- Change streams — real-time data feeds
- Atlas Search cho full-text search
Embedding vs Referencing:
Embed khi:
- Dữ liệu luôn được truy cập cùng nhau
- Child data nhỏ và giới hạn
- Quan hệ one-to-few
Reference khi:
- Dữ liệu được truy cập độc lập
- Quan hệ many-to-many
- Dữ liệu phát triển không giới hạnTại Sao Quan Trọng: Tính linh hoạt của MongoDB là con dao hai lưỡi. Thiết kế document tốt dẫn đến queries nhanh và đơn giản. Thiết kế tệ dẫn đến aggregation pipelines khổng lồ và hiệu năng kém.
🔗 Sắp Ra Mắt: MongoDB Complete Guide →
Giai Đoạn 3: Vấn Đề Xuyên Suốt
Các chủ đề này áp dụng cho mọi hệ thống database. Chúng thường là sự khác biệt giữa một database hoạt động và một database có khả năng scale.
DB-7: Deep Dive — Redis Beyond Caching
Mục Tiêu: Dùng Redis cho toàn bộ phạm vi khả năng, không chỉ caching
Những Gì Bạn Sẽ Học:
- Các data structures của Redis: Strings, Lists, Sets, Sorted Sets, Hashes, Streams
- Các caching patterns: cache-aside, write-through, write-behind
- Session storage và trade-offs so với database sessions
- Rate limiting với Redis và sliding window counters
- Distributed locking với RedLock
- Pub/Sub và các giới hạn của nó
- Redis Streams cho event sourcing
- Redis persistence: RDB snapshots vs AOF logging
- Redis Sentinel và Redis Cluster cho high availability
Các Pattern Thực Tế:
Rate Limiting:
INCR requests:{user_id}:{minute}
EXPIRE requests:{user_id}:{minute} 60
Leaderboard:
ZADD leaderboard {score} {user_id}
ZREVRANGE leaderboard 0 9 WITHSCORESTại Sao Quan Trọng: Redis chỉ dùng như cache lãng phí khả năng của nó. Hiểu toàn bộ data model mở khóa các patterns mà nếu implement ở chỗ khác sẽ cần các services riêng.
🔗 Sắp Ra Mắt: Redis Beyond Caching →
DB-8: Deep Dive — Indexing & Query Performance
Mục Tiêu: Làm cho các queries chậm trở nên nhanh và hiểu tại sao indexes hoạt động
Những Gì Bạn Sẽ Học:
- Cách B-tree indexes hoạt động bên trong (cấu trúc dữ liệu thực sự)
- Khi nào indexes giúp ích và khi nào chúng gây hại (write amplification)
- Composite indexes và quy tắc left-prefix
- Covering indexes — queries không bao giờ chạm đến table
- Index selectivity và cardinality
- Partial indexes cho filtered queries
- EXPLAIN và EXPLAIN ANALYZE — đọc execution plans
- Các vấn đề hiệu năng query phổ biến: sequential scans, sort spills, hash joins
- Index bloat và bảo trì (REINDEX, VACUUM)
Framework Quyết Định Index:
Thêm index khi:
- Column xuất hiện trong WHERE, JOIN ON hoặc ORDER BY
- Query trả về < 5-10% rows (high selectivity)
- Table có nhiều reads hơn writes
Không thêm index khi:
- Table nhỏ (< vài nghìn rows)
- Column có low cardinality (boolean, status với vài giá trị)
- Table là write-heavy (chi phí bảo trì index vượt quá lợi ích)Tại Sao Quan Trọng: Indexing là tối ưu hóa có đòn bẩy cao nhất hiện có. Một index đơn trên column đúng có thể biến query 10 giây thành 10 milliseconds. Hiểu các trade-offs ngăn chặn điều ngược lại: over-indexing làm chậm writes.
🔗 Sắp Ra Mắt: Indexing & Query Performance →
DB-9: Deep Dive — Database Transactions & Concurrency Control
Mục Tiêu: Hiểu ACID thực sự có nghĩa gì và cách concurrency gây ra lỗi
Những Gì Bạn Sẽ Học:
- Các thuộc tính ACID chuyên sâu: atomicity, consistency, isolation, durability
- Điều gì thực sự xảy ra bên trong một transaction
- Các concurrency anomalies: dirty reads, non-repeatable reads, phantom reads
- Các isolation levels: Read Uncommitted, Read Committed, Repeatable Read, Serializable
- Optimistic vs pessimistic locking
- SELECT FOR UPDATE và SELECT FOR SHARE
- Deadlocks: nguyên nhân và cách phòng ngừa
- MVCC (Multi-Version Concurrency Control) — cách PostgreSQL tránh locks
- Long-running transactions và mối nguy hiểm của chúng
Ma Trận Isolation Levels:
| Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| Read Uncommitted | Có thể xảy ra | Có thể xảy ra | Có thể xảy ra |
| Read Committed | Ngăn chặn | Có thể xảy ra | Có thể xảy ra |
| Repeatable Read | Ngăn chặn | Ngăn chặn | Có thể xảy ra |
| Serializable | Ngăn chặn | Ngăn chặn | Ngăn chặn |
Tại Sao Quan Trọng: Hầu hết application bugs không phải là logic bugs — chúng là concurrency bugs. Race conditions, double-spend issues và data corruption thường đến từ các giả định isolation sai. Bài này cho bạn mental model để suy luận về chúng đúng đắn.
🔗 Sắp Ra Mắt: Database Transactions & Concurrency Control →
DB-10: Deep Dive — Schema Design Patterns
Mục Tiêu: Thiết kế schemas tồn tại tốt dưới các yêu cầu thay đổi và tải tăng trưởng
Những Gì Bạn Sẽ Học:
- Normalization xem xét lại: khi nào normalize và khi nào denormalize
- Polymorphic associations — một table cho nhiều loại entity
- Entity-attribute-value (EAV) anti-pattern và các giải pháp tốt hơn
- Soft deletes, audit trails và temporal data patterns
- JSONB columns như escape hatch cho flexible attributes
- Schema design cho multi-tenancy: shared schema, row-level, schema-per-tenant
- Time-series data modeling trong PostgreSQL
- Event sourcing schema patterns
- Naming conventions và tầm quan trọng của chúng
Quy Tắc Vàng Về Normalization:
Normalize cho đến khi nó đau (về hiệu năng),
sau đó denormalize cho đến khi nó hoạt động.Tại Sao Quan Trọng: Các quyết định schema được thực hiện sớm rất khó thay đổi sau này. Một table với 500 triệu rows không thể dễ dàng được cấu trúc lại. Thiết kế đúng — và biết trade-offs nào bạn đang chấp nhận — ngăn chặn các migrations đau đớn sau này.
🔗 Sắp Ra Mắt: Schema Design Patterns →
DB-11: Deep Dive — Database Migrations & Versioning
Mục Tiêu: Thay đổi database schemas một cách an toàn không có downtime hoặc mất dữ liệu
Những Gì Bạn Sẽ Học:
- Tại sao migrations thất bại và cách ngăn chặn thất bại
- Các zero-downtime migration patterns cho production systems
- Thêm columns, xóa columns, đổi tên columns một cách an toàn
- Backfill các tables lớn không bị lock
- Các migration tools: Flyway, Liquibase, Alembic, Prisma Migrate, golang-migrate
- Rolling migrations cho blue-green deployments
- Schema version control trong Git
- Testing migrations trước production
- Pattern "expand-contract" cho các thay đổi backward-compatible
Pattern Expand-Contract:
Giai Đoạn 1 - Expand: Thêm new_column (nullable)
Deploy phiên bản ứng dụng ghi cả old_column và new_column
Giai Đoạn 2 - Migrate: Backfill new_column cho các rows hiện có
Giai Đoạn 3 - Contract: Xóa old_column sau khi tất cả reads dùng new_columnTại Sao Quan Trọng: "Chỉ ALTER TABLE trong production" hoạt động tốt trên các tables nhỏ. Ở quy mô lớn, schema changes trở thành các thao tác rủi ro cao. Làm sai gây downtime, locks leo thang thành outages hoặc mất dữ liệu.
🔗 Sắp Ra Mắt: Database Migrations & Versioning →
DB-12: Deep Dive — SQL vs NoSQL: Chọn Database Đúng
Mục Tiêu: Đưa ra quyết định database tự tin, có cơ sở cho bất kỳ dự án nào
Những Gì Bạn Sẽ Học:
- Framework quyết định dựa trên access patterns, không phải độ phổ biến
- Khi nào SQL thắng và tại sao (consistency, complex queries, joins)
- Khi nào NoSQL thắng và tại sao (scale, flexibility, specific data models)
- Polyglot persistence — dùng nhiều databases trong một hệ thống
- Các case studies thực tế: Uber, Instagram, GitHub chọn gì và tại sao
- Lựa chọn database cho các loại ứng dụng phổ biến (e-commerce, SaaS, analytics, IoT)
- Managed cloud databases: RDS, Cloud SQL, Atlas, Upstash, PlanetScale, Supabase
- Chi phí của việc chuyển đổi (độ phức tạp migration, overhead vận hành)
- Các câu hỏi cần hỏi trước khi chọn database
Hướng Dẫn Quyết Định Nhanh:
Dùng PostgreSQL khi:
- Bạn cần ACID guarantees
- Dữ liệu có relationships
- Query patterns đa dạng và khó đoán
- Bạn đang xây dựng web app điển hình
Dùng MongoDB khi:
- Schema thay đổi nhanh chóng
- Documents là self-contained
- Bạn đang xây dựng document-heavy apps (CMS, catalogs)
Dùng Redis khi:
- Bạn cần latency sub-millisecond
- Dữ liệu vừa trong memory
- Use case: caching, sessions, rate limiting, leaderboards
Dùng Cassandra/DynamoDB khi:
- Write volume cực lớn (triệu writes/giây)
- Dữ liệu là time-series hoặc append-only
- Access patterns đã biết và cố địnhTại Sao Quan Trọng: Lựa chọn database sai rất tốn kém để sửa. Bài này cho bạn quy trình có thể lặp lại để đưa ra quyết định thay vì đoán mò.
🔗 Sắp Ra Mắt: SQL vs NoSQL — Choosing the Right Database →
Kế Hoạch Học Tập
Cho Người Mới Bắt Đầu (12 Tuần)
Tuần 1-3: Nền Tảng SQL
- Tuần 1: Cài PostgreSQL local, khám phá psql CLI
- Tuần 2: DB-2 (SQL Fundamentals) — thực hành với sample dataset
- Tuần 3: DB-3 (Advanced SQL) — window functions, CTEs
Tuần 4-6: Toàn Cảnh NoSQL
- Tuần 4: DB-4 (NoSQL Overview) — hiểu mental model
- Tuần 5: DB-6 (MongoDB) — chạy MongoDB local, thực hành CRUD
- Tuần 6: DB-7 (Redis) — chạy Redis local, implement cache và rate limiter
Tuần 7-9: PostgreSQL Chuyên Sâu
- Tuần 7: DB-5 (PostgreSQL Mastery) — JSONB, full-text search, RLS
- Tuần 8: DB-8 (Indexing) — phân tích slow queries, thêm indexes, đo lường cải tiến
- Tuần 9: DB-9 (Transactions) — implement transaction patterns trong ngôn ngữ của bạn
Tuần 10-12: Kiến Trúc và Thiết Kế
- Tuần 10: DB-10 (Schema Design) — thiết kế lại một schema bạn biết
- Tuần 11: DB-11 (Migrations) — thực hành migrations trong test project
- Tuần 12: DB-12 (SQL vs NoSQL) — xem lại các quyết định cũ với kiến thức mới
Cho Backend Developers (6 Tuần — Trung Cấp)
Tuần 1: DB-2 + DB-3 (SQL nâng cao bạn có thể đã bỏ qua) Tuần 2: DB-5 (các tính năng PostgreSQL bạn chưa dùng) Tuần 3: DB-8 (indexing — chủ đề ROI cao nhất) Tuần 4: DB-9 (transactions — sửa các concurrency bugs bạn có thể đang có) Tuần 5: DB-6 hoặc DB-7 (NoSQL nào liên quan đến stack của bạn) Tuần 6: DB-12 (decision framework cho dự án tiếp theo)
Cho Chuẩn Bị Phỏng Vấn (3 Tuần — Tập Trung)
Tuần 1: DB-2 (SQL fundamentals), DB-3 (advanced SQL), DB-8 (indexing basics) Tuần 2: DB-9 (ACID và transactions), DB-4 (NoSQL overview) Tuần 3: DB-12 (thảo luận SQL vs NoSQL), luyện tập design questions
Cài Đặt Cần Thiết
Bạn có thể chạy tất cả ví dụ trong lộ trình này local với Docker:
# PostgreSQL
docker run -d \
--name pg \
-e POSTGRES_PASSWORD=password \
-p 5432:5432 \
postgres:16
# MongoDB
docker run -d \
--name mongo \
-p 27017:27017 \
mongo:7
# Redis
docker run -d \
--name redis \
-p 6379:6379 \
redis:7-alpineKết nối đến PostgreSQL:
psql -h localhost -U postgres -WKết nối đến MongoDB:
mongosh mongodb://localhost:27017Kết nối đến Redis:
redis-cli -h localhostCông Cụ Bạn Sẽ Dùng
PostgreSQL clients:
- psql (CLI, tích hợp sẵn)
- DBeaver (GUI, miễn phí)
- pgAdmin (GUI, miễn phí)
- TablePlus (GUI, có phí, UX xuất sắc)
MongoDB clients:
- mongosh (CLI, chính thức)
- MongoDB Compass (GUI, chính thức, miễn phí)
- Studio 3T (GUI, có phí)
Phân tích query:
- EXPLAIN ANALYZE (tích hợp trong PostgreSQL)
- pgBadger (log analyzer)
- pg_stat_statements (thống kê query)
Migration tools (được đề cập trong DB-11):
- Flyway (hệ sinh thái Java)
- Alembic (Python/SQLAlchemy)
- golang-migrate (Go)
- Prisma Migrate (TypeScript/Node)
Lộ Trình Này Kết Nối Như Thế Nào
Series này được xây dựng trên các bài viết hiện có và chuẩn bị cho các chủ đề nâng cao:
Các bài nền tảng (đọc trước hoặc song song):
- Relational Database Fundamentals — database internals, ACID chuyên sâu
- Database Schema Design Guide — normalization, ER diagrams
Các bài theo framework (áp dụng kiến thức từ lộ trình này):
- Working with Databases in FastAPI
- Spring Boot Database Integration
- Spring Boot Caching with Redis
- Spring Boot Advanced JPA Optimization
Những gì tiếp theo:
- Các chủ đề database xuất hiện xuyên suốt series Spring Boot (DB-level optimizations, JPA)
- Lộ trình Docker & Kubernetes đề cập đến việc chạy databases trong containers
- Series Software Architecture đề cập đến các patterns xây dựng trên databases (CQRS, event sourcing)
Tổng Kết
Lộ trình này bao gồm những gì hầu hết developers bỏ qua: tại sao đằng sau các quyết định database, không chỉ cách viết queries.
SQL vẫn là kỹ năng database có thể chuyển đổi nhất. PostgreSQL chạy trên mọi thứ từ Raspberry Pi đến các deployment AWS quy mô petabyte. MongoDB và Redis giải quyết các vấn đề thực sự trong các ngữ cảnh cụ thể. Hiểu cả ba — và biết khi nào cần đến từng loại — làm cho bạn trở thành một backend engineer tốt hơn đáng kể.
Theo các giai đoạn theo thứ tự. Mỗi bài xây dựng trên bài trước. Đến cuối, công việc database sẽ cảm thấy ít như phép màu bí ẩn và nhiều hơn như kỹ thuật.
Bắt đầu tại đây: DB-2: SQL Fundamentals →
📬 Đăng ký nhận bản tin
Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.
Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.
💬 Comments
Đăng nhập để bình luận
Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.