Bài 03: Cấu trúc Data Model trong MongoDB

Trong các hệ quản trị CSDL như MySQL hay SQL SERVER đều có khái niệm table (bảng) và mỗi table sẽ có các thông tin (column) xác định, có nghĩa bạn không thể chỉnh sửa cấu trúc lưu trữ của một table được. Nhưng với MongoDB thì lại khác, các collection (table trong MySQLlưu trữ trong MongoDB có sự linh động và cấu trúc có thể khác nhau, nghĩa là một collection bạn có thể lưu hai loại dữ liệu hoàn toàn khác nhau (theo node).

1. So sánh RDBMS  và MongoDB

Để rõ ràng hơn thì chúng ta có một bài toán thế này: Hãy thiết kế mô hình CSDL cho trường hợp lưu trữ tin tức, mỗi tin tức có thể có nhiều comment và có nhiều tags.

Trường hợp RDBMS: Trong trường hợp này chúng ta sẽ tạo tối thiểu là 3 bảng gồm POST, COMMENTS, TAG_LIST như hình dưới đây (Ảnh sưu tầm).

RDBMS.png

Khi truy vấn chúng ta sẽ JOIN các bảng lại với nhau để lấy thông tin.

Trường hợp MongoDB: Với MongoDB thì ta không thể thiết kế theo mô hình kia được, trường hợp này chúng ta sẽ có một collection tên POST với cấu trúc lưu trữ như sau:

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [    
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}

Nhìn kỹ hơn bạn thấy nó giống JSON (tham khảo JSON là gì?)

Mỗi khi insert dữ liệu vào thì bạn sẽ phải truyền nó vào một chuỗi JSON y chang cấu trúc trên. Chính vì là JSON nên ban phải lưu ý các ký tự đặc biệt khi INSERT bằng code PHP nhé.

2. Một số lưu ý khi thiết kế lược đồ MongoDB

Khi thiết kế CSDL với MongoDB thì không giống như trong MySQL nên bạn cần phải cân nhắc các lưu ý sau:

  • Cấu trúc theo yêu cầu của người dùng (khách hàng)
  • Kết hợp chung vào chung một document nếu nó có dính líu với nhau. Nếu không tách chúng ra và truy vấn nhiều lần để lấy kết quả theo mong muốn
  • Dupplicate data (nhân đôi dữ liệu) ở mức hạn chế vì năm 2015 vấn đề dung lượng lưu trữ không quan trọng nữa mà họ chỉ quan tâm tới tốc độ truy vấn
  • Thực hiện JOIN trong khi insert, không thể JOIN khi select được.
  • Tối ưu hóa CSDL cho các trường hợp thường xuyên sử dụng

3. Lời kết

Nếu ban làm việc quen với MySQL rồi thì bạn sẽ có nhiều bỡ ngỡ khi tìm hiểu MongoDB, nhưng nếu bạn đã tìm hiểu JSON rồi thì bạn sẽ dễ dàng học MongoDB hơn.

Trong bài viết mình có tham khảo một số website như:

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.