Để đáp ứng nhu cầu lưu trữ và truy xuất dữ liệu ngày càng lớn, các hệ quản trị cơ sở dữ liệu DBMS đã trở thành một phần không thể thiếu trong các ứng dụng này.. - Các hệ quản trị cơ sở d
TỔNG QUAN
Đặt vấn đề
- Trong những năm gần đây, với sự phát triển của công nghệ thông tin, các ứng dụng web và di động ngày càng trở nên phổ biến Để đáp ứng nhu cầu lưu trữ và truy xuất dữ liệu ngày càng lớn, các hệ quản trị cơ sở dữ liệu (DBMS) đã trở thành một phần không thể thiếu trong các ứng dụng này
- Các hệ quản trị cơ sở dữ liệu truyền thống, hay còn gọi là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), được thiết kế để lưu trữ và truy xuất dữ liệu theo cấu trúc bảng Tuy nhiên, RDBMS có một số hạn chế khi áp dụng cho các ứng dụng webD và di động, chẳng hạn như:
● Không linh hoạt: RDBMS yêu cầu dữ liệu phải được định nghĩa trước theo một lược đồ nhất định Điều này có thể gây khó khăn khi cần lưu trữ dữ liệu có cấu trúc linh hoạt, chẳng hạn như dữ liệu về người dùng, sản phẩm, hoặc bài viết
● Không hiệu quả: RDBMS thường có hiệu suất thấp khi thực hiện các truy vấn phức tạp, chẳng hạn như truy vấn kết hợp dữ liệu từ nhiều bảng
● Khó mở rộng: RDBMS có thể gặp khó khăn khi cần mở rộng quy mô để đáp ứng nhu cầu lưu trữ và truy xuất dữ liệu ngày càng lớn
- Để khắc phục những hạn chế này, các hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) đã ra đời NoSQL là một loại DBMS không yêu cầu dữ liệu phải được định nghĩa trước theo một lược đồ nhất định Điều này giúp NoSQL linh hoạt hơn RDBMS khi lưu trữ dữ liệu có cấu trúc linh hoạt
- MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL phổ biến MongoDB lưu trữ dữ liệu dưới dạng các tài liệu (document) theo phong cách JSON Điều này giúp MongoDB có thể lưu trữ dữ liệu có cấu trúc linh hoạt, đồng thời vẫn đảm bảo hiệu suất cao và khả năng mở rộng tốt
- Với những ưu điểm như trên, MongoDB được ứng dụng trong nhiều lĩnh vực khác nhau, bao gồm:
● Ứng dụng web và di động: MongoDB được sử dụng để lưu trữ dữ liệu người dùng, dữ liệu sản phẩm, hoặc dữ liệu bài viết trong các ứng dụng web và di động
● Ứng dụng phân tích dữ liệu: MongoDB được sử dụng để lưu trữ và truy xuất dữ liệu phân tích từ các nguồn khác nhau
● Ứng dụng IoT: MongoDB được sử dụng để lưu trữ và truy xuất dữ liệu từ các thiết bị IoT.
Mục tiêu đề tài
- Mục tiêu của đề tài này là tìm hiểu về hệ quản trị cơ sở dữ liệu MongoDB Cụ thể, đề tài sẽ bao gồm các nội dung sau:
● Các đặc điểm của MongoDB
● Các ưu điểm và nhược điểm của MongoDB
● Các ứng dụng của MongoDB.
Phân công công việc
Tên Mã sinh viên Công việc
Hoàng Công Thành 20010826 Tìm hiểu tổng quan về hệ quản trị
CSDL MONGODB, NoSQL,Xây dựng ứng dung sử dụng hệ quản trị MONGGODB, kết luận
Nguyễn Long Nhật 20010974 Tìm hiểu tổng quan về hệ quản trị
CSDL MONGODB, NoSQL,Xây dựng ứng dung sử dụng hệ quản trị MONGGODB, kết luận
Hoàng Đình Thái 20010823 Tổng quan xây dựng đề tài, Tổng hợp báo cáo, Hỗ trợ xây dựng ứng dụng sử dụng hệ quản trị mongoDB
Nguyễn Tiến Công 20011025 Tìm hiểu và nghiên cứu tài liệu quản trị thành phần mongoDB,slide
Trương Quang Vinh 20010834 Tìm hiểu tổng quan về hệ quản trị
CSDL MONGODB, NoSQL, quản trị thành phần, slide,
Vũ Minh Tuấn 20010833 Tìm hiểu và nghiên cứu tài liệu quản trị thành phần mongoDB,slide
Bùi Văn Tuân 20010691 Tìm hiểu và nghiên cứu tài liệu quản trị thành phần mongoDB,slide
TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB 9 I Một số khái niệm cơ bản
Cơ sở dữ liệu (Database)
- Cơ sở dữ liệu ( Database) là một thuật ngữ được sử dụng thường xuyên trong lĩnh vực công nghệ thông tin Theo các chuyên gia, CSDL được định nghĩa là “ một tập hợp các dữ liệu có tổ chức, thường được lưu trữ và truy cập điện tử từ hệ thống máy tính.” Hay có thể hiểu CSDL là một tập hợp các dữ liệu có liên quan với nhau về mặt luận lý đã được tổ chức và sắp xếp Hiện nay CSDL được phân làm 2 loại bao gồm :
● SQL: Dữ liệu được mô hình hóa dưới dạng các hàng và cột trong bảng, sử dụng ngôn ngữ T-SQL để truy vấn dữ liệu
● NoSQL: bao gồm các loại dữ liệu phi quan hệ được mô hình hóa dưới dạng các loại phương tiện khác CSDL này được gọi là NoSQL vì nó sử dụng các ngôn ngữ truy vấn khác SQL
Hình 1 Cơ sở dữ liệu SQL và NoSQL
Hệ quản trị cơ sở dữ liệu (DBMS)
- Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS) là phần mềm tương tác với người dùng cuối, các ứng dụng và chính CSDL để thu thập và phân tích các CSDL này Hệ quản trị CSDL và CSDL luôn có mối quan hệ chặt chẽ với nhau.
Hình 2 Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu
Cở sở dữ liệu quan hệ (Database Relationship)
- Năm 1970, thuật ngữ “cơ sở dữ liệu quan hệ” đã được giới thiệu bởi EF Codd tại IBM trong tài liệu nghiên cứu của mình “ A relational Model of Data for Large Shared Data Banks” Trong tài liệu này, ông đã định nghĩa thuật ngữ “Cơ sở dữ liệu quan hệ” như sau: “Cơ sở dữ liệu quan hệ tổ chức dữ liệu theo các bảng và có quan hệ với nhau để giảm thiểu sự dư thừa dữ liệu đồng thời vẫn đảm bảo sự hiệu quả trong lưu trữ và truy xuất dữ liệu”
- Ngày nay , cơ sở dữ liệu quan hệ được sử dụng phổ biến trong hầu hết các phần mềm quản lý dữ liệu
Hình 3 Cơ sở quan hệ dữ liệu
Giới thiệu
- Cơ sở dữ liệu NoSQL (viết tắt của “Not SQL” hoặc “Not Only SQL”) là một cơ sở dữ liệu không quan hệ (Non-Relational) NoSQL là tên gọi chung cho các cơ sở dữ liệu không sử dụng các bảng như MySQL hay SQL Server Nó không sử dụng mô hình cơ sở dữ liệu quan hệ (RDBMSs) để lưu trữ và truy cập dữ liệu mà sử dụng mô hình lưu trữ key - value Thay vì lưu trữ dữ liệu trong các bảng như một cơ sở dữ liệu truyền thống, một CSDL NoSQL lưu trữ từng hạng mục riêng với một khóa duy nhất Ngoài ra, NoSQL còn là một hệ thống sử dụng dữ liệu phân tán Tức là dữ liệu của hệ thống này không chỉ bao gồm những gì mà chúng ta nhập vào mà còn có thể là dữ liệu từ các file hoặc video, và chúng được lưu trữ ở nhiều server khác nhau Điều này cung cấp một cách tiếp cận nhiều linh hoạt hơn để lưu trữ dữ liệu hơn là một cơ sở dữ liệu quan hệ
- Với việc lưu trữ dữ liệu phân tán, NoSQL hỗ trợ rất tốt trong việc xử lý một khối lượng lớn dữ liệu lên đến hàng petabytes mà không cần phải có tài nguyên phần cứng cao Nó chia dữ liệu của mình ra để lưu trữ trên nhiều Server khác nhau tạo điều kiện cho việc mở rộng theo chiều ngang một cách thuận lợi với chi phí không quá cao Bên cạnh đó, việc lưu trữ trên nhiều Server cũng làm cho NoSQL có độ chịu tải và độ chịu lỗi cao Nhiều hệ thống cơ sở dữ liệu NoSQL cũng sử dụng mã nguồn mở
1.2 Lịch sử phát triển của NoSQL
- Thuật ngữ NoSQL được giới thiệu lần đầu tiên bởi Carlo Stozzi vào năm 1998, lúc này nó còn được gọi là Lightweight open source relational database Tuy nhiên, các khái niệm về cơ sở dữ liệu này vẫn chưa được hoàn thiện và vẫn còn mang hướng cơ sở dữ liệu quan hệ Đến đầu năm 2009, trong sự kiện thảo luận về “ các cơ sở dữ liệu phân tán , không quan hệ nguồn mở”, Johan Oskarsson của Last.fm đã giới thiệu lại thuật ngữ NoSQL
- Đây là một cột mốc đánh dấu sự phát triển của hệ cơ sở dữ liệu mới - NoSQL
Từ đó, NoSQL trở nên phát triển và phổ biến và đặc biệt thông dụng với các mạng xã hội như: Facebook, Twitter,
1.3 Một số thuật ngữ trong NoSQL
- Không ràng buộc ( Non Relational)
- Khả năng mở rộng ( High Scalability)
- Khả năng mở rộng theo chiều dọc ( Vertical scalable)
- Khả năng mở rộng theo chiều ngang ( Horizontal scalable)
- Phân tán dữ liệu ( Distributed data)
- Triển khai linh hoạt ( Deployment Flexibility)
- Tính sẵn sàng (High Availability)
- Nhất quán cuối ( Eventual consistency)
1.4 So sánh CSDL NoSQL và CSDL SQL
Hiện nay, có 2 loại hình cơ sở dữ liệu phổ biến nhất là SQL và NoSQL Tuy cả hai đều được sử dụng phổ biến nhưng chúng vẫn có những điểm khác nhau như sau:
Loại hình Mỗi database được xây Mỗi database được xây dựng dựa trên các bảng có dựng dựa trên các tài liệu quan hệ với nhau, mỗi (document) hàng ứng với một record, mỗi cột ứng với một field Ngôn ngữ dữ liệu SửdụngStructured Không có ngôn ngữ
Hiệu suất Kém hơn NoSQL vì mỗi Tốt hơn SQL vì nó bỏ qua khi truy vấn nó phải tính các ràng buộc của dữ liệu toán, kiểm tra và xử lý các mối quan hệ giữa các bảng để đảm bảo tính nhất quán của dữ liệu
Khả năng mở rộng SQL có thể mở rộng theo NoSQL có thể dễ dàng chiều dọc và chiều ngang mở rộng theo chiều dọc nhưng quá trình mở rộng và chiều ngang do các dữ theo chiều ngang sẽ rất liệu đưa vào không phải phức tạp nếu đã tồn tại dữ phụ thuộc vào cấu trúc liệu trong database Khi bảng cho trước Dữ liệu muốn bổ sung thêm một có thể thêm vào bất kỳ lúc cột dữ liệu thì phải khai nào báo trước
Tốc độ đọc/ghi Kém hơn NoSQL vì nó Tốc độ nhanh vì NoSQL phải đảm bảo tính ràng bỏ qua các ràng buộc về buộc dữ liệu giữa các dữ liệu của các bảng bảng Nếu dữ liệu được lưu trữ trên nhiều server thì phải bảo đảm tính nhất quán về dữ liệu trên các Server với nhau
EU LUAOI download : skknchat@gmail.com
Phần cứng Đòi hỏi phần cứng cao Không đòi hỏi quá cao về phần cứng Thay đổi số node trong hệ Do yêu cầu về tính nhất Do NoSQL có tính nhất thống quán dữ liệu nên khi ta quán cuối nên sẽ không thêm hoặc xóa một node cần phải Shutdown hệ bất kì thì cần phải thống như SQL shutdown hệ thống trong một khoảng thời gian Truy vấn và báo cáo Có thể dễ dàng sử dụng NoSQL chưa hỗ trợ việc ngôn ngữ Query để truy lấy báo cáo dữ liệu trực vấn dữ liệu trực tiếp từ tiếp, việc lấy báo cáo thực database hoặc sử dụng hiện chủ yếu thông qua các công cụ hỗ trợ khác giao diện ứng dụng Ứng dụng Được sử dụng cho các hệ Được sử dụng để xây thống cần mối quan hệ dựng các hệ thống lưu trữ chặt chẽ và tính đồng nhất số lượng dữ liệu lớn, về dữ liệu, số lượng dữ không quá quan trọng về liệu không quá nhiều vấn đề đồng nhất dữ liệu Như : tài chính , ngân trong một thời gian nhất hàng, định Như: các mạng xã hội, trang thương mại điện tử
Qua bảng trên ta có thể thấy NoSQL có những ưu điểm vượt trội hơn SQL về khả năng xử lý và lưu trữ dữ liệu Nhưng NoSQL không thể thay thế được SQL mà chúng sẽ hỗ trợ, bổ sung cho SQL để xây dựng một hệ thống tốt hơn Hiện nay, trên thế giới đã có sự xuất hiện của một loại cơ sở dữ liệu mới, là sự kết hợp giữa NoSQL và SQL , tên là NewSQL
Hình 4 Sự khác nhau giữa NoSQL và SQL trong ứng dụng và cấu trúc lưu trữ 1.5 Phân loại các CSDL NoSQL
- Ngày nay, với sự phổ biến của NoSQL, thì cơ sở dữ liệu này cũng được phát triển và phân thành nhiều loại khác nhau, các loại Cơ sở dữ liệu này khác nhau về cách lưu trữ dữ liệu Chúng được chia thành 5 nhóm như sau:
✔ Key-value: Đây là cơ sở dữ liệu được phát triển dựa trên ý tưởng sử dụng bảng băm (hash – table), nó có một khóa duy nhất và một con trỏ chỉ đến một mục dữ liệu cụ thể
✔ Cơ sở dữ liệu này có khả năng phân mảnh cao và cho phép mở rộng quy mô theo chiều ngang ở các quy mô lớn Các mô hình loại này đơn giản và dễ thực hiện nhưng nó không hiệu quả khi chỉ truy vấn hoặc update đến một phần dữ liệu trong value
✔ Cơ sở dữ liệu NoSQL loại Key-values thường được sử dụng cho trò chơi, công nghệ quảng cáo và đặc biệt thích hợp cho IoT
Hình 5 Mô tả lưu trữ của CSDL nhóm Key-Value
- Cơ sở dữ liệu tài liệu ( Document Database) :Loại này được xây dựng dựa trên ý tưởng từ Lotus Noted và tương tự như loại Key- value Mô hình này bao gồm tập hợp nhiều document Bên trong mỗi document là tập hợp các key- value và các cặp key-value này được lồng ghép với nhau Dữ liệu trong những document này thường được biểu diễn dưới dạng một đối tượng văn bản hoặc JSON Với loại cơ sở dữ liệu NoSQL này thì việc truy vấn sẽ được thực hiện hiệu quả hơn Tính chất linh hoạt và phân cấp của văn bản cho phép chúng phát triển phù hợp với yêu cầu của ứng dụng Hiện nay, Amazon DocumentDB và MongoDB là các cơ sở dữ liệu tài liệu phổ biến cung cấp các API mạnh mẽ và trực quan để phát triển linh hoạt và lặp lại
Hình 6 Document Database ở định dạng JSON và XML
- Cơ sở dữ liệu “Column Family”: Cơ sở dữ liệu này được tạo ra để lưu và xử lý lượng lớn dữ liệu trên nhiều server Nó lưu trữ dữ liệu trong nhiều cột, nhiều dòng và mỗi dòng sẽ có key riêng Column Family bao gồm một nhóm các dữ liệu có liên quan và được truy cập cùng nhau Một số cơ sở dữ liệu dạng này phổ biến hiện này là: Cassandra, Amazon DynamoDB,
Hình 7 Một record được lưu trữ trong cơ sở dữ liệu "Collumn Family"
Lựa chọn phiên bản cài đặt
- Từ khi được công bố đến hiện tại, MongoDB Inc đã cho phát hành tổng cộng 18 versions của MongoDB Bảng dưới đây sẽ liệt kê danh sách các versions đã được phát hành ( tính đến ngày 01/01/2024) :
Phiên Ngày phát hành Ghi chú tính năng
1.2 Tháng 12/2009 Nhiều chỉ mục hơn cho mỗi bộ sưu tập
Tạo chỉ mục nhanh hơn Sắp xếp/ rút gọn
Các hàm JavaScript được lưu trữ Thời gian fsync có thể định cấu hình Một số tính năng nhỏ và các bản sửa lỗi 1.4 Tháng 3/ 2010
1.6 Tháng 8/ 2010 Sharding sẵn sàng sản xuất
Hỗ trợ cho IPv6 1.8 Tháng 3/ 2011
2.4 Tháng 3/ 2013 Hỗ trợ không gian địa lý nâng cao
Chuyển sang công cụ JavaScript V8 Cải tiến bảo mật
Tìm kiếm văn bản (beta)
2.6 Ngày 08/04/ Cải tiến tổng hợp
2014 Tích hợp tìm kiếm văn bản
Cải tiến công cụ truy vấn Giao thức thao tác ghi mới Cải tiến bảo mật
3.0 Ngày 03/03/ Hỗ trợ công cụ lưu trữ WiredTiger
2015 Công cụ lưu trữ có thể cắm được API
Xác thực SCRAM-SHA-1 Cải thiện chức năng giải thích MongoDB Ops Manager 3.2 Ngày 08/12/ Công cụ lưu trữ WiredTiger theo mặc định
2015 Cải tiến bầu cử nhân rộng
Cấu hình máy chủ dưới dạng tập hợp bản sao ReadConcern
Xác nhận tài liệu Chuyển từ V8 sang SpiderMonkey
3,4 Ngày 29/11/ Mối quan tâm đọc tuyến tính Lượt xem Đối chiếu
2016 3.6 Tháng 11/ 2017 Thêm tính năng Aggregation
Phiên bản này cung cấp các cải tiến về hiệu suất, tính năng và bảo mật
Phiên bản này cũng hỗ trợ các hoạt động DDL
Hiện nay, MongoDB cung cấp 2 phiên bản cài đặt, Community Server và Enterprise Server Trong đó Community là phiên bản miễn phí, còn Enterprise là phiên bản thương mại, thường dành cho các doanh nghiệp và cần phải trả tiền để sử dụng nó Trong bài luận này, em sẽ sử dụng phiên bản Community Server version 4.4.6 cho hệ điều hành Windows để cài đặt và cấu hình.
IV Cài đặt và cấu hình
- Để cài đặt phần mềm MongoDB, đầu tiên ta sẽ truy cập vào trang chủ https://www.mongodb.com/try/download/community để tải phần mềm Ở giao diện tải phần mềm, sẽ có 2 lựa chọn là download file cài đặt msi hoặc download file zip Khi chọn download file zip, ta chỉ cần giải nén ra không cần cài đặt gì, sau đó bắt đầu cấu hình.ad : skkn chat
- Tiếp theo, ta khởi chạy file mongodb-windows-x86_64-4.4.6-signed vừa tải về
- Chọn ‘I accept the terms in the License Agreement’ và chọn Next để bắt đầu cấu hình phần mềm cho việc cài đặt:
- Ở bước này, ta có 2 lựa chọn để cài đặt:
✔ Complete: với lựa chọn này, tất cả các chức năng sẽ được tự động cài đặt và sẽ chiếm nhiều dung lượng ổ cứng
✔ Custom: với lựa chọn này ta có thể tùy chọn các chức năng muốn cài và dung lượng ổ cứng cài đặt sẽ giảm đi
- Đối với người mới sử dụng thì MongoDB đề xuất chọn Complete để cài đặt tất cả các phần mềm hỗ trợ
- Sau khi đã chọn kiểu cài đặt, ta tiếp tục cấu hình service như sau:
- Sau khi cài đặt xong , chọn Finish để kết thúc quá trình cài đặt và cấu hình
V Các thành phần của MongoDB
- Về mặt kiến trúc , MongoDB gồm có 4 thành phần:
❖ MongoDB: đây là một node để lưu trữ và truy xuất dữ liệu
❖ Shard: đây là một tập hợp gồm nhiều Mongod tạo thành một cụm dữ liệu , mỗi mongodb là một bản sao dữ liệu Nó có kiến trúc Master- Slave Do đó trong mỗi Shard sẽ có một bản sao là Master và các bản sao còn lại là Slave Trong đó, chỉ có Master là có thể đọc và ghi dữ liệu, các slave còn lại chỉ cho phép đọc dữ liệu
❖ Config server: nó hoạt động như một bộ chứa siêu dữ liệu trong MongoDB về các đối tượng được lưu trữ trong các mongod Config server sẽ được sử dụng trong trường hợp các mongod bị lỗi Thường trong một hệ cơ sở dữ liệu MongoDB sẽ có từ 1 đến 3 Config Server
❖ Mongos: Đây là thành phần duy nhất có thể giao tiếp với các thành phần bên ngoài Nó sẽ tiếp nhận yêu cầu từ máy khách và chuyển tiếp các yêu cầu này đến vùng thích hợp
- Các thành phần này giao tiếp với nhau, trao đổi qua lại trong hệ thống và tạo cho MongoDB một cơ chế hoạt động đặc biệt đó là sharding Với cơ chế này, MongoDB sẽ chia nhỏ một khối dữ liệu lớn ra nhiều phần khác nhau để lưu trữ phân tán Điều này giúp tăng khả năng mở rộng, lưu trữ và xử lý của hệ thống này Các bản dữ liệu sau khi chia nhỏ sẽ được nhân bản thành nhiều MongoDB Tập hợp các MongoDB này sẽ được gọi mà một shard Mỗi MongoDB có thể là một collection hoặc một phần của collection và một collection có thể được lưu trữ trải dài trên nhiều shard Địa chỉ, cấu hình của các shard này sẽ được lưu trữ trên 1 máy chủ là config server Nhờ đó, khi tiếp nhận một yêu cầu từ máy khách, thành phần mongod sẽ tìm kiếm vị trí các dữ liệu được yêu cầu trong config server Sau khi đã có được địa chỉ của shard chứa dữ liệu cần, mongod sẽ vào kho chứa các shard để lấy dữ liệu đó ra để xử lý và trả về cho máy khách.
QUẢN TRỊ THÀNH PHẦN VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB
Bộ sưu tập
- Tạo Collection trong MongoDB đề cập đến quá trình tạo ra một nhóm chứa các tài liệu có liên quan trong cùng một không gian tên Đây là cách MongoDB tổ chức và lưu trữ dữ liệu, giúp người quản trị dễ dàng quản lý và truy xuất thông tin
- Tổ Chức Dữ Liệu: Collection giúp tổ chức dữ liệu một cách có tổ chức, giúp tìm kiếm và quản lý dữ liệu dễ dàng hơn
- Phân Loại Dữ Liệu: Mỗi Collection có thể đại diện cho một loại dữ liệu cụ thể, chẳng hạn như thông tin khách hàng, sản phẩm, hoặc đơn hàng, giúp phân loại dữ liệu hiệu quả
- Quản Lý Quyền Truy Cập: Collection cho phép thiết lập các quyền truy cập riêng lẻ, điều này giúp kiểm soát việc truy cập và sửa đổi dữ liệu
- Tối Ưu Hóa Hiệu Suất: Việc tách dữ liệu thành các Collection nhỏ giúp tối ưu hóa hiệu suất truy xuất dữ liệu
- Trong MongoDB, khái niệm collection tương ứng với khái niệm bảng trong SQL Nhưng khác với table trong SQL, collection trong MongoDB không có số lượng cột cố định (vì data lưu trữ dưới dạng JSON), khi hiển thị thì mỗi field sẽ hiển thị giống như 1 cột
- Để tạo collection trong MongoDB ta dùng lệnh sau:
- Trong đó name là tên của collection, options là các tùy chọn kèm theo như kích thước, khả năng index…
- Ví dụ: Tạo collection customer cho database stackjava
- Hiển thị các collection bằng lệnh show collections ta sẽ thấy xuất hiện collection customer
- Ví dụ tạo collection với các tùy chọn (options)
- Một cách khác để tạo collection nữa đó là insert một bản ghi (document) và collection, nếu collection đó chưa tồn tại thì nó sẽ được tạo tự động
- Ví dụ mình insert bản ghi {"name":"Thor"} vào collection marvel
2 Một số kiểu dữ liệu trong MongoDB
- MongoDB hỗ trợ nhiều kiểu dữ liệu linh hoạt, từ các kiểu cơ bản đến các kiểu phức tạp, cho phép người phát triển và quản trị dễ dàng làm việc với dữ liệu Dưới đây là một số kiểu dữ liệu quan trọng:
❖ Kiểu dữ liệu scalar : integer, double, boolean
❖ Kiểu chuỗi ký tự : string (UTF-8), regular expression, code (JavaScript)
❖ Ngoài ra còn có : Null, Undefined, array, date, …
- Sự tương đồng giữa các khái niệm trong mô hình dữ liệu SQL và MongoDB
- Thao tác CRUD bao gồm Create (Tạo), Read (Đọc), Update (Cập Nhật), và Delete (Xóa) - là bốn thao tác cơ bản quản lý dữ liệu trong MongoDB
❖ Mục Đích: Thêm dữ liệu mới vào Collection
❖ Cách Thực Hiện: Sử dụng lệnh insertOne() hoặc insertMany() để thêm một hoặc nhiều tài liệu mới vào Collection
❖ Mục Đích: Truy vấn và đọc dữ liệu từ Collection
❖ Cách Thực Hiện: Sử dụng lệnh find() để truy vấn dữ liệu và findOne() để truy vấn một tài liệu đầu tiên thỏa mãn điều kiện
❖ Mục Đích: Cập nhật dữ liệu đã có trong Collection
❖ Cách Thực Hiện: Sử dụng lệnh updateOne() hoặc updateMany() để cập nhật một hoặc nhiều tài liệu dựa trên điều kiện
❖ Mục Đích: Xóa dữ liệu từ Collection
❖ Cách Thực Hiện: Sử dụng lệnh deleteOne() hoặc deleteMany() để xóa một
4 Một số toán tử so sánh
- Toán tử so sánh là công cụ quan trọng trong truy vấn MongoDB, giúp xác định các điều kiện để lọc dữ liệu trong các thao tác đọc, cập nhật và xóa
- Toán tử so sánh cơ bản:
$eq (Equal): So sánh bằng
$ne (Not Equal): So sánh không bằng
$gt (Greater Than): So sánh lớn hơn
$lt (Less Than): So sánh nhỏ hơn
$gte (Greater Than or Equal): So sánh lớn hơn hoặc bằng
$lte (Less Than or Equal): So sánh nhỏ hơn hoặc bằng
- Toán Tử So Sánh Chuỗi:
$regex (Regular Expression): So sánh theo biểu thức chính quy
$options (Options): Cung cấp các tùy chọn cho toán tử $regex
- Toán Tử So Sánh Mảng:
$in (In): Kiểm tra xem một giá trị có thuộc một mảng hay không
$nin (Not In): Kiểm tra xem một giá trị có không thuộc một mảng hay không
$all (All): Kiểm tra xem tất cả các giá trị trong mảng có tồn tại trong một tập hợp cho trước hay không
- Toán Tử So Sánh Ngày Tháng:
$lt (Less Than): So sánh ngày nhỏ hơn
$lte (Less Than or Equal): So sánh ngày nhỏ hơn hoặc bằng
$gt (Greater Than): So sánh ngày lớn hơn
$gte (Greater Than or Equal): So sánh ngày lớn hơn hoặc bằng
Lấy tất cả sinh viên có điểm cuối kỳ lớn hơn 80 db.students.find({ grades: { $gt: 80 } });
Lấy tất cả sản phẩm có giá bằng hoặc thấp hơn 100 db.products.find({ price: { $lte: 100 } });
Lấy tất cả người dùng có tên bắt đầu bằng "A" db.users.find({ name: { $regex: /^A/i } });
Khung nhìn
- Tạo Khung Hình (Aggregation Framework) trong MongoDB là một công cụ mạnh mẽ giúp xử lý và phân tích dữ liệu từ các bộ sưu tập (collections) Nó cung cấp các phép toán linh hoạt để thực hiện các phức tạp hóa dữ liệu, như nhóm, sắp xếp, và tính toán tổng hợp
- Phức Tạp Hóa Dữ Liệu: Cho phép thực hiện các phép toán như nhóm, sắp xếp, và tổng hợp để hiểu rõ hơn về dữ liệu
- Tối Ưu Hóa Truy Vấn: Giảm số lượng truy vấn và tối ưu hóa hiệu suất trong việc truy xuất dữ liệu
- Chuyển Đổi Dữ Liệu: Chuyển đổi dữ liệu thành định dạng phù hợp cho nhu cầu cụ thể của ứng dụng hoặc báo cáo
2 Các hạn chế trên khung hình
- Hiệu Suất: Trong các tình huống lớn, việc sử dụng khung nhìn có thể ảnh hưởng đến hiệu suất do tất cả các phép toán được thực hiện trên bộ nhớ
- Phức Tạp: Các truy vấn phức tạp có thể làm tăng độ phức tạp của pipeline và làm cho mã trở nên khó hiểu
- Không Thích Hợp cho Một Số Trường Hợp: Trong một số trường hợp, sử dụng các phép toán đơn giản hơn như find có thể hiệu quả hơn
❖ Indexing: Sử dụng chỉ mục đúng cách để cải thiện hiệu suất truy vấn
❖ Optimization: Tối ưu hóa pipeline bằng cách chọn các phép toán hiệu quả và sử dụng projection để giảm kích thước tài liệu kết quả
❖ Nhóm Hóa Dữ Liệu: Tránh sử dụng khung nhìn cho những truy vấn đơn giản hoặc khi không cần phức tạp hóa dữ liệu
3 Các thao tác được hỗ trợ trên khung hình
3.1 Các phép toán phổ biến
- $match: Lọc dữ liệu dựa trên điều kiện cụ thể
- $group: Nhóm dữ liệu dựa trên một hoặc nhiều trường
- $project: Chọn và chuyển đổi các trường dữ liệu
- $sort: Sắp xếp dữ liệu theo một hoặc nhiều trường
- $limit và $skip: Giới hạn số lượng kết quả và bỏ qua một số kết quả
3.2 Các phép toán hỗ trợ
- $lookup: Kết hợp dữ liệu từ các bộ sưu tập khác
- $unwind: Mở rộng các mảng thành các bản ghi riêng lẻ
- $facet: Thực hiện nhiều giai đoạn của pipeline và trả về nhiều tập kết quả 3.3 Sử dụng các biểu diễn toán tử
- Toán Tử Aggregation: Sử dụng các biểu diễn như $sum, $avg, $max, $min để thực hiện các phép toán tổng hợp
- Biểu Diễn Regular Expression: Sử dụng $regex để thực hiện các phép so sánh chuỗi linh hoạt
- Ví dụ: Lọc sinh viên có điểm trung bình cao hơn 7 db.students.aggregate([{ $match: { avgGrade: { $gt: 7 } } }]);
- Ví dụ: Nhóm sinh viên theo khóa học và tính tổng số lượng sinh viên trong mỗi khóa học db.students.aggregate([{ $group: { _id: "$course", totalStudents: { $sum: 1 } } }]);
Chỉ mục
- Chỉ mục(index) là một cơ chế quan trọng trong MongoDB giúp tối ưu hóa hiệu suất truy vấn bằng cách tăng cường quá trình tìm kiếm và sắp xếp dữ liệu Chúng cung cấp một cách hiệu quả để truy cập và lấy dữ liệu từ cơ sở dữ liệu MongoDB
- Nếu không có chỉ mục, MongoDB phải quét qua mọi Document của một Collection để chọn các Document mà kết nối với lệnh truy vấn Việc quét này có thể không hiệu quả và yêu cầu MongoDB xử lý một số lượng lớn dữ liệu
- Tăng Tốc Độ Truy Vấn: Chỉ Mục giúp giảm thời gian tìm kiếm và lọc dữ liệu, tăng tốc độ truy vấn
- Tối Ưu Hóa Sắp Xếp: Cải thiện hiệu suất khi sắp xếp dữ liệu theo một hoặc nhiều trường
- Giảm Chi Phí Tìm Kiếm: Chỉ Mục giúp giảm chi phí tìm kiếm bằng cách tạo ra một cấu trúc dữ liệu có thứ tự
- Loại Chỉ Mục trong MongoDB:
❖ Chỉ Mục Đơn Trường: Tạo chỉ mục trên một trường cụ thể sử dụng lệnh createIndex
❖ Chỉ Mục Kết Hợp: Kết hợp nhiều trường trong một chỉ mục để cải thiện hiệu suất truy vấn phức tạp
- Cách sử dụng chỉ mục:
❖ Chỉ Mục Kết Hợp: db.collection.createIndex({ field1: 1, field2: -1 });
❖ Với MongoDB phiên bản cũ dùng lệnh ensureIndex: db.COLLECTION_NAME.createIndex({ KEY: 1 });
Hàm và thủ tục (Stored Procedure - SP)
- Trong MongoDB, hàm thường được thực hiện bằng cách sử dụng JavaScript Hàm có thể sử dụng để thực hiện các phép toán phức tạp trên dữ liệu trong các bộ sưu tập
- MongoDB không hỗ trợ trực tiếp thủ tục lưu trữ giống như các hệ quản trị cơ sở dữ liệu quan hệ khác Thay vào đó, các hàm JavaScript thường được sử dụng để thực hiện các nhiệm vụ tương tự
- Tạo hàm và thủ tục:
- Tích Hợp Logic Phức Tạp:
❖ Hàm và thủ tục có thể được sử dụng để tích hợp logic phức tạp, chẳng hạn như tính toán phức tạp hoặc chuẩn hóa dữ liệu
- Xử Lý Dữ Liệu Trong Bộ Sưu Tập:
❖ Hàm có thể được sử dụng để thực hiện các phép toán cụ thể trên dữ liệu trong các bộ sưu tập MongoDB, giúp giảm bớt các truy vấn phức tạp
❖ Cần lưu ý rằng sử dụng hàm và thủ tục có thể ảnh hưởng đến hiệu suất của MongoDB, và nên được sử dụng một cách cẩn thận để tránh ảnh hưởng đến hiệu suất của hệ thống.
Ràng buộc và bẫy lỗi (Trigger)
- Trong MongoDB, ràng buộc thường được hiểu là quy tắc hoặc điều kiện giới hạn dữ liệu được lưu trữ trong các bản ghi của một bộ sưu tập Tuy MongoDB không hỗ trợ ràng buộc theo cách truyền thống như các hệ quản trị cơ sở dữ liệu quan hệ, nhưng có thể thực hiện ràng buộc dữ liệu thông qua kiểm tra và logic ứng dụng.
- Bẫy lỗi là quá trình xử lý và đối phó với các lỗi có thể xảy ra trong quá trình thực hiện các truy vấn hoặc thao tác với cơ sở dữ liệu MongoDB Việc hiệu quả xử lý lỗi giúp đảm bảo tính ổn định và an toàn của hệ thống
3 Sử dụng ràng buộc và bẫy lỗi
3.1 Kiểm tra ràng buộc dữ liệu
- Kiểm Tra Tại Ứng Dụng: Sử dụng logic ứng dụng để kiểm tra và áp dụng các ràng buộc dữ liệu nhất quán với logic kinh doanh
- Indexing: Sử dụng chỉ mục để tăng tốc độ kiểm tra ràng buộc, chẳng hạn kiểm tra sự duy nhất
- Kiểm Soát Trong Quy Trình Thực Hiện: Thực hiện kiểm soát lỗi trong quy trình thực hiện truy vấn hoặc thao tác với cơ sở dữ liệu
- Logging và Ghi Nhật Ký: Ghi lại thông tin chi tiết về lỗi để phục vụ cho quá trình gỡ lỗi và cải thiện hệ thống
- Thiết Lập Mức Độ Lỗi: Xác định mức độ lỗi để quyết định cách xử lý, có thể là tiếp tục thực hiện hoặc dừng và thông báo lỗi
4.1 Kiểm tra ràng buộc dữ liệu
5 Lợi ích và cân nhắc
5.1 Lợi ích của ràng buộc và bẫy lỗi
- An Toàn Dữ Liệu: Ràng buộc giúp đảm bảo tính nhất quán và an toàn của dữ liệu
- Ổn Định Hệ Thống: Xử lý lỗi hiệu quả giúp duy trì tính ổn định của hệ thống
5.2 Cân nhắc khi sử dụng
- Chi Phí Hiệu Suất: Việc kiểm tra ràng buộc và xử lý lỗi có thể tăng chi phí hiệu suất, cần cân nhắc kỹ lưỡng để tránh ảnh hưởng quá mức đến hiệu suất
- Ràng buộc dữ liệu và xử lý lỗi trong MongoDB thường được thực hiện thông qua logic ứng dụng và các cơ chế như chỉ mục Việc sử dụng đúng cách giúp đảm bảo tính nhất quán và an toàn của dữ liệu, đồng thời cải thiện tính ổn định của hệ thống.
XÂY DỰNG ỨNG DỤNG QUẢN LÝ KHÓA HỌC VỚI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB
Tổng quan
- Việc xây dựng một ứng dụng nhằm củng cố những kiến thức đã tìm hiểu về NoSQL và các hệ quản trị cơ sở dữ liệu của NoSQL mà đơn cử là loại cơ sở dữ liệu với đại diện MongoDB Ứng dụng được xây dựng ở đây là một trang quản lý khóa học bao gồm các chức năng như thêm, sửa, xóa khóa học và chỉ nằm ở mức độ minh họa cho việc sử dụng cơ sở dữ liệu NoSQL
- Ứng dụng được sử dụng ngôn ngữ lập trình Javascript nhằm tận dụng được những ưu điểm của loại ngôn ngữ lập trình này với mô hình phát triển của các website.
Mô tả ứng dụng xây dựng hệ thống quản lý khóa học
- Xây dựng ứng dụng quản lý khóa học minh họa việc sử dụng MongoDB Ứng dụng này bao gồm một số chức năng cơ bản: Thêm mới khóa học, cập nhập khóa học, xóa khóa học.
- Một hệ thống LMS đáp ứng các tiêu chí sau:
❖ Learning (Học tập): Với hệ thống quản lý học tập, doanh nghiệp có thể tạo ra một nguồn tài liệu đào tạo và khóa học trực tuyến duy nhất Đây sẽ trở thành một nguồn kiến thức duy nhất trong khu vực của bạn, để bạn có thể giữ và nâng cao chuyên môn của công ty mình
❖ Management (Quản lý): Giúp doanh nghiệp quản lý các khóa học và người học, kiểm soát và cải thiện kết quả cho các nhân viên học trong hệ thống
❖ System (Hệ thống): Một LMS tự động hóa với công việc nhàm chán và tẻ nhạt nhất, chẳng hạn như phân loại, xử lý thống kê, phân tích và báo cáo
❖ Ngoài ra, hệ thống LMS còn mang lại nhiều giá trị cho doanh nghiệp, giúp tiết kiệm chi phí và thời gian đào tạo, tăng cường hiệu quả đào tạo, cải thiện kết quả học tập và nâng cao chất lượng đào tạo
❖ Tuy nhiên, việc xây dựng một hệ thống quản lý khóa học đòi hỏi sự đầu tư về thời gian, nguồn lực và kỹ năng Do đó, nếu bạn đang có nhu cầu xây dựng một hệ thống quản lý khóa học, tôi khuyên bạn nên tìm hiểu kỹ về các tiêu chí cần thiết và đầu tư đúng nguồn lực để đạt được hiệu quả tối đa.
Chức năng của ứng dụng
- Xây dựng một hệ thống quản lý khóa học hiệu quả, giúp tổ chức và quản trị các khóa học một cách dễ dàng và có tổ chức
- Các chức năng chính của hệ thống quản lý khóa học:
❖ Chức năng Thêm Khóa học:
Mô tả: Chức năng này cho phép quản trị viên thêm thông tin về một khóa học mới vào hệ thống
+) Form điền thông tin với các trường như: Tên khóa học, Mã khóa học, Mô tả, Giáo viên phụ trách, Thời gian học, Ngày bắt đầu, Ngày kết thúc, Số lượng học viên tối đa, v.v
+) Nút "Thêm" để lưu thông tin mới vào cơ sở dữ liệu
+) Quản trị viên nhập đầy đủ thông tin vào form
+) Kiểm tra và xác nhận thông tin
+) Lưu thông tin vào cơ sở dữ liệu
+) Hiển thị thông báo thành công
❖ Chức năng Sửa Khóa học:
Mô tả: Chức năng này giúp quản trị viên cập nhật thông tin của một khóa học đã tồn tại trong hệ thống
+) Danh sách khóa học hiện có với tùy chọn sửa đổi
+) Form hiển thị thông tin chi tiết của khóa học cho phép chỉnh sửa
+) Nút "Lưu" để cập nhật thông tin
+) Quản trị viên chọn khóa học cần sửa đổi từ danh sách
+) Hệ thống hiển thị thông tin chi tiết và cho phép chỉnh sửa
+) Quản trị viên cập nhật thông tin
+) Lưu các thay đổi vào cơ sở dữ liệu
+) Hiển thị thông báo thành công
❖ Chức năng Xóa Khóa học:
Mô tả: Chức năng này cho phép quản trị viên xóa một khóa học khỏi hệ thống Giao diện:
+) Danh sách khóa học hiện có với tùy chọn xóa
+) Xác nhận trước khi thực hiện xóa
+) Quản trị viên chọn khóa học cần xóa từ danh sách
+) Hệ thống hiển thị xác nhận trước khi xóa
+) Quản trị viên xác nhận xóa
+) Xóa thông tin khóa học khỏi cơ sở dữ liệu
+) Hiển thị thông báo xóa thành công.
Hình ảnh của hệ thống quản lý khóa học
- Giao diện trang chủ hiển thị danh sách khóa học
- Giao diện quản lý khóa học
- Giao diện thêm mới khóa học
- Giao diện cập nhập khóa học
- Giao diện xóa khóa học