MONGODB CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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).

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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.

Bài viết này được đăng tại [free tuts .net]

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ư:

Cùng chuyên mục:

Sử dụng Text Search trong MongoDB

Sử dụng Text Search trong MongoDB

Map Reduce trong MongoDB

Map Reduce trong MongoDB

ObjectId trong MongoDB

ObjectId trong MongoDB

Hoạt động nguyên tử (Atomic Operation) trong MongoDB

Hoạt động nguyên tử (Atomic Operation) trong MongoDB

Phân tích truy vấn trong MongoDB

Phân tích truy vấn trong MongoDB

Covered Query trong MongoDB

Covered Query trong MongoDB

Tham chiếu Database trong MongoDB

Tham chiếu Database trong MongoDB

Relationship trong MongoDB

Relationship trong MongoDB

Tạo backup và restore trong mongodb

Tạo backup và restore trong mongodb

Shard trong MongoDB

Shard trong MongoDB

Replica Set trong MongoDB

Replica Set trong MongoDB

Aggregation trong MongoDB

Aggregation trong MongoDB

Chỉ mục (Index) trong MongoDB

Chỉ mục (Index) trong MongoDB

Sắp xếp bản ghi trong MongoDB

Sắp xếp bản ghi trong MongoDB

Giới hạn bản ghi trong MongoDB

Giới hạn bản ghi trong MongoDB

Projection trong MongoDB

Projection trong MongoDB

Xóa Document trong MongoDB

Xóa Document trong MongoDB

Cập nhật Document trong MongoDB

Cập nhật Document trong MongoDB

Truy vấn Document trong MongoDB

Truy vấn Document trong MongoDB

Chèn Document trong MongoDB

Chèn Document trong MongoDB

Top