MongoDB là gì?

MongoDB là một cơ sở dữ liệu mã nguồn mở và là cơ sở dữ liệu NoSQL hàng đầu, được hàng triệu người sử dụng. MongoDB được viết bằng C++. Ngoài ra, MongoDB là một cơ sở dữ liệu đa nền tảng, hoạt động trên các khái niệm Collection và Document, nó cung cấp hiệu suất cao, tính khả dụng cao và khả năng mở rộng dễ dàng.

NoSQL là 1 dạng CSDL mã nguồn mở không sử dụng Transact-SQL để truy vấn thông tin. NoSQL viết tắt bởi: None-Relational SQL, hay có nơi thường gọi là Not-Only SQL. CSDL này được phát triển trên Javascript Framework với kiểu dữ liệu JSON. (Cú pháp của JSON là “key: value”). NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ liệu quan hệ RDBMS về tốc độ, tính năng, khả năng mở rộng, memory cache,…

Các thành phần trong MongoDB

  • _id – Là trường bắt buộc có trong mỗi document. Trường _id đại diện cho một giá trị duy nhất trong document MongoDB. Trường _id cũng có thể được hiểu là khóa chính trong document. Nếu bạn thêm mới một document thì MongoDB sẽ tự động sinh ra một _id đại diện cho document đó và là duy nhất trong cơ sở dữ liệu MongoDB.
  • Collection – Là nhóm của nhiều document trong MongoDB. Collection có thể được hiểu là một bảng tương ứng trong cơ sở dữ liệu RDBMS (Relational Database Management System). Collection nằm trong một cơ sở dữ liệu duy nhất. Các collection không phải định nghĩa các cột, các hàng hay kiểu dữ liệu trước.
  • Cursor – Đây là một con trỏ đến tập kết quả của một truy vấn. Máy khách có thể lặp qua một con trỏ để lấy kết quả.
  • Database – Nơi chứa các Collection, giống với cơ sở dữ liệu RDMS chúng chứa các bảng. Mỗi Database có một tập tin riêng lưu trữ trên bộ nhớ vật lý. Một mấy chủ MongoDB có thể chứa nhiều Database.
  • Document – Một bản ghi thuộc một Collection thì được gọi là một Document. Các Document lần lượt bao gồm các trường tên và giá trị.
  • Field – Là một cặp name – value trong một document. Một document có thể có không hoặc nhiều trường. Các trường giống các cột ở cơ sở dữ liệu quan hệ.
  • JSON – Viết tắt của JavaScript Object Notation. Con người có thể đọc được ở định dạng văn bản đơn giản thể hiện cho các dữ liệu có cấu trúc. Hiện tại JSON đang hỗ trợ rất nhiều ngôn ngữ lập trình.
  • Index – Là những cấu trúc dữ liệu đặc biệt, dùng để chứa một phần nhỏ của các tập dữ liệu một cách dễ dàng để quét. Chỉ số lưu trữ giá trị của một fields cụ thể hoặc thiết lập các fields, sắp xếp theo giá trị của các fields này. Index hỗ trợ độ phân tích một cách hiệu quả các truy vấn. Nếu không có chỉ mục, MongoDB sẽ phải quét tất cả các documents của collection để chọn ra những document phù hợp với câu truy vấn. Quá trình quét này là không hiệu quả và yêu cầu MongoDB để xử lý một khối lượng lớn dữ liệu.

Các kiểu dữ liệu trong MongoDB

  • Chuỗi: Đây là kiểu dữ liệu được sử dụng phổ biến nhất để lưu giữ dữ liệu. Chuỗi trong MongoDB phải là UTF-8 hợp lệ.
  • Số nguyên: Kiểu dữ liệu này được sử dụng để lưu một giá trị số. Số nguyên có thể là 32 bit hoặc 64 bit phụ thuộc vào Server của bạn.
  • Boolean: Kiểu dữ liệu này được sử dụng để lưu giữ một giá trị Boolean (true/false).
  • Double: Kiểu dữ liệu này được sử dụng để lưu các giá trị số thực dấu chấm động.
  • Min/ Max keys: Kiểu dữ liệu này được sử dụng để so sánh một giá trị với các phần tử BSON thấp nhất và cao nhất.
  • Mảng: Kiểu dữ liệu này được sử dụng để lưu giữ các mảng hoặc danh sách hoặc nhiều giá trị vào trong một key.
  • Timestamp: Đánh dấu thời điểm một Document được sửa đổi hoặc được thêm vào.
  • Object: Kiểu dữ liệu này được sử dụng cho các Document được nhúng vào.
  • Null: Kiểu dữ liệu này được sử dụng để lưu một giá trị Null.
  • Symbol: Kiểu dữ liệu này được sử dụng giống như một chuỗi
  • Date : Kiểu dữ liệu này được sử dụng để lưu giữ date và time hiện tại trong định dạng UNIX time.
  • Object ID: Kiểu dữ liệu này được sử dụng để lưu giữ ID của Document.
  • Binary data: Kiểu dữ liệu này được sử dụng để lưu giữ dữ liệu nhị phân.
  • Code: Kiểu dữ liệu này được sử dụng để lưu giữ JavaScrip code vào trong Document.
  • Regular expression: Kiểu dữ liệu này được sử dụng để lưu giữ Regular Expresion.

Ưu điểm của MongoDB

  • Không cần thiết kế bảng trước (schema-less).
  • Dữ liệu lưu dưới dạng JSON dễ thao tác.
  • Dễ dàng mở rộng (scale-out).
  • Hỗ trợ truy vấn linh hoạt, lập chỉ mục (index), và aggregation mạnh mẽ.

Nhược điểm

  • Không phù hợp với ứng dụng yêu cầu tính toàn vẹn dữ liệu cao như hệ thống tài chính.
  • Thiếu hỗ trợ JOIN mạnh mẽ như SQL.
  • Quản lý phức tạp khi số lượng collection và document quá lớn nếu không thiết kế tốt.

So sánh MongoDB và PostgreSQL

Tiêu chí MongoDB PostgreSQL
Loại CSDL NoSQL (phi quan hệ) SQL (quan hệ)
Kiểu lưu trữ Document (tài liệu JSON/BSON) Table (bảng, dòng, cột)
Schema Không cố định (schema-less) Cố định (schema-based)
Ngôn ngữ truy vấn MongoDB Query Language (JS-like) SQL (chuẩn ANSI)
Hỗ trợ JOIN Giới hạn (dùng $lookup) Rất mạnh mẽ
ACID Có hỗ trợ (từ v4.0), nhưng không bằng PostgreSQL Hỗ trợ đầy đủ ACID
Tốc độ xử lý Nhanh hơn nếu truy vấn đơn giản, dữ liệu phi cấu trúc Ổn định và mạnh mẽ với dữ liệu quan hệ
Tính mở rộng (scaling) Rất dễ mở rộng ngang (horizontal scaling) Chủ yếu là mở rộng dọc (vertical scaling)
Toàn vẹn dữ liệu (data integrity) Yếu hơn (không bắt buộc khóa ngoại, kiểu dữ liệu lỏng) Rất tốt (ràng buộc khóa ngoại, check, constraint)
Tìm kiếm toàn văn bản Có ($text, Atlas Search) Có (tsvector, to_tsquery) nhưng phức tạp hơn
Hỗ trợ JSON Gốc (native) Có, nhưng không tối ưu bằng MongoDB
Phù hợp với Dữ liệu linh hoạt, thay đổi thường xuyên (chat, IoT, logs, CMS,…) Dữ liệu có cấu trúc rõ ràng, yêu cầu tính toàn vẹn cao (ERP, ngân hàng, kế toán,…)

 

Tham khảo: TÌM HIỂU VỀ MONGODB

About the Author

Đức Phát

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Sử dụng Request/Response trong ứng dụng RESTful mô hình MVC

DTO là gì? DTO (Data Transfer Object) là một object trung gian dùng để truyền dữ liệu giữa client – server hoặc giữa các service trong ứng dụng web/API theo kiến trúc RESTful API. DTO chỉ chứa các thông tin cần thiết mà client hoặc service khác cần (ví dụ: Login Form chỉ cần thông […]

Docker

Docker là gì? Docker là một nền tảng mã nguồn mở cho phép bạn đóng gói, phân phối và chạy ứng dụng bên trong các “container” – những môi trường ảo nhẹ, cô lập nhưng vẫn chia sẻ nhân hệ điều hành của máy chủ. Khái niệm then chốt ở đây là “containerization”: thay vì […]

Kiểm thử phần mềm

Testing là gì? Quá trình kiểm thử phần mềm (software testing) là một chuỗi hoạt động có hệ thống nhằm đánh giá chất lượng, độ ổn định và tính đúng đắn của một ứng dụng so với yêu cầu ban đầu. Không đơn thuần chỉ là tìm ra lỗi, testing còn giúp đảm bảo rằng […]

Cache

Cache là gì? Cache là một bộ nhớ tạm (nhanh) được sử dụng để lưu trữ tạm thời dữ liệu thường xuyên được truy cập, nhằm giảm độ trễ và tăng hiệu suất của hệ thống. Cache thường được sử dụng ở Client, như CPU, applications, web browsers hoặc operating systems (OSes). Một số Cache phổ […]

Tìm hiểu Kafka

Kafka là gì? Apache Kafka là một nền tảng phân phối sự kiện phân tán mã nguồn mở được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala. Kafka ban đầu được phát triển bởi LinkedIn và sau đó được mở nguồn cho Quỹ phần mềm Apache (Apache Software Foundation) vào đầu năm 2011. (đồng sáng lập […]

Tìm hiểu RabbitMQ

RabbitMQ là gì? RabbitMQ là một phần mềm trung gian giúp các hệ thống, server, ứng dụng có thể giao tiếp, trao đổi dữ liệu với nhau. Nhiệm vụ của RabbitMQ được hiểu đơn giản là: nhận message từ nhiều nguồn => lưu trữ, sắp xếp sao cho hợp lý => đẩy tới đích đến. Là […]