MongoDB được biết là cơ sở dữ liệu NoSQL hàng đầu, cung cấp phương pháp tiếp cận hướng tài liệu, mã nguồn mở, khác biệt so với các cơ sở dữ liệu quan hệ truyền thống. Không giống như cơ sở dữ liệu SQL, MongoDB lưu trữ dữ liệu ở định dạng BSON, tương tự như JSON, cho phép lưu trữ và truy xuất dữ liệu linh hoạt hơn. Trong bài viết này, chúng ta sẽ có được kiến thức chi tiết về MongoDB.
NoSQL là gì?
Chắc hẳn các bạn đã được học về Cơ sở dữ liệu quan hệ (Rational Database Management System – RDBS) với ác tiêu chuẩn thiết kế chuẩn 1, chuẩn 2, chuẩn 3… Tuy nhiên tồn tại song song với các loại hệ quản trị CSDL quan hệ RDBMS (Relational Database Management System) còn có các loại hệ quản trị CSDL phi quan hệ, gọi là NoSQL DB (NoSQL viết tắt của Not-Only SQL hay None-Relational SQL).
Vậy đã có RDBMS rồi sao lại cần có NoSQL DB nữa, thì đây là lý do:
- NoSQL DB giải quyết những khuyết điểm và hạn chế của các loại RDBMS về tốc độ, tính năng, khả năng mở rộng,…
- NoSQL DB có thể sử dụng cho các loại dữ liệu có cấu trúc, bán cấu trúc hay phi cấu trúc. Nó không bị hạn chế bởi một data model có định
- Với NoSQL DB bạn có thể mở rộng dữ liệu mà không lo tới những việc như tạo khóa ngoại, khóa chính, kiểm tra ràng buộc .v.v .
- NoSQL DB sử dụng schema động cho các dữ liệu phi cấu trúc, giúp cho việc tích hợp dữ liệu với các loại ứng dụng khác nhau một đơn giản và nhanh chóng hơn
- NoSQL DB bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở rộng.
- NoSQL DB phổ biến có thể kể đến MongoDB, Cassandra, Hbasse, Redis, CouchDB
MongoDB là gì?
- MongoDB là cơ sở dữ liệu NoSQL phổ biến nhất, là một cơ sở dữ liệu hướng tài liệu nguồn mở. Thuật ngữ ‘NoSQL’ có nghĩa là ‘phi quan hệ‘.
- Điều này có nghĩa là MongoDB không dựa trên cấu trúc cơ sở dữ liệu quan hệ dạng bảng mà cung cấp một cơ chế hoàn toàn khác để lưu trữ và truy xuất dữ liệu. Định dạng lưu trữ này được gọi là BSON (tương tự như định dạng JSON).
Dưới đây là ví dụ về cấu trúc document MongoDB cơ bản:
{
title: 'Chiase4dev.com',
by: 'Hopvd',
url: 'https://www.chiase4dev.org',
type: 'NoSQL'
}
- Cơ sở dữ liệu SQL lưu trữ dữ liệu theo định dạng bảng. Dữ liệu này được lưu trữ trong một mô hình dữ liệu được xác định trước, không linh hoạt lắm đối với các ứng dụng phát triển mạnh mẽ trong thế giới thực ngày nay.
- Các ứng dụng hiện đại có tính kết nối, xã hội và tương tác hơn bao giờ hết. Các ứng dụng lưu trữ ngày càng nhiều dữ liệu và truy cập dữ liệu với tốc độ cao hơn.
- Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) không phải là lựa chọn đúng đắn khi xử lý dữ liệu lớn vì thiết kế của chúng không thể mở rộng theo chiều ngang. Nếu cơ sở dữ liệu chạy trên một máy chủ duy nhất, thì nó sẽ đạt đến giới hạn mở rộng.
- Cơ sở dữ liệu NoSQL có khả năng mở rộng hơn và cung cấp hiệu suất vượt trội. MongoDB là một cơ sở dữ liệu NoSQL có khả năng mở rộng bằng cách thêm ngày càng nhiều máy chủ và tăng năng suất với mô hình tài liệu linh hoạt của nó.
Điểm mạnh của MongoDB
Không phải tự nhiện mà mongodb lại phổ biến như vậy trong số các NoSQL DB, và đây là nhiều ưu điểm của nó:
- Mongod lưu trữ các bản ghi như các tài liệu dạng json và được lưu trữ dưới dạng file nén BSON. Các bản ghi này có thể được truy vấn trực tiếp dưới dạng Json và điều này mang lại nhiều lợi ích:
- Nó là dạng lưu trữ data khá tự nhiên
- Cả dữ liệu cấu trúc và phi cấu trúc đều có thể được lưu trữ trong cùng 1 cấu trúc bản ghi
- Có thể sử dụng dữ liệu json lồng nhau để lưu các dữ liệu phức tạp
- Json giúp cho việc thêm/bớt các trường dữ liệu trở nên đơn giản hơn rất nhiều
Ví dụ lưu trữ bản ghi dưới dạng Json:
{
_id: ,
Emp_ID: "10025AE336"
Personal_details:{
First_Name: "Leo",
Last_Name: "Ronal",
Date_Of_Birth: "1995-09-26"
},
Contact: {
e-mail: "leo_ronal.123@gmail.com",
phone: "9848022338"
}
}
- Khả năng mở rộng: MongoDB hỗ trợ scale với tính năng Sharding. Điều này giúp cho chúng ta có thể mở rộng cụm mongodb dễ dàng
- Cộng đồng phát triển lớn
Khi nào nên sử dụng MongoDB
Việc lựa chọn một loại DB phụ thuộc vào rất nhiều yếu tố cả về kỹ thuật tới các chi phí phát triển và vận hành về sau.
Các bạn có thể tham khảo thêm một số trường hợp phù hợp sử dụng mongodb như:
- Sử dụng document để lưu trữ dữ liệu, dễ dàng thêm bớt, mở rộng dữ liệu tùy ý.
- Dữ liệu của bạn phức tạp hoặc có dạng phi cấu trúc
- Ứng dụng có tính chất Insert nhiều (write-intensive)
- Cần hệ thống có cơ chế dự phòng cao (High Availabity)
- Cần hệ thống có khả năng mở rộng nhanh chóng và dễ dàng
Một số thuật ngữ của MongoDB
Khi bạn đã quen làm việc với RDBMS thì chuyển sang MongoDB ban đầu sẽ có chút bỡ ngỡ vì một số khái niệm của RDBMS sẽ khác với MongoDB.
Các khái niệm cơ bản
- Database: Cơ sở dữ liệu, nơi lưu trữ các collection.
- Collection: Tương tự như một bảng trong SQL, nhưng không có cấu trúc cố định. Mỗi collection chứa một tập hợp các document.
- Document: Một bản ghi dữ liệu, có cấu trúc giống JSON. Mỗi document có thể chứa nhiều field.
- Field: Một thuộc tính của một document. Tương tự như một cột trong bảng SQL.
- _id: Một trường đặc biệt, tự động tạo ra và duy nhất cho mỗi document. Nó được sử dụng làm khóa chính để xác định một document.
Các khái niệm khác
- Query: Một truy vấn để tìm kiếm và lấy dữ liệu từ một collection.
- Index: Một cấu trúc dữ liệu được sử dụng để tăng tốc độ truy vấn.
- Aggregation: Một quá trình thực hiện các phép tính trên một tập hợp các document, chẳng hạn như tính tổng, tính trung bình, nhóm dữ liệu.
- Sharding: Quá trình phân chia dữ liệu của một collection ra nhiều máy chủ vật lý để tăng khả năng mở rộng và hiệu năng.
- Replica set: Một tập hợp các máy chủ MongoDB, trong đó một máy chủ làm máy chủ chính và các máy chủ còn lại làm máy chủ sao chép để đảm bảo tính sẵn sàng cao.