MongoDB

Dựa trên kinh nghiệm của một Senior Backend Engineer, việc học MongoDB không chỉ dừng lại ở cú pháp find hay insert, mà trọng tâm nên nằm ở tư duy thiết kế (modeling) và tối ưu hóa hiệu năng (performance).

Dưới đây là lộ trình các topic chuyên sâu bạn cần nắm vững, phân chia theo các giai đoạn từ cơ bản đến nâng cao:


1. Tư duy & Data Modeling (Quan trọng nhất)

Sự khác biệt lớn nhất giữa SQL và MongoDB nằm ở đây. Nếu bê nguyên tư duy SQL sang MongoDB, hệ thống sẽ rất chậm.

  • Embedding vs. Referencing: Khi nào nên nhúng (embed) data vào document cha, khi nào nên tách ra và tham chiếu (reference/join).

    • Quy tắc: "Data that is accessed together, stays together".

  • Schema Design Patterns: Các mẫu thiết kế phổ biến để giải quyết vấn đề cụ thể:

    • Bucket Pattern: Dùng cho Time Series hoặc IoT data.

    • Attribute Pattern: Dùng cho sản phẩm có nhiều thuộc tính động (E-commerce).

    • Subset Pattern: Chỉ lưu những data hay truy xuất nhất trong document chính (để giảm RAM usage).

  • Schema Validation: Dù là NoSQL, bạn vẫn cần định nghĩa rule (JSON Schema) để đảm bảo tính nhất quán của dữ liệu (ví dụ: field email bắt buộc phải là string).

2. Advanced Querying & Aggregation Framework

Đây là "vũ khí" mạnh nhất của MongoDB, tương đương với các câu lệnh SQL phức tạp.

  • Aggregation Pipeline: Hiểu cơ chế pipeline (dữ liệu chảy qua các stage).

    • Các stage quan trọng: $match, $project, $group, $unwind, $lookup (tương đương LEFT JOIN), $bucket.

  • View & Materialized View: Tạo các view ảo hoặc lưu kết quả aggregation ra collection khác ($merge, $out) để tối ưu tốc độ đọc cho báo cáo.

3. Indexing & Performance Tuning

Là Senior, bạn sẽ chịu trách nhiệm khi DB bị chậm.

  • Index Types:

    • Single Field & Compound Index: Thứ tự field trong compound index cực kỳ quan trọng (Quy tắc ESR: Equality -> Sort -> Range).

    • Multikey Index: Index trên array.

    • Text Search & Geospatial Index: Tìm kiếm văn bản và tọa độ.

  • Query Optimization:

    • Đọc hiểu explain(): Phân biệt COLLSCAN (quét toàn bộ - tệ) và IXSCAN (dùng index - tốt).

    • Covered Queries: Truy vấn mà toàn bộ dữ liệu cần lấy đều nằm trong Index (siêu nhanh vì không cần đọc document gốc).

4. Architecture, Scalability & Availability

Hiểu về cách MongoDB vận hành ở quy mô lớn (Production).

  • Replica Set (High Availability):

    • Cơ chế bầu chọn (Election), Primary/Secondary nodes.

    • Oplog (Operations Log): Hiểu cách data được replicate (tương tự Binlog của MySQL).

    • Read Preference: Cấu hình đọc từ Primary (nhất quán) hay Secondary (giảm tải).

  • Sharding (Horizontal Scaling):

    • Khi nào cần Sharding?

    • Shard Key: Chọn sai shard key sẽ dẫn đến "Jumbo chunks" hoặc dồn tải vào một shard (hotspot), làm sập hệ thống.

  • Transactions (ACID): MongoDB (từ v4.0) hỗ trợ multi-document transactions. Cần biết khi nào thực sự cần dùng nó (vì nó tốn tài nguyên hơn so với atomic operations trên single document).

5. Tích hợp với Go (Golang)

Vì bạn làm việc với Go, cần nắm các kỹ thuật đặc thù của mongo-go-driver:

  • BSON Marshaling/Unmarshaling: Mapping struct Tags (bson:"field_name,omitempty").

  • Connection Pooling: Quản lý Client singleton hiệu quả để tránh leak connection.

  • Context & Timeouts: Xử lý cancel query khi request quá lâu.


Bảng tóm tắt so sánh tư duy

Vấn đề

Tư duy SQL (RDBMS)

Tư duy MongoDB (NoSQL)

Dữ liệu user & order

2 bảng riêng biệt, dùng JOIN khi query.

Embed (nhúng) Order vào User (nếu ít), hoặc tách ra nhưng hạn chế JOIN.

Thay đổi schema

ALTER TABLE, downtime hoặc lock table.

Thêm field mới trực tiếp vào code, không cần downtime.

Consistency

ACID là mặc định.

BASE (Basically Available, Soft state, Eventual consistency), nhưng có thể ép ACID nếu cần.

Last updated