Database Mastery — Roadmap 16 Tuần
Người hướng dẫn: Principal Database Engineer & Staff Data Engineer Học viên: Hieu — Fullstack Web Dev (2+ năm) → Senior Engineer với chiều sâu DB Phương pháp: PostgreSQL Internals + DDIA + Database Internals (Alex Petrov) + High Performance MySQL + Designing Data-Intensive Applications + thực chiến production Tham chiếu chính: Database Internals — Alex Petrov, DDIA — Kleppmann, PostgreSQL Documentation, The Internals of PostgreSQL — Hironobu Suzuki, Designing Data Intensive Applications Quan hệ với khóa khác:
- Phối hợp với MOC-System-Design — khóa SD tiếp cận DB từ góc distributed, khóa này tiếp cận từ góc engineer + operator + workload specialist
- Link sang Tuan-07-Database-Sharding-Replication, Tuan-Bonus-Consistency-Models-Isolation, Tuan-Bonus-Multi-Region-Active-Active-DSQL khi chạm distributed topic
- Bổ sung chiều sâu cho Tuan-Foundations-Database-Internals
Triết lý học
"Index không phải magic. Mỗi index là một cây B-tree thật, tốn disk, tốn RAM, tốn write amplification.
Hiểu nó tốn gì thì mới biết khi nào đáng."
Hầu hết dev 2-3 năm viết SQL theo kiểu “query chạy được”. Senior viết SQL theo kiểu “query này dùng index nào, đọc bao nhiêu page, có spill ra disk không, có giữ lock không”. Khóa này rèn 4 thứ:
- Hiểu nội tại — Biết DB lưu byte trên disk thế nào, plan query ra sao, lock hoạt động ra sao.
- Đọc EXPLAIN như đọc code — Không guess, không “thêm index xem sao”. Đọc query plan, đo, sửa, đo lại.
- Vận hành production — Backup, restore, migration zero-downtime, monitoring, capacity.
- Chọn đúng DB cho đúng workload — Relational, KV, document, time-series, search, vector, columnar. Mỗi loại có giá riêng.
Tổng quan 16 tuần
gantt title Database Mastery — 16 Weeks dateFormat YYYY-MM-DD axisFormat %b %d section Phase 1: Relational Deep Dive Tuần 01 - DB Internals Refresh :d1, 2026-05-25, 7d Tuần 02 - Schema Design & Normalization :d2, after d1, 7d Tuần 03 - Indexing Mastery :d3, after d2, 7d Tuần 04 - Query Optimization & EXPLAIN :d4, after d3, 7d Tuần 05 - Transactions & Locking :d5, after d4, 7d section Phase 2: Operations Tuần 06 - Connection Pooling & Pgbouncer :d6, after d5, 7d Tuần 07 - Backup, PITR & Disaster Recovery :d7, after d6, 7d Tuần 08 - Zero-downtime Migration :d8, after d7, 7d Tuần 09 - DB Observability & Tuning :d9, after d8, 7d section Phase 3: NoSQL & Specialized Tuần 10 - Redis Mastery :d10, after d9, 7d Tuần 11 - DynamoDB & Cassandra :d11, after d10, 7d Tuần 12 - Document DBs - MongoDB :d12, after d11, 7d section Phase 4: Modern Workload Tuần 13 - Search Engines - ES/OpenSearch :d13, after d12, 7d Tuần 14 - OLAP & Columnar - ClickHouse :d14, after d13, 7d Tuần 15 - Vector DB cho AI :d15, after d14, 7d section Phase 5: Application Patterns Tuần 16 - ORM, N+1, CQRS, Multi-tenancy :d16, after d15, 7d
Phase 1: Relational Deep Dive (Tuần 1–5)
Đa số dev gặp 80% bài toán DB ở phase này. Master nó trước khi đi rộng.
| Tuần | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| 01 | Database Internals Refresh | Storage engine (B-tree vs LSM), page layout, WAL, buffer pool, checkpoint, MVCC mechanics — đào sâu hơn Tuan-Foundations-Database-Internals | Tuan-01-DB-Internals-Refresh |
| 02 | Schema Design & Normalization | 1NF→BCNF, khi nào denormalize, surrogate vs natural key, EAV anti-pattern, soft delete patterns, audit table design | Tuan-02-Schema-Design-Normalization |
| 03 | Indexing Mastery | B-tree variants, covering index, partial, expression, multi-column order, GIN/GiST/BRIN/Hash, index-only scan, bloat | Tuan-03-Indexing-Mastery |
| 04 | Query Optimization & EXPLAIN | Đọc EXPLAIN ANALYZE, planner statistics, cardinality estimation, join algorithms (nested loop, hash, merge), CTE pitfalls, window function | Tuan-04-Query-Optimization-EXPLAIN |
| 05 | Transactions & Locking | ACID thực chiến, isolation levels, MVCC visibility rules, SELECT FOR UPDATE, advisory locks, deadlock detection, optimistic vs pessimistic | Tuan-05-Transactions-Locking |
Kỹ năng then chốt sau Phase 1:
- Đọc EXPLAIN ANALYZE và chỉ ra bottleneck trong 30 giây
- Thiết kế schema cho domain mới (chọn key, FK, index, partition)
- Giải thích khi nào B-tree thua LSM và ngược lại
- Reproduce + fix deadlock từ pg_locks
- Phân biệt 4 isolation levels và pick đúng level cho từng use case
Phase 2: Operational Excellence (Tuần 6–9)
Code chạy được là tối thiểu. Code chạy 3 năm production không xuống là engineering.
| Tuần | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| 06 | Connection Pooling & PgBouncer | Pool sizing math, transaction vs session pooling, prepared statement trap, pool exhaustion, RDS Proxy, ProxySQL cho MySQL | Tuan-06-Connection-Pooling-PgBouncer |
| 07 | Backup, PITR & Disaster Recovery | pg_basebackup, WAL archiving, PITR, logical vs physical backup, RPO/RTO, test restore drill, S3 cold storage, retention policy | Tuan-07-Backup-PITR-DR |
| 08 | Zero-downtime Migration | Expand-contract pattern, gh-ost / pt-osc, online DDL Postgres 12+, partition swap, dual-write, backfill chunking, rollback plan | Tuan-08-Zero-Downtime-Migration |
| 09 | DB Observability & Performance Tuning | pg_stat_statements, autovacuum tuning, bloat detection, slow query log, USE method cho DB, capacity planning, p99 latency | Tuan-09-DB-Observability-Tuning |
Kỹ năng then chốt sau Phase 2:
- Thiết kế backup strategy đủ tiêu chuẩn audit (RPO < 5 phút, RTO < 1h)
- Migrate schema trên bảng 100M rows không downtime
- Phân tích bloat, thiết lập autovacuum cho high-write workload
- Setup pg_stat_statements + Grafana dashboard cho production
Phase 3: NoSQL & Specialized Stores (Tuần 10–12)
Relational không phải búa duy nhất. Biết khi nào đặt nó xuống và cầm dụng cụ khác.
| Tuần | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| 10 | Redis Mastery | Data structures (String/Hash/List/Set/ZSet/Stream/HLL/Bitmap), persistence (RDB/AOF), Cluster mode, Lua scripting, atomic patterns, anti-patterns | Tuan-10-Redis-Mastery |
| 11 | DynamoDB & Cassandra | Single-table design, partition key chiến lược, hot partition, LSI/GSI, eventual consistency, Cassandra tunable consistency, CQL anti-patterns | Tuan-11-DynamoDB-Cassandra |
| 12 | Document DBs — MongoDB | Document model, embedding vs referencing, aggregation pipeline, sharding strategy, change streams, MongoDB anti-patterns (subdoc growth, unbounded array) | Tuan-12-MongoDB-Document-DB |
Kỹ năng then chốt sau Phase 3:
- Thiết kế single-table DynamoDB cho một domain (3+ access pattern)
- Phân biệt khi nào dùng Redis vs Memcached vs in-memory DB
- Giải thích trade-off document vs relational, không rơi vào tư duy “MongoDB linh hoạt hơn”
Phase 4: Modern Workload (Tuần 13–15)
2026: AI, real-time analytics, full-text search là baseline. Không phải optional.
| Tuần | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| 13 | Search Engines — Elasticsearch/OpenSearch | Inverted index, BM25, analyzer pipeline, mapping design, refresh interval, hot-warm-cold, hybrid với pgvector, khi nào dùng ES vs Postgres FTS | Tuan-13-Search-Engines-ES |
| 14 | OLAP & Columnar — ClickHouse/DuckDB | Columnar storage, vectorized execution, materialized view, MergeTree engine, khi nào ClickHouse thắng Postgres 100x, OLAP vs OLTP trade-off, BigQuery/Snowflake basics | Tuan-14-OLAP-Columnar-ClickHouse |
| 15 | Vector DB cho AI | Embedding cơ bản, pgvector vs Qdrant vs Pinecone, HNSW vs IVF vs DiskANN, hybrid search (dense + sparse), filtered search, RAG pipeline | Tuan-15-Vector-DB-AI |
Kỹ năng then chốt sau Phase 4:
- Thiết kế search system với ES từ index mapping → query DSL → ranking
- Phân tích khi nào move analytics khỏi Postgres sang ClickHouse (chi phí + benefit)
- Build RAG production-ready với pgvector, biết khi nào cần switch sang Qdrant
- Hiểu HNSW graph traversal đủ để debug recall thấp
Phase 5: Application Patterns (Tuần 16)
DB nằm trong app code. Pattern application-level quyết định 50% performance.
| Tuần | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| 16 | ORM, N+1, CQRS, Multi-tenancy | ORM anti-patterns (N+1, lazy loading trap), DataLoader/batch, repository pattern, CQRS với DB, event sourcing trade-off, multi-tenancy ở DB level (RLS, schema-per-tenant, hybrid) | Tuan-16-ORM-CQRS-Multi-Tenancy |
Kỹ năng then chốt sau Phase 5:
- Phát hiện N+1 từ APM/log trong 5 phút
- Implement multi-tenancy với RLS (Row Level Security) đúng chuẩn
- Quyết định khi nào dùng CQRS với separate read model, khi nào over-engineering
Bonus Chapters (đọc khi sẵn sàng)
Topic chuyên sâu hoặc xu hướng 2024-2026. Không bắt buộc theo thứ tự.
| # | Chủ đề | Mục tiêu | Bài học |
|---|---|---|---|
| Bonus-0 | Postgres Partitioning Deep Dive | Range/list/hash, pruning, sub-partition, attach/detach, pg_partman, migration | Tuan-Bonus-Postgres-Partitioning |
| Bonus-1 | Time-series DBs — TimescaleDB/InfluxDB v3/VictoriaMetrics | Hypertable, chunk, continuous aggregate, retention policy, Prometheus storage internals | Tuan-Bonus-Time-Series-DB |
| Bonus-2 | Graph DBs — Neo4j/Cypher | Property graph model, Cypher query, khi nào graph thắng relational (>3 join hops, social/recommend) | Tuan-Bonus-Graph-DB-Neo4j |
| Bonus-3 | Embedded DBs — SQLite/DuckDB/RocksDB | WAL mode, khi nào SQLite scale tốt (Litestream, edge), DuckDB cho local analytics, RocksDB như storage primitive | Tuan-Bonus-Embedded-DBs |
| Bonus-4 | CDC Deep Dive — Debezium/Kafka Connect | Logical replication slot, Debezium connector, CDC topic design, schema evolution, link với Tuan-Bonus-Outbox-Pattern | Tuan-Bonus-CDC-Debezium |
| Bonus-5 | Distributed SQL — CockroachDB/TiDB | Globally distributed transactions, Raft per range, link với Tuan-Bonus-Multi-Region-Active-Active-DSQL nhưng đào sâu engineering side | Tuan-Bonus-Distributed-SQL-Engineering |
| Bonus-6 | MySQL Internals & High Performance | InnoDB internals, gap lock vs next-key lock, group replication, ProxySQL, khác biệt với Postgres khi nào quan trọng | Tuan-Bonus-MySQL-Internals |
| Bonus-7 | Lakehouse Engineering | Link sang Case-Design-Modern-Data-Lakehouse nhưng đào sâu: Iceberg metadata layer, Z-ordering, file pruning, time travel | Tuan-Bonus-Lakehouse-Engineering |
| Bonus-8 | Database Security & Compliance | Column encryption, transparent data encryption, PII scrubbing, audit log, GDPR right-to-erasure ở DB level, link với Tuan-15-Data-Security-Encryption | Tuan-Bonus-DB-Security-Compliance |
Case Studies (sau Phase 4)
Mỗi case study là một bài tập tổng hợp — không phải design hệ thống mà là design data layer cho hệ thống đó.
| # | Case Study | Mục tiêu | Bài học |
|---|---|---|---|
| 01 | Design Data Layer cho E-commerce | Product catalog (relational + search + cache), order (ACID, idempotency), inventory (concurrency), recommendation (vector) | Case-Design-Data-Ecommerce |
| 02 | Design Data Layer cho SaaS Multi-tenant | RLS vs schema-per-tenant, noisy neighbor, billing data, tenant migration | Case-Design-Data-SaaS-Multi-tenant |
| 03 | Design Data Layer cho Realtime Analytics | Event ingestion (Kafka → ClickHouse), pre-aggregation, hot/cold split, query latency budget | Case-Design-Data-Realtime-Analytics |
| 04 | Design Data Layer cho AI Product (RAG) | Document store, embedding pipeline, vector index choice, hybrid retrieval, freshness | Case-Design-Data-AI-RAG |
| 05 | Migrate Monolith DB → Microservices DB | Database-per-service, dual-write, CDC, data ownership, distributed transaction trade-off | Case-Design-Migrate-Monolith-DB |
Dependency Map giữa các tuần
graph LR D01[Tuần 01<br>Internals] --> D02[Tuần 02<br>Schema] D01 --> D03[Tuần 03<br>Indexing] D02 --> D03 D03 --> D04[Tuần 04<br>EXPLAIN] D04 --> D05[Tuần 05<br>Tx & Locking] D05 --> D06[Tuần 06<br>Pooling] D05 --> D07[Tuần 07<br>Backup/PITR] D02 --> D08[Tuần 08<br>Migration] D04 --> D09[Tuần 09<br>Observability] D09 --> D10[Tuần 10<br>Redis] D09 --> D11[Tuần 11<br>DynamoDB] D09 --> D12[Tuần 12<br>MongoDB] D11 --> D13[Tuần 13<br>Search/ES] D04 --> D14[Tuần 14<br>OLAP] D10 --> D15[Tuần 15<br>Vector DB] D03 --> D16[Tuần 16<br>App Patterns] D05 --> D16 style D03 fill:#f9a825,stroke:#333,stroke-width:2px style D04 fill:#f9a825,stroke:#333,stroke-width:2px style D05 fill:#f9a825,stroke:#333,stroke-width:2px style D15 fill:#66bb6a,stroke:#333
Lưu ý: Tuần 3-4-5 (vàng) là xương sống. Nếu thời gian hạn chế, master 3 tuần này trước, mọi thứ khác sẽ dễ hơn.
Cách phối hợp với System Design Mastery
| Topic | Tại Database-Mastery | Tại System-Design-Mastery |
|---|---|---|
| Sharding | Engineering: shard key design, resharding, cross-shard JOIN | Architecture: khi nào shard, vitess/citus, Tuan-07-Database-Sharding-Replication |
| Replication | Operational: streaming/logical, replication lag debug | Distributed: leader election, Tuan-Bonus-Consensus-Raft-Paxos |
| Consistency | MVCC visibility, isolation level pick | Theory: linearizability, Tuan-Bonus-Consistency-Models-Isolation |
| Distributed SQL | TiDB/CRDB engineering, debug | Concept: Tuan-Bonus-Multi-Region-Active-Active-DSQL |
| Vector DB | HNSW/IVF, pgvector tuning, RAG impl | Serving: Tuan-Bonus-LLM-Serving-Infrastructure |
| Lakehouse | Iceberg metadata, query engineering | Architecture: Case-Design-Modern-Data-Lakehouse |
Nguyên tắc: Khóa SD trả lời “thiết kế thế nào”. Khóa DB trả lời “làm cho nó chạy + vận hành thế nào”. Đọc song song nếu có thể.
Quy trình học mỗi tuần
- Đọc bài — File
Tuan-XX.mdtương ứng - Setup lab local — Docker compose Postgres/Redis/ES/ClickHouse tùy tuần
- Reproduce experiment — Mỗi tuần có 3-5 thí nghiệm (vd: tạo bloat, deadlock, slow query)
- Đo bằng số — Mọi claim phải có benchmark: pgbench, sysbench, custom workload
- Viết postmortem ngắn — Nếu broke gì đó, viết lại nguyên nhân + cách phát hiện vào Daily Note
Tags hệ thống
#database— Tag chung#postgresql,#mysql,#redis,#mongodb,#dynamodb,#clickhouse,#elasticsearch,#vector-db#indexing,#query-optimization,#transaction,#locking#operations— Backup, migration, monitoring#performance— Tuning, benchmark#anti-pattern— Cái nên tránh#trade-off— Quyết định kiến trúc#case-study— Bài tổng hợp
Cam kết
Mục tiêu khóa này không phải biến bạn thành DBA. Mục tiêu là làm bạn trở thành engineer mà team có thể trust khi DB có vấn đề — người mà khi production p99 nhảy, người ta gọi đầu tiên; khi schema mới được đề xuất, người ta gửi RFC cho review; khi cost DB tăng 3x, người ta nhờ analyse.
16 tuần. Mỗi tuần một viên gạch. Built on EXPLAIN, not vibes.
Cập nhật lần cuối: 2026-05-16 Xem thêm: MOC-Database-Mastery