Nội dung chính
Được phát hành lần đầu vào tháng 2 năm 2009, MongoDB là một cơ sở dữ liệu hướng document mã nguồn mở được thiết kế để lưu trữ một lượng lớn dữ liệu và cho phép bạn làm việc với nguồn dữ liệu đó một cách hiệu quả. Nhưng điều gì thật sự khiến MongoDB nổi bật giữa các phần mềm quản lý cơ sở dữ liệu khác?
Đọc bài viết này để hiểu rõ hơn:
- MongoDB là gì?
- Cách MongoDB lưu trữ dữ liệu và hoạt động
- Ưu điểm và Khuyết điểm của MongoDB
- Những câu hỏi MongoDB thường gặp
MongoDB là gì?
MongoDB là một phần mềm mã nguồn mở dùng để quản trị cơ sở dữ liệu NoSQL.
NoSQL (Not only SQL) được sử dụng thay thế cho cơ sở dữ liệu quan hệ (Relational Database – RDB) truyền thống. Cơ sở dữ liệu NoSQL khá hữu ích trong khi làm việc với các tập dữ liệu phân tán lớn. MongoDB là một công cụ có thể quản lý thông tin hướng document cũng như lưu trữ hoặc truy xuất thông tin.
Trong khi đó, ngôn ngữ truy vấn có cấu trúc (SQL) là ngôn ngữ lập trình được tiêu chuẩn hóa, dùng để quản lý cơ sở dữ liệu quan hệ. Dữ liệu được chuẩn hóa SQL dưới dạng schema và table và mọi table đều có cấu trúc cố định.
Hiện nay, có nhiều công ty toàn cầu sử dụng MongoDB để lưu trữ lượng dữ liệu “khổng lồ” của họ như Facebook, Nokia, eBay, Adobe, Google,…
Việc làm MongoDB “chất” toàn quốc trên ITviec!
Công dụng của MongoDB
MongoDB giúp các tổ chức lưu trữ lượng lớn dữ liệu trong khi vẫn hoạt động nhanh chóng. Ngoài lưu trữ dữ liệu, MongoDB còn được sử dụng trong các trường hợp sau:
- Tích hợp một lượng lớn dữ liệu đa dạng
- Mô tả các cấu trúc dữ liệu phức tạp, biến hoá
- Cung cấp dữ liệu cho các ứng dụng hiệu suất cao
- Hỗ trợ các ứng dụng đám mây lai và đa đám mây
- Hỗ trợ phương pháp phát triển Agile
Thay vì sử dụng các table và row như trong cơ sở dữ liệu quan hệ, vì là cơ sở dữ liệu NoSQL, MongoDB được tạo thành từ collection và document. Document được tạo thành từ các cặp khóa-giá trị (là đơn vị dữ liệu cơ bản của MongoDB). Còn collection, tương đương với table trong SQL, là nơi chứa các bộ document.
Để hiểu rõ hơn về cách MongoDB lưu trữ dữ liệu, bạn đọc tiếp trong phần tiếp theo nhé.
Các thuật ngữ MongoDB thường dùng
_id
_id là một trường bắt buộc trong mọi document của MongoDB. _id được sử dụng để đại diện cho tính duy nhất của một document trong một collection. Trường _id hoạt động giống như khóa chính (primary key) của document.
_id là một số thập lục phân 12 byte đảm bảo tính duy nhất của mọi document. Bạn có thể cung cấp _id trong khi chèn document. Trong 12 byte này:
- 4 byte đầu tiên đại diện cho thời điểm hiện tại (dựa trên hệ giây của Unix Epoch);
- 3 byte tiếp theo cho id máy;
- 2 byte tiếp theo cho process id của máy chủ MongoDB;
- 3 byte cuối cùng là giá trị gia tăng đơn giản.
Nếu bạn không cung cấp được số id thì MongoDB sẽ tự động cung cấp một id duy nhất cho document của bạn.
Document
Document là đơn vị lưu trữ dữ liệu cơ bản trong cơ sở dữ liệu MongoDB. Document mang vai trò tương tự như row trong các hệ thống cơ sở dữ liệu quan hệ truyền thống.
Document là một cách để sắp xếp và lưu trữ dữ liệu dưới dạng một tập hợp các cặp field-value. Document trong MongoDB không cần phải có cùng một bộ field hoặc cấu trúc với các document khác trong cùng một collection.
Đồng thời, các field chung trong document của một collection có thể chứa các loại dữ liệu khác nhau.
Collection
Collection là một tập hợp các document MongoDB. Collection tương tự như table trong hệ thống cơ sở dữ liệu quan hệ. Các collection có tính chất schema less, do đó các document trong cùng một collection có thể có các trường khác nhau.
Thông thường, một collection chứa các document có mục đích tương tự hoặc liên quan với nhau.
Database
Trong MongoDB, database là một container vật lý chứa tập hợp các collection. Một database có thể chứa 0 collection hoặc nhiều collection.
Một phiên bản máy chủ MongoDB có thể lưu trữ nhiều database và không có giới hạn về số lượng database có thể được lưu trữ trên một phiên bản, nhưng giới hạn ở không gian bộ nhớ ảo có thể được phân bổ bởi hệ điều hành.
Mối tương quan giữa thuật ngữ MongoDB và RDBMS
RDBMS | MongoDB |
Database | Database |
Table | Collection |
Tuple/Row | Document |
Column | Field |
Table Join | Embedded Documents |
Primary Key | Primary Key (Khóa mặc định _id do chính MongoDB cung cấp) |
Việc làm MongoDB ở TP. HCM “chất” trên ITviec!
Việc làm MongoDB ở Hà Nội “chất” trên ITviec!
Việc làm MongoDB ở Đà Nẵng“chất” trên ITviec!
MongoDB hoạt động như thế nào?
MongoDB lưu trữ dữ liệu như thế nào?
Như chúng ta biết rằng MongoDB là một máy chủ cơ sở dữ liệu và dữ liệu được lưu trữ trong các cơ sở dữ liệu này. Hay nói cách khác, môi trường MongoDB cung cấp cho bạn một máy chủ mà bạn có thể khởi động và sau đó tạo nhiều cơ sở dữ liệu trên đó bằng MongoDB.
Nhờ vào cơ sở dữ liệu NoSQL, dữ liệu được lưu trữ dưới dạng collection và document. Do đó, cơ sở dữ liệu, collection và document có mối liên hệ với nhau như hình dưới đây:
Trong máy chủ MongoDB, bạn có thể tạo nhiều cơ sở dữ liệu và nhiều collection.
Cách cơ sở dữ liệu MongoDB chứa các collection cũng giống như cách cơ sở dữ liệu MySQL chứa các table.
Bên trong collection, chúng ta có document. Các document này chứa dữ liệu mà bạn muốn lưu trữ trong cơ sở dữ liệu MongoDB và một collection có thể chứa nhiều document. Đồng thời, với tính chất schema-less (không cần một cấu trúc lưu trữ dữ liệu), document này không nhất thiết phải giống với document khác.
Các document được tạo bằng cách sử dụng các field (trường). Các field là các cặp khóa-giá trị trong document, giống như các column trong cơ sở dữ liệu quan hệ. Giá trị của các field có thể là bất kỳ loại dữ liệu BSON nào như double, string, boolean, v.v.
MongoDB lưu trữ dữ liệu ở định dạng BSON document. Ở đây, BSON là đại diện cho định dạng mã hoá nhị phân của các tài liệu JSON (chữ B trong BSON là viết tắt của Binary). Hay nói cách khác, trong phần backend, máy chủ MongoDB chuyển đổi dữ liệu JSON thành dạng nhị phân, được gọi là BSON, và BSON này có thể được lưu trữ và truy vấn hiệu quả hơn.
Kích thước tối đa của BSON document là 16 MB.
Trong MongoDB document, bạn được phép lưu trữ dữ liệu lồng nhau. Việc lồng dữ liệu này cho phép bạn tạo các mối quan hệ phức tạp giữa dữ liệu và lưu trữ chúng trong cùng một document, giúp cho quá trình làm việc và tìm nạp dữ liệu hiệu quả hơn so với SQL.
MongoDB hoạt động như thế nào?
MongoDB hoạt động với hai layer:
- Layer Ứng dụng
- Layer Dữ liệu
Layer Ứng dụng còn được gọi là Layer Trừu tượng Cuối cùng (Final Abstraction Layer), gồm hai phần, đầu tiên là Front-end (Giao diện người dùng) và thứ hai là Back-end (máy chủ):
- Giao diện người dùng là nơi người dùng sử dụng MongoDB với sự trợ giúp của Web hoặc Di động. Web và thiết bị di động này bao gồm các trang web, ứng dụng di động, ứng dụng mặc định của Android, ứng dụng iOS, v.v.
- Phần back-end chứa một máy chủ được sử dụng để thực hiện logic phía máy chủ và cũng chứa trình điều khiển hoặc MongoDB shell để tương tác với máy chủ MongoDB với sự trợ giúp của truy vấn.
MongoDB shell là một bảng điều khiển JavaScript tương tác với MongoDB mà bạn có thể sử dụng để kết nối với máy chủ cơ sở dữ liệu và thực thi các lệnh trên đó, cho phép bạn thực hiện các tác vụ quản trị và đọc, viết hoặc thao tác dữ liệu trực tiếp.
Các truy vấn này được gửi đến máy chủ MongoDB thuộc Layer Dữ liệu. Bây giờ, máy chủ MongoDB nhận các truy vấn và chuyển các truy vấn đã nhận tới công cụ lưu trữ vì bản thân máy chủ MongoDB không trực tiếp đọc hoặc ghi dữ liệu vào tệp hoặc đĩa hoặc bộ nhớ.
Sau khi chuyển các truy vấn nhận được tới bộ máy lưu trữ, bộ máy lưu trữ chịu trách nhiệm đọc hoặc ghi dữ liệu trong tệp hoặc bộ nhớ.
Ưu điểm và khuyết điểm của MongoDB
Ưu điểm MongoDB
MongoDB mang đến cho người sử dụng một số ưu điểm:
- Không schema: Giống như các cơ sở dữ liệu NoSQL khác, MongoDB không yêu cầu các schema được xác định trước.
- MongoDB lưu trữ bất kỳ loại dữ liệu nào: Điều này cho phép người dùng linh hoạt tạo số lượng trường trong document theo nhu cầu, và giúp việc mở rộng cơ sở dữ liệu MongoDB trở nên dễ dàng hơn so với cơ sở dữ liệu quan hệ truyền thống.
- Hướng document: Một trong những ưu điểm của việc sử dụng document là các đối tượng này ánh xạ tới các kiểu dữ liệu gốc trong một số ngôn ngữ lập trình. Việc có các document được nhúng cũng làm giảm nhu cầu kết nối cơ sở dữ liệu, điều này có thể làm giảm chi phí.
- Khả năng mở rộng: Kiến trúc mở rộng theo chiều ngang của MongoDB giúp bạn tạo ra một ứng dụng có thể xử lý được lưu lượng truy cập tăng đột biến khi doanh nghiệp của bạn phát triển. Ngoài ra, việc phân chia dữ liệu (sharding) cho phép cơ sở dữ liệu phân phối dữ liệu trên một cụm máy. MongoDB cũng hỗ trợ tạo vùng dữ liệu dựa trên shard key.
- Hỗ trợ bên thứ ba: MongoDB hỗ trợ một số công cụ lưu trữ và cung cấp API công cụ lưu trữ có thể cắm được (pluggable storage engine API) cho phép các bên thứ ba phát triển công cụ lưu trữ dữ liệu riêng.
- Linh hoạt lưu trữ tệp dung lượng lớn: MongoDB phát triển hệ thống tệp riêng GridFS, gần giống với hệ thống tệp phân tán Hadoop. Việc sử dụng hệ thống tệp nhằm để lưu trữ các tệp vượt qua kích thước giới hạn của BSON (16 MB cho mỗi document).
Khuyết điểm MongoDB
Mặc dù MongoDB mang lại nhiều giá trị lớn, công cụ này vẫn có một số nhược điểm:
- Tính liên tục: Với chiến lược chuyển đổi dự phòng tự động, người dùng chỉ có thể thiết lập một node master trong cụm MongoDB. Nếu node master bị lỗi, một node khác sẽ tự động chuyển đổi thành master mới. Quá trình chuyển đổi này đảm bảo tính liên tục, nhưng không diễn ra tức thời mà có thể mất tới một phút.
Để bạn dễ so sánh, bạn có thể lấy cơ sở dữ liệu Cassandra NoSQL hỗ trợ nhiều node master làm ví dụ. Với Cassandra NoSQL, nếu một master ngừng hoạt động, một master khác sẽ sẵn sàng, tạo ra cơ sở hạ tầng cơ sở dữ liệu có tính sẵn sàng cao.
- Giới hạn ghi: Node master duy nhất của MongoDB cũng làm giới hạn lại tốc độ ghi dữ liệu vào cơ sở dữ liệu. Việc ghi dữ liệu phải được ghi trên node master và việc ghi thông tin mới vào cơ sở dữ liệu bị giới hạn bởi khả năng của node master đó.
- Tính nhất quán của dữ liệu: MongoDB không cung cấp tính toàn vẹn tham chiếu đầy đủ thông qua việc sử dụng các ràng buộc khóa ngoại (foreign-key), điều này có thể ảnh hưởng đến tính nhất quán của dữ liệu.
- Bảo mật: Tính năng xác thực người dùng không được mặc định bật trong cơ sở dữ liệu MongoDB. Để bảo mật hệ thống trước các cuộc tấn công của tin tặc, bạn có thể thủ công thiết lập các cài đặt chặn những kết nối lạ và không an toàn.
So sánh MongoDB và MySQL
Hãy so sánh trực tiếp những khái niệm cơ bản nhất của hai cơ sở dữ liệu phổ biến này:
MongoDB | MySQL | |
Ưu tiên | Thân thiện với cloud | Mức độ bảo mật dữ liệu cao |
Cấu trúc dữ liệu | Không cấu trúc, hoặc cấu trúc dữ liệu có tiềm năng phát triển nhanh | Có cấu trúc |
Đại diện dữ liệu | JSON document | Table và row |
Hỗ trợ JOIN | Không | Có |
Ngôn ngữ truy vấn | JavaScript | SQL |
Schema | Không cần schema | Cần xác định column và table |
Hiệu suất phát triển | Nhanh | Chậm |
Tính nguyên tử của transaction | Không hỗ trợ đầy đủ tất cả các hoạt động nhưng hỗ trợ các transaction đa document | Hỗ trợ tính nguyên tử của transaction |
Các câu hỏi MongoDB thường gặp
Những ngôn ngữ được hỗ trợ bởi MongoDB
Nhiều developer đánh giá cao việc MongoDB đảm bảo rằng cơ sở dữ liệu có thể được sử dụng từ nhiều ngôn ngữ lập trình khác nhau, bao gồm C, C# và .NET, C++, Go, Java, JavaScript, PHP, Python, Ruby, Rust, Scala và Swift.
MongoDB có những phiên bản nào? Tốn phí không?
MongoDB hiện cung cấp 2 phiên bản chính là: Community và Enterprise. MongoDB Community là phiên bản cơ bản và miễn phí.
Phiên bản MongoDB Community bao gồm một vài tính năng như:
- Phù hợp với việc hỗ trợ cho các ứng dụng hiện đại và khối lượng công việc nhỏ hơn
- Schema linh hoạt
- Ngôn ngữ truy vấn dựa trên JSON
- Tổng hợp thời gian thực
- Sao chép tích hợp và chuyển đổi dự phòng tự động
- Phân chia dữ liệu native
- Truy vấn đặc biệt
- Miễn phí
MongoDB Enterprise là phiên bản có tính phí và đi kèm với nhiều tính năng phù hợp với các tổ chức lớn hơn và những tổ chức có khối lượng công việc quan trọng, cụ thể:
- Phù hợp với các dự án phát triển và khối lượng công việc cấp doanh nghiệp
- Các tính năng bảo mật bao gồm công cụ lưu trữ được mã hóa và kiểm soát truy cập Kerberos
- Trực quan hóa dữ liệu trực tiếp từ cơ sở dữ liệu
- Tính khả dụng cao và thông lượng cao
- Công cụ lưu trữ trong bộ nhớ
- Chi phí khoảng $6000 – $13000 mỗi năm
MongoDB phù hợp với những nền tảng nào?
MongoDB có thể hoạt động với các nền tảng gồm Linux, macOS, Windows, Docker, cho cả phiên bản Community và phiên bản Enterprise. Bạn có thể theo dõi cụ thể cách cài đặt MongoDB trên từng nền tảng theo bảng sau:
Tổng kết
Qua bài viết trên, mong bạn đã có thể hiểu rõ được MongoDB là gì, cách MongoDB hoạt động, những ưu điểm và khuyết điểm khi sử dụng MongoDB,… để bạn và doanh nghiệp có thể đưa ra quyết định đúng hơn trước khi sử dụng phần mềm quản lý cơ sở dữ liệu MongoDB.
Bạn có thể tìm đọc MongoDB Documentation để hiểu thêm về phần mềm này nhé!
Tổng hợp một số bài viết hay về MongoDB:
- MongoDB vs MySQL: Khi nào nên sử dụng CSDL nào?
- MariaDB vs MySQL: “Cuộc chiến” cơ sở dữ liệu mã nguồn mở
Bạn thấy bài viết hay và hữu ích? Đừng ngại Share với bạn bè và đồng nghiệp nhé.
Và nhanh tay tham khảo việc làm IT “chất” trên ITviec!