MongoDB là gì.!?

Huy Ngô
5 min readApr 7, 2020

--

MongoDB là một cơ sở dữ liệu document mã nguồn mở, đa nền tảng với khả năng mở rộng và hiệu năng cao cùng tốc độ truy vấn dữ liệu vượt trội với chỉ mục, và là CSDL hàng đầu của NoSQL, được viết bằng C++.

I. NoSQL là gì.!?

NoSQL viết tắt của Not Only SQL hay Not SQL, là một hệ thống quản lý phân phối (DMS) cho các mô hình dữ liệu phi quan hệ, có cấu trúc linh hoạt, API đơn giản và cũng dễ dàng mở rộng, phù hợp với các ứng dụng hiện đại với số lượng dữ liệu phân tán khổng lồ hay các web thời gian thực.

II. Tại sao nên sử dụng MongoDB.!?

  • MongoDB lưu trữ dữ liệu định hướng document một cách linh hoạt, định dạng JSON, điều này có nghĩa là các trường có thể được thay đổi từ document này sang document khác và cấu trúc dữ liệu có thể được thay đổi theo thời gian, cập nhật nhanh chóng.
  • Document model ánh xạ tới các objects trong code giúp dễ dàng làm việc với dữ liệu.
  • Truy vấn đặc biệt, đa dạng, lập chỉ mục và tổng hợp theo thời gian thực cung cấp các phương thức mạnh mẽ giúp truy cập và phân tích dữ liệu. Index được đánh trên bất kỳ thuộc tính.
  • MongoDB là một cơ sở dữ liệu phân tán, vì vậy tính sẵn sàng cao, nhân rộng tích hợp theo chiều “ngang” và phân tán theo vị trí địa lý có thể dễ dàng xây dựng và sử dụng. Tự động sharding, bảo vệ end-to-end và chuyển đổi dự phòng.
  • MongoDB là một công cụ quản lý để tự động hóa, giám sát và sao lưu.
  • MongoDB là miễn phí.

III. Khi nào nên sử dụng MongoDB

  • Hệ thống Big Data yêu cầu truy vấn nhanh.
  • Hệ thống thời gian thực yêu cầu phản hồi nhanh.
  • Hệ thống có lượng request lớn, thương mại điện tử.
  • Các hệ thống mà server không có RDBMS.
  • Quản lý và phân phối nội dung.
  • Cơ sở hạ tầng di động và xã hội.
  • Quản lý dữ liệu người dùng.
  • Quản lý cấu hình.
  • Data Hub.
  • Duy trì dữ liệu dựa trên vị trí — dữ liệu không gian địa lý.
  • Hệ thống cấu trúc không chặt chẽ — thiết kế có thể thay đổi theo thời gian.

IV. Khi nào nên sử dụng MongoDB

  • Hệ thống cần sử dụng nhiều transaction (như ngân hàng) do MongoDB không có cơ chế transaction.
  • Các hệ thống cần sử dụng joins (SQL).
  • Hệ thống có cấu trúc, thiết kế chặt chẽ, khó phá bỏ.

V. Ưu điểm

  • Ít lược đồ: MongoDB là một cơ sở dữ liệu hướng document trong đó một collection chứa các document khác nhau. Số lượng trường, nội dung và kích thước của document có thể khác nhau từ document này sang document khác. Dữ liệu không đồng nhất, không ràng buộc.
  • Trường “_id” luôn được tự động đánh index giúp tốc độ truy vấn thông tin đạt hiệu năng cao nhất.
  • Cấu trúc của một đối tượng được biểu diễn rõ ràng dưới dạng JSON.
  • Hỗ trợ dữ liệu không gian địa lý.
  • Không joins phức tạp.
  • Khả năng truy vấn sâu: MongoDB hỗ trợ các truy vấn động trên các documents bằng ngôn ngữ truy vấn hướng document mạnh mẽ tương tự như SQL.
  • Khả năng điều chỉnh, dễ phân tán.
  • Dễ mở rộng theo chiều ngang, hiệu năng cao, tính sẵn sàng cao.
  • Linh hoạt: cập nhật các trường sẽ ít hoặc không ảnh hưởng tới ứng dụng.
  • Tích hợp dễ dàng với Big Data Hadoop.
  • Chuyển đổi/ánh xạ các đối tượng trong ứng dụng thành các đối tượng cơ sở dữ liệu không cần thiết.
  • Phân tán đám mây như AWS, Microsoft, RedHat,dotCloud and SoftLayer, …
  • Sử dụng bộ nhớ trong để lưu trữ bộ làm việc, cho phép truy cập dữ liệu nhanh hơn. Khi truy vấn dữ liệu, bản ghi kết quả được cached trên RAM, giúp lần truy vấn sau nhanh hơn mà không cần đọc lại từ ổ cứng.

VI. Nhược điểm

  • MongoDB không có các tính chất ràng buộc mạnh mẽ như trong RDBMS (ACID) nên khi thao tác với MongoDB cần hết sức cẩn thận.
  • Không hỗ trợ transaction hoặc transaction rất phức tạp.
  • Không hỗ trợ join nên dễ trùng lặp dữ liệu.
  • Sử dụng nhiều bộ nhớ do dữ liệu lưu dưới dạng key-value, các collection chỉ khác về value và key bị lặp lại.
  • Giới hạn kích thước bản ghi (< 16Mb).
  • Khi cập nhật dữ liệu, MongoDB sẽ không cập nhật ngay xuống ổ cứng, sau 60s mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM sang ổ cứng. Do vậy, sẽ có khả năng mất dữ liệu khi xảy ra các trường hợp không mong muốn.
  • Không hỗ trợ function/stored procedure để ràng buộc logic.

VII. Khái niệm cơ bản trong Mongo

Cấu trúc một document trong MongoDB

Bất kỳ cơ sở dữ liệu quan hệ nào cũng có thiết kế lược đồ điển hình hiển thị số lượng bảng và mối quan hệ giữa các bảng này. Trong khi ở MongoDB, không có khái niệm về mối quan hệ.

Một server MongoDB thường có nhiều CSDL. CSDL là một container vật lý chứa các collections.

  • Collection: là một tập hợp các documents, tương tự như table trong RDBMS. Nó được lưu trữ trong một database và không thực thi schema.
    Các documents trong cùng một collection có thể có liên quan hoặc mục tiêu tương tự nhau, nhưng có thể chứa các trường khác nhau. Các trường chung giữa các document của collection có thể chứa các loại dữ liệu khác nhau.
  • Document: là một tập hợp các cặp key-value, có schema linh hoạt.
  • _id: định danh của một document, mặc định là một số hexadecimal 12 bytes giúp đảm bảo tính duy nhất của mọi document. Tuy nhiên, cũng có thể cung cấp _id khi insert document.

VIII. Một số lệnh truy vấn cơ bản

  • Tạo DB: use db_name;
  • Xóa DB: db.dropDatabase();
  • Tạo bảng: db.createCollection('t_name');
  • Xóa bảng: db.t_name.drop();
  • Chèn bảng: db.t_name.insert({c1_name: c1_value, c2_name: c2_type, …});
  • Cập nhật: db.t_name.update({ _id: id_value }, { $set: { c_name: c_new_value } });
  • Xóa: db.t_name.remove({_id: id_value});
  • Xóa all: db.t_name.deleteMany();
  • Tìm all: db.t_name.find();
  • Tìm theo trường: db.t_name.find({c_name: c_value});

Yo vậy là bài viết đến đây cũng đã kết thúc, hi vọng các bạn đã có thêm một chút kiến thức cũng như hiểu hơn về MongoDB cũng như là NoSQL.

--

--