Trung BìnhDatabase iconDatabase

Document embedding vs referencing trong MongoDB: khi nào dùng cái nào?

Embedding cho 1:1/1:few data truy cập cùng nhau (1 query, nhanh); referencing cho M:N, data update độc lập; giới hạn 16MB/document — embed quá nhiều sẽ hit limit.

  • Embedding (nested document): dùng khi data được truy cập cùng nhau thường xuyên (one query, no joins), quan hệ 1:1 hoặc 1:few, data ít thay đổi, subdocuments không cần exist độc lập.
  • Giới hạn quan trọng: MongoDB document size limit là 16MB — embedding quá nhiều dẫn đến hit limit.
  • Referencing (separate documents với ObjectId): dùng khi data lớn, quan hệ many-to-many, data được truy cập/update độc lập — nhưng cần $lookup (LEFT JOIN) hoặc application-side join, tốn thêm round trip.
  • Data duplication trade-off: embedding duplicate data (ví dụ user info trong mỗi order document) — read nhanh hơn nhưng update tốn công (phải update nhiều documents).
  • Schema design patterns: Bucket pattern — nhóm time-series data vào buckets (ví dụ nhóm sensor readings theo giờ thay vì một document per reading) để giảm document count; Outlier pattern — handle edge cases riêng khi 90% documents nhỏ nhưng 10% có thể rất lớn (ví dụ celebrity posts có millions of likes). $lookup performance: thêm index trên lookup field, tránh $lookup trong large collections không có index.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database