07/07/2023
Chia sẻ
4918 lượt xem

MongoDB là hệ cơ sở dữ liệu NoSQL mã nguồn mở phổ biến, ra đời như một giải pháp giúp khắc phục những khuyết điểm của cơ sở dữ liệu quan hệ truyền thống. Từ đó, giúp lưu trữ, quản lý dữ liệu lớn một cách linh hoạt. Trong bài viết dưới đây, Tenten sẽ giúp bạn hiểu rõ hơn MongoDB là gì, các tính năng nổi bật, ưu điểm và hạn chế của hệ cơ sở dữ liệu này. 

Contents

Tổng quan về MongoDB  

Trước khi tìm hiểu chi tiết các tính năng nổi bật của MongoDB là gì, bạn cần có kiến thức tổng quan về MongoDB và NoSQL là gì.

MongoDB là gì?

MongoDB là hệ quản trị cơ sở dữ liệu mã nguồn mở thuộc dạng NoSQL. Thay vì lưu trữ dữ liệu theo dạng bảng cố định như các cơ sở dữ liệu quan hệ (RDBMS), MongoDB lưu trữ dưới dạng các tài liệu (Document) linh hoạt giống JSON hoặc BSON. Nhờ đó, giúp việc mở rộng và phát triển ứng dụng nhanh chóng hơn.

MongoDB ra đời năm 2007, được phát triển bởi công ty 10gen (nay là MongoDB Inc.). Ban đầu dự án hướng tới nền tảng đám mây, nhưng nhóm sáng lập sớm nhận ra sự hạn chế của cơ sở dữ liệu SQL truyền thống trước dữ liệu lớn, phức tạp. 

Năm 2009, MongoDB được chuyển thành mã nguồn mở với tư cách là cơ sở dữ liệu NoSQL lưu trữ dưới dạng tài liệu, linh hoạt, dễ mở rộng và nhanh chóng trở thành tiêu chuẩn công nghệ phổ biến toàn cầu.

MongoDB là hệ quản trị cơ sở dữ liệu mã nguồn mở thuộc dạng NoSQL

NoSQL là gì?

NoSQL (Not Only SQL) là hệ quản trị cơ sở dữ liệu phi quan hệ. Thay vì lưu trữ dữ liệu theo bảng (hàng và cột) như cơ sở dữ liệu SQL truyền thống, NoSQL lưu trữ dưới dạng tài liệu (JSON), cặp khóa-giá trị hoặc đồ thị. 

NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm của mô hình dữ liệu quan hệ RDBMS, nổi bật với khả năng mở rộng quy mô dễ dàng và xử lý dữ liệu lớn.

Các thuật ngữ MongoDB thường dùng

Để làm việc hiệu quả với MongoDB, bạn cần làm quen với một số thuật ngữ cốt lõi dưới đây:

Thuật ngữ

Mô tả chi tiết

Query

Câu lệnh dùng để truy vấn, tìm kiếm, cập nhật hoặc xóa dữ liệu trong MongoDB dựa trên các điều kiện và toán tử truy vấn.

Replica Set

Nhóm nhiều MongoDB instance lưu trữ cùng một dữ liệu để đảm bảo tính sẵn sàng cao, tự động chuyển đổi khi máy chủ chính gặp sự cố.

Shard

Một phần dữ liệu được phân chia trong kiến trúc Sharding, giúp MongoDB mở rộng theo chiều ngang và xử lý khối lượng dữ liệu lớn trên nhiều máy chủ.

Database

Là vùng chứa các collection trong MongoDB, tương tự một cơ sở dữ liệu trong hệ quản trị CSDL quan hệ. Một MongoDB Server có thể quản lý nhiều database khác nhau.

Document

Đơn vị dữ liệu cơ bản nhất trong MongoDB, tương đương một bản ghi (row). Mỗi document gồm các cặp field-value và được lưu trữ dưới định dạng BSON.

Collection

Tập hợp các document có liên quan, tương tự một bảng (table). Các document trong cùng một collection không bắt buộc phải có cùng cấu trúc dữ liệu.

Field

Một cặp key-value bên trong document, tương tự một cột (column). Giá trị của field có thể thuộc nhiều kiểu dữ liệu khác nhau như chuỗi, số, boolean, mảng hoặc document lồng nhau.

_id

Trường đặc biệt đóng vai trò khóa chính (Primary Key) để định danh duy nhất mỗi document. Nếu không được chỉ định, MongoDB sẽ tự động tạo một ObjectId cho trường này.

BSON (Binary JSON)

Định dạng dữ liệu nhị phân mà MongoDB sử dụng để lưu trữ document. BSON mở rộng từ JSON, hỗ trợ nhiều kiểu dữ liệu hơn và được tối ưu về hiệu suất lưu trữ, xử lý.

Lược đồ linh hoạt (Flexible Schema / Dynamic Schema)

Đặc điểm cho phép các document trong cùng một collection có cấu trúc khác nhau, giúp dữ liệu dễ dàng mở rộng và thay đổi theo nhu cầu của ứng dụng.

MongoDB hoạt động như thế nào?

Sau khi đã có kiến thức cơ bản về MongoDB là gì, hãy cùng tìm hiểu chi tiết cách MongoDB lưu trữ dữ liệu và hoạt động.

MongoDB lưu trữ dữ liệu như thế nào?

MongoDB lưu trữ dữ liệu theo mô hình Database → Collection → Document. Trên một MongoDB Server, bạn có thể tạo nhiều database và mỗi database có thể chứa nhiều collection. Bên trong mỗi collection là nhiều document dùng để lưu trữ dữ liệu của ứng dụng.

  • Database là nơi chứa các collection, tương tự như database trong hệ quản trị cơ sở dữ liệu quan hệ.
  • Collection là tập hợp các document có liên quan, tương tự một bảng (table), nhưng không yêu cầu các document phải có cùng cấu trúc.
  • Document là đơn vị lưu trữ dữ liệu cơ bản, được tạo thành từ các field (cặp khóa – giá trị). Giá trị của field có thể là nhiều kiểu dữ liệu BSON như string, number, boolean, array hoặc document lồng nhau.

MongoDB lưu trữ document dưới định dạng BSON (Binary JSON). Khi dữ liệu JSON được gửi đến máy chủ, MongoDB sẽ chuyển đổi sang BSON để tối ưu hiệu suất lưu trữ, truy vấn và hỗ trợ nhiều kiểu dữ liệu hơn JSON thông thường. Mỗi BSON document có kích thước tối đa 16 MB.

Một điểm nổi bật của MongoDB là hỗ trợ dữ liệu lồng nhau (Embedded Document). Thay vì tách dữ liệu thành nhiều bảng và liên kết bằng JOIN như SQL, MongoDB cho phép lưu các đối tượng liên quan ngay trong cùng một document.

MongoDB Cách lưu trữ dữ liệu dưới dạng Document

MongoDB hoạt động như thế nào?

MongoDB hoạt động theo kiến trúc gồm hai lớp chính là Layer Ứng dụng (Application Layer) và Layer Dữ liệu (Data Layer). Mỗi lớp đảm nhiệm một vai trò riêng trong quá trình xử lý và lưu trữ dữ liệu.

Layer Ứng dụng (Application Layer)

Đây là lớp người dùng tương tác trực tiếp với MongoDB, bao gồm:

  • Front-end: Là các ứng dụng sử dụng MongoDB như website, ứng dụng Android, iOS hoặc các ứng dụng di động khác.
  • Back-end: Chứa máy chủ thực hiện các xử lý phía server và sử dụng MongoDB Driver hoặc MongoDB Shell để gửi truy vấn đến MongoDB. Trong đó, MongoDB Shell là giao diện dòng lệnh dựa trên JavaScript, cho phép kết nối với máy chủ MongoDB để thực thi lệnh, quản trị cơ sở dữ liệu và đọc, ghi hoặc chỉnh sửa dữ liệu trực tiếp.

Layer Dữ liệu (Data Layer)

Các truy vấn từ lớp ứng dụng sẽ được gửi đến MongoDB Server. Máy chủ MongoDB tiếp nhận và xử lý truy vấn, sau đó chuyển tiếp đến Storage Engine. MongoDB Server không trực tiếp đọc hoặc ghi dữ liệu trên ổ đĩa hay bộ nhớ mà toàn bộ thao tác lưu trữ, truy xuất dữ liệu sẽ do Storage Engine đảm nhiệm.

Sau khi Storage Engine hoàn thành việc đọc hoặc ghi dữ liệu, kết quả sẽ được trả về MongoDB Server và phản hồi lại cho ứng dụng. Cơ chế phân tách giữa xử lý truy vấn và lưu trữ dữ liệu giúp MongoDB vận hành hiệu quả, đồng thời dễ dàng mở rộng và tối ưu hiệu năng.

MongoDB hoạt động theo hai lớp chính là lớp ứng dụng và lớp dữ liệu

Các tính năng nổi bật của MongoDB 

MongoDB cung cấp nhiều tính năng giúp các lập trình viên và doanh nghiệp xây dựng, mở rộng và quản lý các ứng dụng hiện đại với khối lượng dữ liệu lớn một cách linh hoạt, hiệu quả.

Đánh chỉ mục (Indexing)

Để tăng tốc độ truy vấn, MongoDB cho phép lập trình viên tạo chỉ mục (index) cho bất kỳ trường nào trong tài liệu. Hệ thống hỗ trợ đa dạng các loại index như: 

  • Single Field: Đánh chỉ mục trên một trường duy nhất.
  • Compound Index: Đánh chỉ mục trên nhiều trường cùng lúc.
  • Geospatial Index: Hỗ trợ tối ưu các truy vấn liên quan đến vị trí địa lý.

Aggregation Framework

Đây là công cụ phân tích dữ liệu mạnh mẽ giúp bạn xử lý và biến đổi luồng dữ liệu. Sử dụng mô hình đường ống (pipeline), framework này cho phép bạn thực hiện các thao tác từ lọc dữ liệu (matching), nhóm dữ liệu (grouping), đến tính toán phân tích, mang lại hiệu năng cao hơn rất nhiều so với việc kéo toàn bộ dữ liệu thô về ứng dụng.

Replica Sets

Replica Set là một nhóm các bản sao của cơ sở dữ liệu lưu trữ cùng một tập hợp dữ liệu, giúp đảm bảo tính dự phòng và an toàn. Nếu node chính (primary node) gặp sự cố, hệ thống sẽ tự động bầu chọn một node phụ (secondary node) lên làm node chính, đảm bảo ứng dụng của bạn luôn sẵn sàng hoạt động 24/7.

Sharding

Khi khối lượng dữ liệu vượt quá khả năng xử lý của một máy chủ đơn, MongoDB sử dụng cơ chế Sharding (phân mảnh) để phân phối dữ liệu tự động trên nhiều máy chủ vật lý. Tính năng này giúp bạn mở rộng quy mô lưu lượng một cách liền mạch mà ứng dụng không bị gián đoạn.

GridFS

GridFS là một hệ thống con trong MongoDB được thiết kế để lưu trữ và truy xuất các tệp tin có kích thước lớn hơn giới hạn BSON thông thường. GridFS chia nhỏ tệp tin thành các phần (chunks) và quản lý chúng một cách có hệ thống.

Multi-Document ACID Transactions

MongoDB hỗ trợ các giao dịch ACID (Atomicity, Consistency, Isolation, Durability) đa tài liệu. Nhờ đó, bạn có thể thực hiện nhiều thao tác đọc/ghi trên nhiều tài liệu khác nhau một cách nhất quán. Nếu một bước trong giao dịch thất bại, toàn bộ quá trình sẽ được hoàn tác.

Schema Validation

Mặc dù nổi tiếng là schema-less, MongoDB vẫn cho phép bạn áp dụng các quy tắc ràng buộc (validation rules) sử dụng tiêu chuẩn JSON Schema. Điều này rất quan trọng khi bạn muốn ép buộc các tài liệu phải tuân thủ các quy tắc nhất định (ví dụ: trường email phải có định dạng đúng, trường tuổi phải là số) trước khi được lưu vào cơ sở dữ liệu.

Change Streams

Change Streams cho phép thông báo thời gian thực khi có bất kỳ thay đổi nào như thêm, sửa hay xóa xảy ra trên dữ liệu. Tính năng này đóng vai trò then chốt khi bạn xây dựng các ứng dụng cần đồng bộ hóa dữ liệu ngay lập tức giữa nhiều máy khách hoặc hệ thống.

Time Series Collections

Time Series Collections là tính năng được tối ưu hóa đặc biệt để lưu trữ và phân tích các chuỗi dữ liệu liên tục theo thời gian (ví dụ: dữ liệu từ cảm biến IoT, biến động giá cổ phiếu, hoặc nhật ký hệ thống). Time Series Collections giúp tăng hiệu suất ghi và giảm đáng kể không gian lưu trữ

Tính năng Bảo mật (Security Features)

MongoDB cung cấp các lớp bảo mật toàn diện cho doanh nghiệp bao gồm:

  • Mã hóa dữ liệu trong quá trình truyền tải (in-transit) và lúc lưu trữ (at-rest).
  • Kiểm soát truy cập dựa trên vai trò (Role-Based Access Control – RBAC).
  • Tích hợp xác thực đa yếu tố (MFA) và xác thực liên kết. 

Document Oriented

Thay vì lưu trữ dữ liệu trong các bảng với hàng và cột như cơ sở dữ liệu SQL truyền thống, MongoDB lưu trữ dữ liệu dưới dạng các tài liệu (document). Các tài liệu này sử dụng định dạng BSON (Binary JSON), cho phép lưu trữ các cấu trúc dữ liệu phân cấp, mảng, và các đối tượng phức tạp một cách tự nhiên, ánh xạ trực tiếp tới mã nguồn ứng dụng.

Schema-less Database

Mỗi tài liệu trong cùng một Collection (tương tự như bảng trong SQL) không bắt buộc phải có cùng một tập hợp các trường (field) hoặc cấu trúc dữ liệu. Nhờ đó, bạn có thể linh hoạt thêm hoặc sửa đổi các trường trong tài liệu một cách linh động mà không cần phải định nghĩa lại toàn bộ cấu trúc cơ sở dữ liệu.

Ưu điểm và hạn chế của MongoDB 

MongoDB nổi bật với khả năng mở rộng quy mô linh hoạt, hiệu năng cao nhờ cấu trúc lưu trữ dạng tài liệu không cần schema cố định. Tuy nhiên, MongoDB lại thiếu khả năng hỗ trợ các thao tác nối bảng phức tạp và tốn nhiều bộ nhớ.

Ưu điểm

MongoDB sở hữu những ưu điểm nổi bật sau:

  • Tính linh hoạt cao, cho phép thêm hoặc bớt các trường dữ liệu mà không cần phải định nghĩa cấu trúc (schema) từ trước.
  • Tốc độ truy vấn cao do hỗ trợ lưu trữ các đối tượng lồng nhau, giúp giảm thiểu các thao tác kết nối bảng (join) phức tạp và tăng tốc độ đọc/ghi dữ liệu.
  • Hỗ trợ mở rộng quy mô theo chiều ngang dễ dàng, giúp phân tán dữ liệu trên nhiều máy chủ khác nhau để xử lý khối lượng dữ liệu cực lớn.
  • Tính sẵn sàng cao nhờ tạo ra các bản sao dữ liệu trên nhiều máy chủ, tự động chuyển đổi dự phòng để duy trì hoạt động liên tục.
  • Dễ dàng tích hợp với ứng dụng do dữ liệu được biểu diễn trực quan, khớp hoàn hảo với các cấu trúc dữ liệu trong các ngôn ngữ lập trình như Node.js, Python, Java, PHP.
  • Sở hữu cộng đồng hỗ trợ đông đảo trên toàn cầu và hệ sinh thái xung quanh đa dạng, tiêu biểu là  MongoDB Atlas.

Ưu điểm của MongoDB là tính linh hoạt và mở rộng dễ dàng nhờ cấu trúc lưu trữ dạng tài liệu

Nhược điểm

Một số nhược điểm của MongoDB có thể kể đến như:

  • Hạn chế về tính toàn vẹn dữ liệu (ACID): Dù đã được cải thiện trong các phiên bản gần đây, MongoDB vẫn không hỗ trợ các giao dịch (transaction) phức tạp và mạnh mẽ như các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).
  • Tốn dung lượng lưu trữ: Do lưu trữ cả tên trường trong mỗi tài liệu, dữ liệu có thể chiếm nhiều dung lượng ổ cứng hơn so với các bảng truyền thống.
  • Không tối ưu cho các truy vấn phức tạp: Các thao tác liên kết bảng (join) trong MongoDB thường chậm và phức tạp hơn rất nhiều so với lệnh JOIN trong SQL.
  • Tiêu tốn nhiều bộ nhớ RAM: MongoDB, đặc biệt khi sử dụng WiredTiger Storage Engine, cần lượng RAM tương đối lớn để đạt hiệu suất cao, nhất là với cơ sở dữ liệu lớn hoặc nhiều chỉ mục (index).
  • Quản trị phức tạp ở quy mô lớn: Việc triển khai và vận hành các cụm Replica Set hoặc Sharding đòi hỏi kiến thức chuyên sâu về cấu hình, giám sát và bảo trì hệ thống.
  • Hạn chế khi xử lý dữ liệu quan hệ: MongoDB không hỗ trợ khóa ngoại (Foreign Key) như CSDL quan hệ. Các thao tác JOIN thường phải thực hiện bằng $lookup hoặc xử lý ở tầng ứng dụng, có thể ảnh hưởng đến hiệu năng.
  • Hạn chế về tính toàn vẹn dữ liệu (ACID): Dù đã được cải thiện trong các phiên bản gần đây, MongoDB vẫn không hỗ trợ các giao dịch (transaction) phức tạp và mạnh mẽ như các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).
  • Nguy cơ thiếu nhất quán dữ liệu: Lược đồ linh hoạt giúp dễ mở rộng nhưng cũng có thể khiến dữ liệu không đồng nhất nếu không áp dụng Schema Validation hoặc kiểm soát chặt chẽ ở tầng ứng dụng.
  • Cần thời gian để làm chủ: Việc thiết kế schema, tối ưu truy vấn và quản trị MongoDB trong môi trường production đòi hỏi kinh nghiệm và thời gian học tập, đặc biệt với hệ thống quy mô lớn.

Hướng dẫn cách sử dụng MongoDB 

MongoDB cung cấp nhiều câu lệnh giúp bạn tạo cơ sở dữ liệu, quản lý collection và thao tác với dữ liệu một cách nhanh chóng. Dưới đây là những câu lệnh MongoDB cơ bản mà người mới bắt đầu cần nắm vững.

Tạo database trong MongoDB 

Để tạo mới hoặc chuyển sang một database, sử dụng lệnh:

use DatabaseName

Ví dụ:

use projectdemo

Lưu ý: Nếu database chưa tồn tại, MongoDB sẽ chỉ tạo database sau khi bạn thêm dữ liệu vào đó.

Xem database đang sử dụng

Để kiểm tra database hiện tại, sử dụng lệnh:

db

Lệnh này sẽ hiển thị tên của database đang được sử dụng.

Xem tất cả các database trong hệ thống

Để liệt kê tất cả database trên MongoDB Server, sử dụng lệnh:

show dbs

Lưu ý: Chỉ những database đã chứa ít nhất một collection có dữ liệu mới được hiển thị.

Tạo collection mới

Để tạo một collection mới, sử dụng lệnh:

db.createCollection("tenCollection")

Ví dụ:

db.createCollection("users")

Thêm dữ liệu vào collection

Để thêm một document:

db.users.insertOne({

  name: "Mai",

  age: 25

})

Để thêm nhiều document cùng lúc:

db.users.insertMany([

  { name: "Nam", age: 28 },

  { name: "Linh", age: 22 }

])

Lấy tất cả dữ liệu trong collection

Để hiển thị toàn bộ dữ liệu trong collection:

db.users.find()

Nếu muốn hiển thị kết quả dễ đọc hơn:

db.users.find().pretty()

Truy vấn có điều kiện trong MongoDB 

Để truy vấn dữ liệu theo điều kiện:

db.users.find({ age: { $gt: 25 } })

Ví dụ trên sẽ trả về tất cả document có age lớn hơn 25.

Một số toán tử điều kiện thường dùng:

Toán tử

Ý nghĩa

Ví dụ

$eq

Bằng

{ age: { $eq: 25 } }

$lt

Nhỏ hơn

{ age: { $lt: 25 } }

$lte

Nhỏ hơn hoặc bằng

{ age: { $lte: 25 } }

$gt

Lớn hơn

{ age: { $gt: 25 } }

$gte

Lớn hơn hoặc bằng

{ age: { $gte: 25 } }

$ne

Khác

{ age: { $ne: 25 } }

$in

Thuộc danh sách

{ age: { $in: [25, 30] } }

$nin

Không thuộc danh sách

{ age: { $nin: [25, 30] } }

Xóa dữ liệu

Xóa một document:

db.users.deleteOne({ name: "Mai" })

Xóa nhiều document:

db.users.deleteMany({ age: { $lt: 18 } })

Cập nhật dữ liệu

Cập nhật một document:

db.users.updateOne(

  { name: "Mai" },

  { $set: { age: 30 } }

)

Cập nhật nhiều document:

db.users.updateMany(

  { age: { $lt: 18 } },

  { $set: { status: "Minor" } }

)

Tạo Index để tăng hiệu suất truy vấn 

Index giúp MongoDB tìm kiếm dữ liệu nhanh hơn, đặc biệt với các collection có số lượng document lớn.

Tạo index cho trường name:

db.users.createIndex({ name: 1 })

Trong đó:

  • 1: Sắp xếp tăng dần (Ascending Index).
  • -1: Sắp xếp giảm dần (Descending Index).

Phân tích truy vấn với explain() 

Để xem MongoDB thực hiện truy vấn như thế nào và có sử dụng index hay không, dùng:

db.users.find({ age: 30 }).explain("executionStats")

Lệnh này cung cấp thông tin về kế hoạch thực thi (Query Execution Plan), số document được quét và thời gian xử lý truy vấn.

Kết nối MongoDB với Node.js và Python 

Kết nối bằng Node.js (MongoDB Node.js Driver):

const { MongoClient } = require("MongoDB");

const client = new MongoClient("MongoDB://localhost:27017");

await client.connect();

Kết nối bằng Python (PyMongo):

from pymongo import MongoClient

client = MongoClient("MongoDB://localhost:27017/")

db = client["projectdemo"]

Sao lưu và khôi phục dữ liệu

Để sao lưu database, sử dụng công cụ mongodump:

mongodump --db projectdemo --out backup/

Để khôi phục dữ liệu từ bản sao lưu, sử dụng mongorestore:

mongorestore --db projectdemo backup/projectdemo

Ứng dụng thực tế của MongoDB 

Nhờ khả năng mở rộng quy mô dễ dàng, MongoDB giúp các doanh nghiệp xử lý lượng lớn dữ liệu và được ứng dụng trong nhiều lĩnh vực như: 

  • Hệ thống web và CMS: Các trang web động và hệ thống quản lý nội dung (CMS) cần lưu trữ nhiều loại thông tin khác nhau. MongoDB linh hoạt cho phép thêm các trường dữ liệu mới một cách nhanh chóng.
  • Phân tích thời gian thực và Big Data: MongoDB hỗ trợ tính năng Sharding để chia nhỏ dữ liệu ra nhiều máy chủ. Điều này giúp hệ thống nhập và phân tích dữ liệu khổng lồ với tốc độ cao.
  • Internet of Things (IoT): Các thiết bị IoT liên tục gửi các chuỗi dữ liệu thời gian. MongoDB sử dụng bộ sưu tập Time Series để lưu và xử lý dữ liệu cảm biến hiệu quả.
  • Ứng dụng di động và realtime: MongoDB kết hợp hoàn hảo với Node.js để làm máy chủ. Nó giúp ứng dụng cập nhật thông tin ngay lập tức (real-time) tới người dùng. 
  • Các hệ thống khác: MongoDB còn được dùng để lưu trữ danh mục sản phẩm thương mại điện tử, hồ sơ người chơi trong game, hoặc theo dõi hành trình vận chuyển.

Ứng dụng thực tế của MongoDB

So sánh MongoDB và RDBMS

MongoDB (NOSQL) lưu dữ liệu theo tài liệu JSON linh hoạt và dễ thay đổi. Trong khi đó, RDBMS (SQL) lưu dữ liệu theo bảng, có cấu trúc chặt chẽ. Bảng dưới đây sẽ giúp bạn hiểu rõ sự khác biệt giữa MongoDB và RDBMS:

Tiêu chí

MongoDB 

RDBMS (bao gồm MySQL) 

Cấu trúc lưu trữ

Dựa trên tài liệu (Document định dạng JSON/BSON).

Dựa trên bảng (Table) gồm Hàng và Cột.

Tính linh hoạt

Rất linh hoạt. Các bản ghi không cần cùng cấu trúc (Schema động).

Kém linh hoạt. Bắt buộc định nghĩa cấu trúc (Schema) trước khi thêm dữ liệu.

Mối quan hệ

Ít dùng mối quan hệ. Dữ liệu thường được nhúng trực tiếp vào nhau.

Liên kết các bảng với nhau chặt chẽ qua Khóa ngoại (Foreign Key).

Ngôn ngữ

Dùng các hàm/phương thức truy vấn (VD: db.users.find()).

Dùng ngôn ngữ truy vấn cấu trúc SQL (VD: SELECT * FROM users).

Tính toàn vẹn

Đảm bảo tính toàn vẹn ở mức từng tài liệu riêng lẻ.

Đảm bảo tính toàn vẹn dữ liệu cực cao trên toàn hệ thống (ACID).

Mở rộng

Dễ dàng mở rộng ngang (chia nhỏ dữ liệu ra nhiều máy chủ – Sharding).

Mở rộng dọc (nâng cấp phần cứng máy chủ) dễ hơn.

Dữ liệu phù hợp 

Dữ liệu lớn, chưa định hình rõ, ứng dụng thời gian thực, mạng xã hội.

Dữ liệu có cấu trúc phức tạp, hệ thống tài chính, ngân hàng, kế toán.

So sánh MongoDB và MySQL

MongoDB và MySQL đều là những hệ quản trị cơ sở dữ liệu phổ biến, nhưng được thiết kế theo hai mô hình khác nhau. Bảng dưới đây sẽ giúp bạn dễ dàng so sánh những điểm khác biệt quan trọng giữa hai hệ quản trị này.

Tiêu chí

MongoDB

MySQL

Mô hình dữ liệu

Lưu trữ dữ liệu dưới dạng document JSON/BSON, tổ chức thành collection.

Lưu trữ dữ liệu theo bảng (table) gồm hàng và cột.

Khả năng mở rộng

Mở rộng theo chiều ngang bằng Replica Set và Sharding.

Mở rộng theo chiều dọc, hỗ trợ Read Replica để tăng hiệu năng đọc.

Ngôn ngữ truy vấn

MongoDB Query Language (MQL).

SQL (Structured Query Language).

Hiệu năng

Tối ưu cho Insert và Update khối lượng dữ liệu lớn.

Tối ưu cho các truy vấn SELECT trên dữ liệu quan hệ.

Tính linh hoạt

Schema-less, hỗ trợ dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc.

Schema cố định, phù hợp với dữ liệu có cấu trúc.

Bảo mật

Hỗ trợ xác thực bằng Kerberos, X.509, LDAP.

Sử dụng cơ chế xác thực tích hợp của MySQL.

 

Nên sử dụng MongoDB hay MySQL?

Lựa chọn MongoDB hay MySQL phụ thuộc vào mô hình dữ liệu và yêu cầu của ứng dụng. Dưới đây là trường hợp phù hợp để sử dụng từng hệ quản trị cơ sở dữ liệu:

  • Nên sử dụng MongoDB khi: Dữ liệu phi cấu trúc hoặc bán cấu trúc, dữ liệu thường xuyên thay đổi và cần mở rộng linh hoạt. MongoDB đặc biệt phù hợp với các hệ thống như mạng xã hội, truyền thông, CMS, IoT hoặc ứng dụng xử lý dữ liệu lớn.
  • Nên sử dụng MySQL khi: Dữ liệu có cấu trúc rõ ràng, cần đảm bảo tính nhất quán theo ACID và thường xuyên xử lý các giao dịch phức tạp như thương mại điện tử, tài chính, ngân hàng. MySQL cũng phù hợp với các hệ thống kho dữ liệu và các truy vấn phân tích trên dữ liệu quan hệ.

Câu hỏi thường gặp

MongoDB hỗ trợ những ngôn ngữ nào?

MongoDB hỗ trợ hầu hết các ngôn ngữ lập trình phổ biến hiện nay như JavaScript(Node.js), Python, Java, C# (.NET), GoC và C++, PHP.

MongoDB có những phiên bản nào? Có miễn phí không?

MongoDB cung cấp 3 phiên bản chính:

  • MongoDB Community Server: Phiên bản mã nguồn mở, miễn phí. Phù hợp để bạn tự cài đặt trên máy tính cá nhân hoặc máy chủ riêng để học và làm dự án. 
  • MongoDB Atlas: Dịch vụ cơ sở dữ liệu trên đám mây của hãng. Có gói miễn phí cho dữ liệu nhỏ và các gói trả phí (bắt đầu từ khoảng $8/tháng) dành cho quy mô lớn. 
  • MongoDB Enterprise Advanced: Phiên bản trả phí cao cấp dành cho các công ty lớn. Cung cấp bảo mật cao và các tính năng kiểm toán đặc biệt, chạy trên máy chủ riêng của doanh nghiệp

MongoDB phù hợp với những nền tảng nào?

MongoDB phù hợp với những nền tảng như Linux, macOS, Windows, Docker với cả phiên bản Community và phiên bản Enterprise.

MongoDB dùng để làm gì?

MongoDB là cơ sở dữ liệu NoSQL dùng để lưu trữ, quản lý và truy xuất lượng lớn dữ liệu linh hoạt. MongoDB được dùng phổ biến trong các ứng dụng web, ứng dụng di động và phân tích dữ liệu lớn.

MongoDB có phải là NoSQL?

Có. MongoDB là hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở phổ biến nhất hiện nay. 

BSON là gì?

BSON (Binary JSON) là định dạng dữ liệu nhị phân. Nó mã hóa các tài liệu giống như JSON. BSON giúp máy tính đọc, lưu trữ và tìm kiếm dữ liệu nhanh hơn. 

MongoDB lưu trữ dữ liệu dưới dạng gì?

MongoDB lưu trữ dữ liệu dưới dạng các tài liệu (Document) theo cấu trúc BSON (Binary JSON). BSON là phiên bản nhị phân của JSON, giúp máy tính đọc và tìm kiếm dữ liệu nhanh hơn. 

Collection trong MongoDB là gì?

Collection trong MongoDB là một nhóm các tài liệu (document), tương đương với một bảng (table) trong các cơ sở dữ liệu quan hệ như MySQL. Các collection đóng vai trò lưu trữ dữ liệu và nằm bên trong một cơ sở dữ liệu (database).

MongoDB Atlas là gì?

MongoDB Atlas là dịch vụ cơ sở dữ liệu trên đám mây (Database-as-a-Service) do chính nhà phát triển MongoDB cung cấp. Dịch vụ này giúp bạn dễ dàng lưu trữ và quản lý dữ liệu mà không cần phải tự cài đặt hay cấu hình các máy chủ vật lý phức tạp. 

Schema trong MongoDB là gì?

Schema trong MongoDB là schema-less, SQL định nghĩa một lược đồ thông qua định nghĩa bảng. Một lược đồ Mongoose ‘là một cấu trúc dữ liệu tài liệu (hoặc hình dạng của tài liệu) được thi hành qua lớp ứng dụng.

Nhìn chung, MongoDB là một giải pháp hoàn hảo cho các dự án lớn, ứng dụng web/di động hiện đại cần xử lý lượng dữ liệu khổng lồ và thay đổi liên tục. Hy vọng những thông tin trong bài viết trên đã giúp bạn hiểu rõ MongoDB là gì, các tính năng nổi bật, ưu điểm và hạn chế khi sử dụng mô hình này.