65 ngày MongoDB

Table of contents

Tuần 1: Làm quen với MongoDB

Ngày 1: Giới thiệu về MongoDB

  • Tổng quan về NoSQL và MongoDB

  • Các khái niệm cơ bản: Document, Collection, Database

  • Kiến trúc MongoDB: Standalone, Replica Set, Sharded Cluster

  • So sánh MongoDB với các hệ quản trị CSDL khác

  • Bài tập:

    1. Cài đặt MongoDB trên máy local.

    2. Khởi tạo một database và collection đơn giản.

    3. Insert một số documents mẫu vào collection.

Ngày 2: Bắt đầu với MongoDB Atlas

  • Giới thiệu về MongoDB Atlas: Database as a Service (DBaaS)

  • Tạo một Atlas Free Tier Cluster

  • Kết nối tới cluster từ MongoDB Shell (mongosh)

  • Bài tập:

    1. Tạo một Atlas Free Tier Cluster.

    2. Kết nối tới cluster từ mongosh.

    3. Thực hiện các thao tác cơ bản: insert, find, update, delete.

Ngày 3: Tìm hiểu về Documents và BSON

  • Cấu trúc của document: field và value

  • Các kiểu dữ liệu BSON: String, Number, Boolean, Date, Array, Object, Null, ...

  • JSON vs. BSON

  • MongoDB Extended JSON

  • Bài tập:

    1. Tạo documents với các kiểu dữ liệu BSON khác nhau.

    2. Thử nghiệm với các kiểu dữ liệu phức tạp như Array và Object.

    3. Tìm hiểu về MongoDB Extended JSON.

Ngày 4: Thao tác CRUD cơ bản với MongoDB

  • Insert documents: insertOne, insertMany

  • Query documents: find, findOne

  • Update documents: updateOne, updateMany

  • Delete documents: deleteOne, deleteMany

  • Bài tập:

    1. Insert nhiều documents vào một collection.

    2. Sử dụng các toán tử query (ví dụ: $eq, $gt, $lt, $in, $regex) để tìm kiếm documents.

    3. Update và delete documents theo điều kiện cụ thể.

Ngày 5: Query nâng cao trong MongoDB

  • Query trên embedded/nested documents

  • Query trên array: $elemMatch, $size, $all, ...

  • Project fields: $project

  • Query cho các trường null hoặc missing: $exists, $type

  • Bài tập:

    1. Thực hiện các truy vấn phức tạp trên embedded documents và arrays.

    2. Sử dụng $project để chỉ trả về những trường cần thiết.

    3. Tìm các documents có trường null hoặc missing.

Ngày 6: Index trong MongoDB

  • Giới thiệu về index và tầm quan trọng của nó trong việc tăng tốc truy vấn.

  • Các loại index: single field, compound, multikey, text, geospatial, ...

  • Tạo, quản lý và xóa index.

  • Chiến lược sử dụng index hiệu quả.

  • Bài tập:

    1. Tạo các loại index khác nhau trên một collection.

    2. Sử dụng explain() để phân tích hiệu năng của truy vấn và xem MongoDB có sử dụng index hay không.

    3. Tìm hiểu về các trường hợp nên và không nên tạo index.

Ngày 7: Ôn tập và tổng kết tuần 1

  • Ôn lại các khái niệm đã học trong tuần.

  • Thảo luận về những thách thức gặp phải và cách giải quyết.

  • Đánh giá tiến độ học tập.

  • Bài tập:

    1. Tự thiết kế một schema đơn giản cho một ứng dụng cụ thể (ví dụ: blog, cửa hàng online, ...).

    2. Thực hiện các thao tác CRUD trên schema đó.

    3. Tạo các index cần thiết để tối ưu hóa hiệu năng truy vấn.

Tuần 2: Aggregation Framework

Ngày 8: Giới thiệu về Aggregation Framework

  • Tổng quan về Aggregation Framework và các ứng dụng của nó.

  • Các khái niệm cơ bản: pipeline, stage, expression.

  • So sánh Aggregation Framework với SQL.

  • Bài tập:

    1. Thực hiện một aggregation đơn giản để tính tổng, trung bình, giá trị lớn nhất, nhỏ nhất của một trường số.

    2. Sử dụng $match để lọc documents trước khi thực hiện aggregation.

    3. Sử dụng $group để nhóm documents theo một hoặc nhiều trường.

Ngày 9: Các stage quan trọng trong Aggregation Framework

  • $project: Chọn hoặc loại bỏ các trường, đổi tên trường, tạo trường mới.

  • $match: Lọc documents theo điều kiện.

  • $sort: Sắp xếp documents theo một hoặc nhiều trường.

  • $limit: Giới hạn số lượng documents trả về.

  • $skip: Bỏ qua một số documents đầu tiên.

  • Bài tập:

    1. Kết hợp các stage $project, $match, $sort, $limit, $skip để thực hiện các truy vấn phức tạp.

    2. Sử dụng $project để tạo các trường tính toán (ví dụ: tính tổng của hai trường).

    3. Sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần.

Ngày 10: $group$unwind

  • $group: Nhóm documents theo một hoặc nhiều trường và tính toán các giá trị tổng hợp (ví dụ: sum, avg, min, max, count).

  • $unwind: Mở rộng một mảng thành nhiều documents.

  • Bài tập:

    1. Tính tổng doanh thu theo từng sản phẩm.

    2. Đếm số lượng documents theo từng nhóm.

    3. Sử dụng $unwind để xử lý các mảng trong documents.

Ngày 11: $lookup$graphLookup

  • $lookup: Thực hiện join giữa hai collections.

  • $graphLookup: Thực hiện tìm kiếm theo đồ thị.

  • Bài tập:

    1. Join thông tin sản phẩm với thông tin danh mục.

    2. Tìm kiếm tất cả các bình luận của một bài viết.

    3. Sử dụng $graphLookup để tìm kiếm các mối quan hệ phức tạp.

Ngày 12: $facet và các stage khác

  • $facet: Thực hiện nhiều aggregation pipelines trên cùng một tập documents.

  • $bucket, $bucketAuto: Phân chia documents thành các nhóm theo điều kiện.

  • $addFields, $set: Thêm hoặc cập nhật các trường trong documents.

  • Bài tập:

    1. Tính toán nhiều giá trị tổng hợp cùng một lúc bằng $facet.

    2. Phân chia documents thành các nhóm tuổi bằng $bucket hoặc $bucketAuto.

    3. Thêm hoặc cập nhật các trường trong documents.

Ngày 13: Ôn tập và tổng kết tuần 2

  • Ôn lại các khái niệm và stage đã học trong tuần.

  • Thảo luận về các bài tập và cách giải quyết.

  • Đánh giá tiến độ học tập.

  • Bài tập:

    1. Thiết kế một aggregation pipeline phức tạp để giải quyết một bài toán thực tế.

    2. Tối ưu hóa aggregation pipeline để tăng hiệu năng.

    3. Tìm hiểu thêm về các stage khác trong Aggregation Framework.

Tuần 3: Transactions

Ngày 14: Giới thiệu về Transactions

  • Khái niệm ACID trong MongoDB.

  • Các loại transactions: single-document, multi-document, multi-statement.

  • Khi nào nên và không nên sử dụng transactions.

  • Bài tập:

    1. Thực hiện một transaction đơn giản để chuyển tiền giữa hai tài khoản.

    2. Sử dụng session để quản lý transaction.

    3. Tìm hiểu về các mức độ isolation trong MongoDB.

Ngày 15: Multi-Document Transactions

  • Thực hiện transaction trên nhiều documents.

  • Sử dụng withTransaction để đảm bảo tính nguyên tử của transaction.

  • Xử lý lỗi trong transaction.

  • Bài tập:

    1. Thực hiện một transaction để đặt hàng và cập nhật số lượng sản phẩm trong kho.

    2. Xử lý các trường hợp lỗi có thể xảy ra trong transaction.

    3. Tìm hiểu về các best practices khi sử dụng multi-document transactions.

Ngày 16: Distributed Transactions (Transactions trên Sharded Clusters)

  • Thực hiện transaction trên một sharded cluster.

  • Sử dụng TransactionOptions để cấu hình transaction.

  • Giới hạn của distributed transactions.

  • Bài tập:

    1. Thực hiện một transaction trên một sharded cluster.

    2. Tìm hiểu về các vấn đề có thể xảy ra khi sử dụng distributed transactions và cách giải quyết.

    3. Đọc thêm về shard keys và cách chúng ảnh hưởng đến transactions.

Ngày 17: Retryable Writes và Retryable Reads

  • Giới thiệu về retryable writes và retryable reads.

  • Khi nào nên sử dụng retryable writes và retryable reads.

  • Cấu hình retryable writes và retryable reads.

  • Bài tập:

    1. Cấu hình retryable writes và retryable reads cho một ứng dụng.

    2. Thử nghiệm retryable writes và retryable reads trong các tình huống khác nhau.

    3. Tìm hiểu về các giới hạn và cân nhắc khi sử dụng retryable writes và retryable reads.

Ngày 18: Ôn tập và tổng kết tuần 3

  • Ôn lại các khái niệm và kỹ thuật đã học trong tuần.

  • Thảo luận về các bài tập và cách giải quyết.

  • Đánh giá tiến độ học tập.

  • Bài tập:

    1. Thiết kế một ứng dụng sử dụng transactions để đảm bảo tính toàn vẹn dữ liệu.

    2. Tìm hiểu thêm về các tính năng nâng cao của transactions trong MongoDB.

    3. Đọc tài liệu chính thức của MongoDB về transactions.

Tuần 4: Sharding

Ngày 19: Giới thiệu về Sharding

  • Khái niệm sharding và lợi ích của nó trong việc mở rộng quy mô hệ thống.

  • Các thành phần của một sharded cluster: shards, config servers, routers (mongos).

  • Các loại shard keys: hashed, ranged.

  • Bài tập:

    1. Tìm hiểu về các khái niệm sharding cơ bản.

    2. So sánh ưu nhược điểm của hashed sharding và ranged sharding.

    3. Đọc tài liệu MongoDB về sharding để hiểu rõ hơn về cách hoạt động của nó.

Ngày 20: Shard Keys và Shard a Collection

  • Chọn shard key phù hợp: các yếu tố cần xem xét khi chọn shard key.

  • Shard một collection: các bước thực hiện.

  • Bài tập:

    1. Xác định shard key cho một collection mẫu.

    2. Thực hiện sharding một collection trên MongoDB Atlas hoặc local.

    3. Sử dụng sh.status() để kiểm tra trạng thái của sharded cluster.

Ngày 21: Zones và Chunk

  • Khái niệm zone và cách sử dụng zone để phân phối dữ liệu.

  • Khái niệm chunk và cách MongoDB chia dữ liệu thành các chunk.

  • Bài tập:

    1. Tạo các zone và gán shards vào các zone.

    2. Kiểm tra sự phân bố của các chunk trên các shards.

    3. Tìm hiểu về cách MongoDB tự động chia và di chuyển chunk.

Ngày 22: Balancer và Chunk Migration

  • Vai trò của balancer trong việc cân bằng dữ liệu giữa các shards.

  • Quá trình chunk migration: cách MongoDB di chuyển chunk giữa các shards.

  • Bài tập:

    1. Kích hoạt và cấu hình balancer.

    2. Theo dõi quá trình chunk migration.

    3. Tìm hiểu về các tùy chọn cấu hình của balancer.

Ngày 23: Sharded Cluster Administration

  • Các tác vụ quản trị sharded cluster: thêm/xóa shard, thêm/xóa thành viên shard, ...

  • Giám sát và xử lý sự cố sharded cluster.

  • Bài tập:

    1. Thêm một shard vào sharded cluster.

    2. Xóa một shard khỏi sharded cluster.

    3. Sử dụng các công cụ giám sát để theo dõi hoạt động của sharded cluster.

Ngày 24: Ôn tập và tổng kết tuần 4

  • Ôn lại các khái niệm và kỹ thuật đã học trong tuần.

  • Thảo luận về các bài tập và cách giải quyết.

  • Đánh giá tiến độ học tập.

  • Bài tập:

    1. Thiết kế một sharded cluster cho một ứng dụng mẫu.

    2. Thực hiện các tác vụ quản trị sharded cluster.

    3. Giải quyết một số tình huống giả lập về sharded cluster.

Tuần 5: Replication

Ngày 25: Giới thiệu về Replication

  • Tổng quan về replication và các lợi ích của nó: đảm bảo tính sẵn sàng cao, sao lưu dữ liệu, ...

  • Các thành phần của một replica set: primary, secondary, arbiter.

  • Oplog và quá trình đồng bộ dữ liệu.

  • Bài tập:

    1. Tìm hiểu về các khái niệm replication cơ bản.

    2. So sánh replica set với các cơ chế replication khác.

    3. Đọc tài liệu MongoDB về replication để hiểu rõ hơn về cách hoạt động của nó.

Ngày 26: Replica Set Deployment

  • Các kiến trúc triển khai replica set: 3 thành viên, phân tán địa lý, ...

  • Tạo và cấu hình replica set.

  • Bài tập:

    1. Tạo một replica set trên MongoDB Atlas hoặc local.

    2. Thêm/xóa thành viên replica set.

    3. Cấu hình các tùy chọn replica set như priority, hidden, delayed.

Ngày 27: Replica Set Elections và Failover

  • Quá trình bầu chọn primary trong replica set.

  • Cơ chế failover khi primary gặp sự cố.

  • Bài tập:

    1. Mô phỏng quá trình bầu chọn primary.

    2. Thử nghiệm cơ chế failover.

    3. Tìm hiểu về các yếu tố ảnh hưởng đến quá trình bầu chọn primary.

Ngày 28: Read and Write Concerns

  • Write concern: Đảm bảo dữ liệu được ghi thành công vào bao nhiêu thành viên replica set.

  • Read concern: Đảm bảo dữ liệu đọc được là mới nhất hoặc đã được ghi vào bao nhiêu thành viên replica set.

  • Bài tập:

    1. Thử nghiệm các mức độ write concern và read concern khác nhau.

    2. Tìm hiểu về các trường hợp sử dụng write concern và read concern phù hợp.

    3. Đọc tài liệu MongoDB về write concern và read concern để hiểu rõ hơn về ý nghĩa của chúng.

Ngày 29: Read Preference và Tag Sets

  • Read preference: Chọn thành viên replica set để đọc dữ liệu.

  • Tag sets: Gắn nhãn cho các thành viên replica set để dễ dàng quản lý và lựa chọn.

  • Bài tập:

    1. Cấu hình read preference cho ứng dụng.

    2. Tạo và sử dụng tag sets.

    3. Tìm hiểu về các tùy chọn read preference khác nhau.

Ngày 30: Ôn tập và tổng kết tuần 5

  • Ôn lại các khái niệm và kỹ thuật đã học trong tuần.

  • Thảo luận về các bài tập và cách giải quyết.

  • Đánh giá tiến độ học tập.

  • Bài tập:

    1. Thiết kế một kiến trúc replica set cho một ứng dụng mẫu.

    2. Thực hiện các tác vụ quản trị replica set.

    3. Giải quyết một số tình huống giả lập về replica set.

Tuần 6: Security

Ngày 31: Enable Access Control & Authentication (SCRAM)

  • Lý thuyết:

    • Tầm quan trọng của việc kiểm soát truy cập và xác thực trong MongoDB.

    • Các cơ chế xác thực: SCRAM, x.509, Kerberos, LDAP, OpenID Connect.

    • Cách thức hoạt động của SCRAM.

  • Thực hành:

    • Kích hoạt tính năng kiểm soát truy cập.

    • Tạo người dùng và phân quyền bằng SCRAM.

    • Kết nối đến MongoDB bằng SCRAM.

  • Bài tập:

    1. Tạo một người dùng có quyền đọc/ghi trên một collection cụ thể.

    2. Tạo một người dùng chỉ có quyền đọc trên toàn bộ database.

    3. Thay đổi mật khẩu của một người dùng.

Ngày 32: x.509 Authentication & Kerberos Authentication

  • Lý thuyết:

    • Xác thực bằng chứng chỉ x.509: cách thức hoạt động, ưu nhược điểm.

    • Xác thực Kerberos: tích hợp MongoDB với hệ thống Kerberos.

  • Thực hành:

    • Cấu hình MongoDB để sử dụng xác thực x.509.

    • Cấu hình MongoDB để sử dụng xác thực Kerberos.

  • Bài tập:

    1. Tạo chứng chỉ x.509 và sử dụng chúng để xác thực người dùng.

    2. Tích hợp MongoDB với một Kerberos server có sẵn.

    3. Khắc phục sự cố khi xác thực Kerberos không thành công.

Ngày 33: LDAP Proxy Authentication & OpenID Connect Authentication

  • Lý thuyết:

    • Xác thực qua LDAP Proxy: sử dụng LDAP server để xác thực người dùng MongoDB.

    • Xác thực OpenID Connect: sử dụng nhà cung cấp OpenID Connect (ví dụ: Google, Okta) để xác thực người dùng.

  • Thực hành:

    • Cấu hình MongoDB để sử dụng LDAP Proxy.

    • Cấu hình MongoDB để sử dụng OpenID Connect.

  • Bài tập:

    1. Tích hợp MongoDB với một LDAP server có sẵn.

    2. Cấu hình MongoDB để sử dụng Google làm nhà cung cấp OpenID Connect.

    3. Tìm hiểu về các tùy chọn cấu hình khác nhau của LDAP Proxy và OpenID Connect.

Ngày 34: Internal/Membership Authentication & Encryption

  • Lý thuyết:

    • Xác thực nội bộ: xác thực giữa các thành viên trong replica set hoặc sharded cluster.

    • Mã hóa dữ liệu: bảo vệ dữ liệu khi lưu trữ và truyền tải.

  • Thực hành:

    • Cấu hình xác thực nội bộ bằng keyfile.

    • Kích hoạt tính năng mã hóa dữ liệu.

  • Bài tập:

    1. Triển khai một replica set với xác thực nội bộ.

    2. Cấu hình mã hóa dữ liệu cho một collection.

    3. Tìm hiểu về các thuật toán mã hóa được MongoDB hỗ trợ.

Ngày 35: Queryable Encryption & Client-Side Field Level Encryption

  • Lý thuyết:

    • Queryable Encryption: mã hóa dữ liệu nhưng vẫn cho phép tìm kiếm trên dữ liệu đã mã hóa.

    • Client-Side Field Level Encryption: mã hóa dữ liệu ở phía client trước khi gửi lên server.

  • Thực hành:

    • Cấu hình Queryable Encryption.

    • Cấu hình Client-Side Field Level Encryption.

  • Bài tập:

    1. Thử nghiệm Queryable Encryption với các truy vấn khác nhau.

    2. Sử dụng Client-Side Field Level Encryption để mã hóa các trường nhạy cảm.

    3. Tìm hiểu về các hạn chế và lưu ý khi sử dụng Queryable Encryption và Client-Side Field Level Encryption.

Tuần 7: Security (tiếp theo) & Data Modeling

Ngày 36: Encryption at Rest & TLS/SSL (Transport Encryption)

  • Lý thuyết:

    • Encryption at Rest: mã hóa dữ liệu trên ổ đĩa.

    • TLS/SSL: mã hóa dữ liệu khi truyền tải giữa client và server.

  • Thực hành:

    • Cấu hình Encryption at Rest.

    • Cấu hình TLS/SSL.

  • Bài tập:

    1. Kích hoạt Encryption at Rest cho MongoDB.

    2. Cấu hình MongoDB để sử dụng chứng chỉ TLS/SSL.

    3. Tìm hiểu về các tùy chọn cấu hình khác nhau của Encryption at Rest và TLS/SSL.

Ngày 37: Auditing & Network and Configuration Hardening

  • Lý thuyết:

    • Auditing: ghi lại các hoạt động của người dùng và hệ thống.

    • Network and Configuration Hardening: tăng cường bảo mật mạng và cấu hình MongoDB.

  • Thực hành:

    • Kích hoạt tính năng audit.

    • Cấu hình audit filters.

    • Cấu hình firewall và các biện pháp bảo mật khác.

  • Bài tập:

    1. Xem và phân tích audit logs.

    2. Cấu hình firewall để chỉ cho phép truy cập từ các IP cụ thể.

    3. Tìm hiểu về các best practices về bảo mật MongoDB.

Ngày 38: Schema Design Process & Schema Design Patterns

  • Lý thuyết:

    • Quy trình thiết kế schema: xác định yêu cầu, mô hình hóa dữ liệu, đánh giá và tối ưu hóa.

    • Các mẫu thiết kế schema phổ biến: embedded documents, references, ...

  • Thực hành:

    • Phân tích yêu cầu của một ứng dụng mẫu.

    • Thiết kế schema cho ứng dụng đó.

  • Bài tập:

    1. Thiết kế schema cho một ứng dụng blog.

    2. Thiết kế schema cho một ứng dụng quản lý bán hàng.

    3. Đánh giá và tối ưu hóa schema đã thiết kế.

Ngày 39: Document and Schema Versioning & Data Modeling Concepts

  • Lý thuyết:

    • Quản lý phiên bản document và schema: tại sao cần, các phương pháp thực hiện.

    • Các khái niệm cơ bản về mô hình hóa dữ liệu: normalization, denormalization, ...

  • Thực hành:

    • Áp dụng các phương pháp quản lý phiên bản document và schema.

    • Lựa chọn mô hình dữ liệu phù hợp cho từng trường hợp cụ thể.

  • Bài tập:

    1. Thêm trường phiên bản vào documents.

    2. So sánh ưu nhược điểm của normalization và denormalization.

    3. Tìm hiểu về các kỹ thuật mô hình hóa dữ liệu khác.

Ngày 40: Handle Duplicate Data & Data Consistency

  • Lý thuyết:

    • Xử lý dữ liệu trùng lặp: tại sao có, các phương pháp phòng tránh và xử lý.

    • Đảm bảo tính nhất quán dữ liệu: các kỹ thuật và công cụ hỗ trợ.

  • Thực hành:

    • Áp dụng các phương pháp xử lý dữ liệu trùng lặp.

    • Sử dụng transactions hoặc các kỹ thuật khác để đảm bảo tính nhất quán dữ liệu.

  • Bài tập:

    1. Xử lý dữ liệu trùng lặp trong một collection mẫu.

    2. Sử dụng transactions để đảm bảo tính nhất quán dữ liệu khi cập nhật nhiều documents.

    3. Tìm hiểu về các công cụ và kỹ thuật khác để đảm bảo tính nhất quán dữ liệu.

Tuần 8: Data Modeling (tiếp theo)

Ngày 41: Enforce Data Consistency & Schema Validation

  • Lý thuyết:

    • Các phương pháp đảm bảo tính nhất quán dữ liệu: sử dụng transactions, embedded documents, ...

    • Xác thực schema: kiểm tra tính hợp lệ của dữ liệu theo một schema định nghĩa trước.

  • Thực hành:

    • Sử dụng transactions để đảm bảo tính nhất quán dữ liệu khi cập nhật nhiều documents.

    • Áp dụng xác thực schema cho một collection.

  • Bài tập:

    1. Thực hiện một transaction phức tạp để cập nhật nhiều documents và đảm bảo tính nhất quán.

    2. Định nghĩa một JSON Schema và áp dụng nó cho một collection.

    3. Tìm hiểu về các tùy chọn xác thực schema khác nhau.

Ngày 42: Specify JSON Schema Validation & Specify Allowed Field Values

  • Lý thuyết:

    • JSON Schema: một định dạng chuẩn để mô tả cấu trúc của dữ liệu JSON.

    • Sử dụng JSON Schema để xác thực schema trong MongoDB.

    • Xác định các giá trị được phép cho một trường.

  • Thực hành:

    • Định nghĩa một JSON Schema chi tiết cho một collection.

    • Sử dụng các từ khóa enum, minimum, maximum, ... để xác định các giá trị được phép cho một trường.

  • Bài tập:

    1. Tạo một JSON Schema phức tạp với các trường lồng nhau và các loại dữ liệu khác nhau.

    2. Xác định các giá trị được phép cho các trường khác nhau trong schema.

    3. Tìm hiểu về các tính năng nâng cao của JSON Schema.

Ngày 43: View Existing Validation Rules & Modify Schema Validation

  • Lý thuyết:

    • Xem các quy tắc xác thực schema hiện tại của một collection.

    • Thay đổi các quy tắc xác thực schema.

  • Thực hành:

    • Sử dụng collMod để xem và thay đổi các quy tắc xác thực schema.

    • Sử dụng các tùy chọn validationLevelvalidationAction để kiểm soát cách thức xác thực.

  • Bài tập:

    1. Xem các quy tắc xác thực schema của một collection hiện có.

    2. Thay đổi mức độ xác thực từ "strict" sang "moderate".

    3. Tìm hiểu về các tùy chọn khác nhau của collMod.

Ngày 44: Data Model Examples and Patterns

  • Lý thuyết:

    • Các ví dụ và mẫu thiết kế data model phổ biến trong MongoDB.

    • Mô hình hóa các mối quan hệ giữa các documents: one-to-one, one-to-many, many-to-many.

    • Mô hình hóa các cấu trúc dữ liệu phức tạp: cây, đồ thị.

  • Thực hành:

    • Phân tích các ví dụ data model và áp dụng vào các trường hợp cụ thể.

    • Thiết kế data model cho các ứng dụng mẫu.

  • Bài tập:

    1. Thiết kế data model cho một ứng dụng mạng xã hội.

    2. Thiết kế data model cho một ứng dụng thương mại điện tử.

    3. Tìm hiểu về các mẫu thiết kế data model khác.

Ngày 45: Model Relationships Between Documents

  • Lý thuyết:

    • Các cách mô hình hóa mối quan hệ giữa các documents: embedded documents, references.

    • Ưu nhược điểm của từng cách.

    • Lựa chọn cách mô hình hóa phù hợp cho từng trường hợp cụ thể.

  • Thực hành:

    • Mô hình hóa mối quan hệ one-to-one bằng embedded documents.

    • Mô hình hóa mối quan hệ one-to-many bằng embedded documents hoặc references.

  • Bài tập:

    1. Mô hình hóa mối quan hệ giữa người dùng và bài viết trong một ứng dụng blog.

    2. Mô hình hóa mối quan hệ giữa sản phẩm và danh mục trong một ứng dụng thương mại điện tử.

    3. So sánh hiệu năng của các cách mô hình hóa khác nhau.

Tuần 9: Data Modeling (tiếp theo) & Performance

Ngày 46: Model One-to-Many Relationships & Model Tree Structures

  • Lý thuyết:

    • Mô hình hóa mối quan hệ one-to-many bằng references hoặc child references.

    • Mô hình hóa cấu trúc cây: parent references, child references, array of ancestors, materialized paths, nested sets.

  • Thực hành:

    • Áp dụng các cách mô hình hóa one-to-many và cấu trúc cây vào các ứng dụng mẫu.
  • Bài tập:

    1. Mô hình hóa mối quan hệ giữa danh mục và sản phẩm trong một ứng dụng thương mại điện tử.

    2. Mô hình hóa cấu trúc cây của một hệ thống quản lý nhân sự.

    3. So sánh ưu nhược điểm của các cách mô hình hóa cấu trúc cây khác nhau.

Ngày 47: Model Specific Application Contexts

  • Lý thuyết:

    • Mô hình hóa dữ liệu cho các ứng dụng cụ thể: thương mại điện tử, mạng xã hội, IoT, ...

    • Các vấn đề đặc thù cần lưu ý khi mô hình hóa dữ liệu cho từng loại ứng dụng.

  • Thực hành:

    • Phân tích yêu cầu và thiết kế data model cho một ứng dụng cụ thể.
  • Bài tập:

    1. Thiết kế data model cho một ứng dụng đặt phòng khách sạn.

    2. Thiết kế data model cho một ứng dụng theo dõi sức khỏe.

    3. Tìm hiểu về các best practices khi thiết kế data model cho các ứng dụng khác nhau.

Ngày 48: Connection Pool Overview & Tuning Your Connection Pool Settings

  • Lý thuyết:

    • Connection pool là gì? Tại sao cần sử dụng connection pool?

    • Các tham số cấu hình connection pool: maxPoolSize, minPoolSize, maxIdleTimeMS, ...

  • Thực hành:

    • Cấu hình connection pool cho ứng dụng MongoDB.

    • Giám sát và tối ưu hóa connection pool.

  • Bài tập:

    1. Tìm hiểu về các tham số cấu hình connection pool khác nhau.

    2. Thử nghiệm các giá trị khác nhau của các tham số và đánh giá hiệu năng.

    3. Tìm hiểu về các công cụ giám sát connection pool.

Ngày 49: Disable Transparent Huge Pages (THP) & Manage Sharded Cluster Health with Health Managers

  • Lý thuyết:

    • Transparent Huge Pages (THP): là gì? Tại sao cần tắt THP khi sử dụng MongoDB?

    • Health Manager: công cụ giám sát và quản lý sức khỏe của sharded cluster.

  • Thực hành:

    • Tắt THP trên hệ thống Linux.

    • Sử dụng Health Manager để giám sát sharded cluster.

  • Bài tập:

    1. Tìm hiểu về các vấn đề có thể xảy ra khi sử dụng THP với MongoDB.

    2. Tìm hiểu về các tính năng của Health Manager.

    3. Cấu hình Health Manager để gửi thông báo khi có sự cố xảy ra.

Ngày 50: UNIX ulimit Settings & Configuration and Maintenance

  • Lý thuyết:

    • ulimit: giới hạn tài nguyên của một tiến trình trên hệ thống UNIX.

    • Cấu hình và bảo trì MongoDB: các tác vụ thường xuyên cần thực hiện để đảm bảo hệ thống hoạt động ổn định.

  • Thực hành:

    • Cấu hình ulimit cho tiến trình MongoDB.

    • Thực hiện các tác vụ bảo trì cơ bản như backup, restore, compact, ...

  • Bài tập:

    1. Tìm hiểu về các giới hạn tài nguyên quan trọng của MongoDB.

    2. Cấu hình ulimit để đảm bảo MongoDB có đủ tài nguyên để hoạt động.

    3. Lên lịch trình bảo trì định kỳ cho MongoDB.

Tuần 10: Performance (tiếp theo)

Ngày 51: Run-time Database Configuration & Upgrade to the Latest Patch Release of MongoDB

  • Lý thuyết:

    • Cấu hình MongoDB trong quá trình chạy: thay đổi các tham số cấu hình mà không cần khởi động lại server.

    • Nâng cấp MongoDB lên phiên bản mới nhất: các bước thực hiện và lưu ý.

  • Thực hành:

    • Sử dụng db.adminCommand() để thay đổi cấu hình trong quá trình chạy.

    • Nâng cấp MongoDB trên một môi trường test.

  • Bài tập:

    1. Thay đổi giá trị của tham số maxPoolSize trong quá trình chạy.

    2. Nâng cấp MongoDB từ phiên bản 4.4 lên 5.0.

    3. Tìm hiểu về các tham số cấu hình quan trọng khác của MongoDB.

Ngày 52: Manage mongod Processes & Terminate Running Operations

  • Lý thuyết:

    • Quản lý tiến trình mongod: khởi động, dừng, khởi động lại.

    • Hủy bỏ các thao tác đang chạy: các trường hợp cần hủy bỏ và cách thực hiện.

  • Thực hành:

    • Sử dụng các lệnh mongod, systemctl, hoặc các công cụ quản lý tiến trình khác để quản lý mongod.

    • Sử dụng db.killOp() để hủy bỏ một thao tác đang chạy.

  • Bài tập:

    1. Khởi động, dừng và khởi động lại tiến trình mongod.

    2. Hủy bỏ một truy vấn đang chạy quá lâu.

    3. Tìm hiểu về các tín hiệu (signals) có thể gửi đến tiến trình mongod.

Ngày 53: Rotate Log Files & Data Center Awareness

  • Lý thuyết:

    • Xoay log files: tạo log files mới và lưu trữ các log files cũ.

    • Data center awareness: cấu hình MongoDB để hoạt động hiệu quả trong môi trường nhiều data center.

  • Thực hành:

    • Cấu hình xoay log files tự động.

    • Cấu hình tag sets và read preference để ưu tiên đọc từ data center gần nhất.

  • Bài tập:

    1. Cấu hình MongoDB để xoay log files hàng ngày.

    2. Tạo một replica set phân tán địa lý và cấu hình read preference.

    3. Tìm hiểu về các tùy chọn cấu hình khác liên quan đến data center awareness.

Ngày 54: Workload Isolation in MongoDB Deployments & MongoDB Backup Methods

  • Lý thuyết:

    • Workload isolation: phân tách các loại workload khác nhau để tránh ảnh hưởng lẫn nhau.

    • Các phương pháp backup MongoDB: filesystem snapshots, mongodump, ...

  • Thực hành:

    • Sử dụng các collection khác nhau hoặc các database khác nhau cho các loại workload khác nhau.

    • Thực hiện backup MongoDB bằng filesystem snapshots hoặc mongodump.

  • Bài tập:

    1. Phân tách workload đọc và ghi trên một replica set.

    2. Thực hiện backup một MongoDB database.

    3. Tìm hiểu về các phương pháp backup khác và so sánh ưu nhược điểm.

Ngày 55: Back Up and Restore with Filesystem Snapshots & Back Up and Restore with MongoDB Tools

  • Lý thuyết:

    • Backup và restore bằng filesystem snapshots: ưu nhược điểm, các bước thực hiện.

    • Backup và restore bằng công cụ MongoDB: mongodump, mongorestore.

  • Thực hành:

    • Thực hiện backup và restore bằng filesystem snapshots.

    • Thực hiện backup và restore bằng mongodump và mongorestore.

  • Bài tập:

    1. Backup một MongoDB database bằng filesystem snapshots.

    2. Restore một MongoDB database từ bản backup filesystem snapshots.

    3. Backup một MongoDB database bằng mongodump và restore bằng mongorestore.

Tuần 11: Performance (tiếp theo) & Text Search

Ngày 56: Restore a Replica Set from MongoDB Backups & Backup and Restore Sharded Clusters

  • Lý thuyết:

    • Restore replica set từ bản backup: các bước thực hiện và lưu ý.

    • Backup và restore sharded cluster: các phương pháp và lưu ý.

  • Thực hành:

    • Restore một replica set từ bản backup.

    • Backup và restore một sharded cluster.

  • Bài tập:

    1. Thực hiện restore một replica set từ bản backup filesystem snapshots.

    2. Thực hiện backup và restore một sharded cluster bằng mongodump và mongorestore.

    3. Tìm hiểu về các vấn đề có thể xảy ra khi backup và restore sharded cluster và cách giải quyết.

Ngày 57: Back Up a Sharded Cluster & Restore a Sharded Cluster

  • Lý thuyết:

    • Backup sharded cluster bằng filesystem snapshots: các bước thực hiện và lưu ý.

    • Backup sharded cluster bằng công cụ MongoDB: mongodump, mongorestore.

  • Thực hành:

    • Thực hiện backup sharded cluster bằng filesystem snapshots.

    • Thực hiện backup sharded cluster bằng mongodump và mongorestore.

  • Bài tập:

    1. Backup một sharded cluster bằng filesystem snapshots.

    2. Backup một sharded cluster bằng mongodump và restore bằng mongorestore.

    3. Tìm hiểu về các vấn đề có thể xảy ra khi backup và restore sharded cluster và cách giải quyết.

Ngày 58: Recover a Standalone & Monitoring for MongoDB

  • Lý thuyết:

    • Phục hồi standalone MongoDB sau khi gặp sự cố.

    • Giám sát MongoDB: các chỉ số cần theo dõi, công cụ giám sát.

  • Thực hành:

    • Phục hồi một standalone MongoDB từ journal files.

    • Sử dụng MongoDB Compass hoặc các công cụ khác để giám sát MongoDB.

  • Bài tập:

    1. Mô phỏng một sự cố trên standalone MongoDB và thực hiện phục hồi.

    2. Cấu hình MongoDB Compass để giám sát các chỉ số quan trọng.

    3. Tìm hiểu về các công cụ giám sát MongoDB khác.

Ngày 59: MongoDB Atlas Search & Text Search on Self-Managed Deployments

  • Lý thuyết:

    • MongoDB Atlas Search: dịch vụ tìm kiếm toàn văn bản trên MongoDB Atlas.

    • Tìm kiếm toàn văn bản trên MongoDB tự quản lý: sử dụng text index.

  • Thực hành:

    • Tạo và sử dụng MongoDB Atlas Search index.

    • Tạo và sử dụng text index trên MongoDB tự quản lý.

  • Bài tập:

    1. Tìm kiếm toàn văn bản trên một collection mẫu bằng MongoDB Atlas Search.

    2. Tạo một text index và thực hiện tìm kiếm trên MongoDB tự quản lý.

    3. So sánh MongoDB Atlas Search và text index trên MongoDB tự quản lý.

Ngày 60: Perform a Text Search & Text Search Operators

  • Lý thuyết:

    • Thực hiện tìm kiếm toàn văn bản: các toán tử tìm kiếm, tìm kiếm phrase, tìm kiếm fuzzy, ...

    • Các toán tử tìm kiếm toàn văn bản: $text, $search, $language, ...

  • Thực hành:

    • Thực hiện các loại tìm kiếm toàn văn bản khác nhau trên MongoDB Atlas Search và text index.
  • Bài tập:

    1. Tìm kiếm các documents chứa một từ hoặc cụm từ cụ thể.

    2. Tìm kiếm các documents chứa các từ đồng nghĩa.

    3. Tìm kiếm các documents chứa lỗi chính tả.

Tuần 12: Text Search (tiếp theo), Geospatial Queries, Read/Write Concerns, MongoDB CRUD Concepts

Ngày 61: Text Search in the Aggregation Pipeline & Text Search Languages

  • Lý thuyết:

    • Sử dụng tìm kiếm toàn văn bản trong aggregation pipeline.

    • Hỗ trợ nhiều ngôn ngữ trong tìm kiếm toàn văn bản.

  • Thực hành:

    • Thực hiện tìm kiếm toàn văn bản trong aggregation pipeline.

    • Sử dụng các tùy chọn ngôn ngữ khác nhau.

  • Bài tập:

    1. Tìm kiếm và nhóm các documents theo kết quả tìm kiếm toàn văn bản.

    2. Tìm kiếm toàn văn bản trên một collection chứa nhiều ngôn ngữ khác nhau.

    3. Tìm hiểu về các ngôn ngữ được hỗ trợ bởi MongoDB Atlas Search và text index.

Ngày 62: Find Restaurants with Geospatial Queries & GeoJSON Objects

  • Lý thuyết:

    • Truy vấn địa lý: tìm kiếm các đối tượng gần một vị trí, trong một khu vực, ...

    • GeoJSON: định dạng chuẩn để biểu diễn các đối tượng địa lý.

  • Thực hành:

    • Tạo một collection chứa dữ liệu địa lý.

    • Thực hiện các truy vấn địa lý để tìm kiếm các nhà hàng gần một vị trí.

  • Bài tập:

    1. Tìm các nhà hàng trong vòng bán kính 5km từ một địa điểm cụ thể.

    2. Tìm các nhà hàng nằm trong một khu vực được xác định bởi một đa giác.

    3. Tìm hiểu về các toán tử truy vấn địa lý khác nhau.

Ngày 63: Read Isolation (Read Concern) & Write Acknowledgement (Write Concern)

  • Lý thuyết:

    • Read Concern: kiểm soát mức độ cô lập của các thao tác đọc.

    • Write Concern: kiểm soát mức độ xác nhận của các thao tác ghi.

    • Các mức độ Read Concern: local, available, majority, linearizable, snapshot.

    • Các mức độ Write Concern: w:1, w:majority, w:0, ...

  • Thực hành:

    • Cấu hình Read Concern và Write Concern cho các thao tác đọc và ghi.

    • Thử nghiệm các mức độ Read Concern và Write Concern khác nhau.

  • Bài tập:

    1. Tìm hiểu về sự khác biệt giữa các mức độ Read Concern và Write Concern.

    2. Cấu hình Read Concern và Write Concern để đảm bảo tính nhất quán dữ liệu trong một ứng dụng cụ thể.

    3. Tìm hiểu về các trường hợp sử dụng Read Concern và Write Concern phù hợp.

Ngày 64: MongoDB CRUD Concepts & Atomicity and Transactions

  • Lý thuyết:

    • Các khái niệm CRUD trong MongoDB: Create, Read, Update, Delete.

    • Tính nguyên tử của các thao tác trong MongoDB.

    • Transactions: đảm bảo tính ACID cho các thao tác trên nhiều documents.

  • Thực hành:

    • Ôn tập các thao tác CRUD cơ bản.

    • Thực hiện một transaction đơn giản.

  • Bài tập:

    1. Thực hiện các thao tác CRUD trên một collection mẫu.

    2. Thực hiện một transaction để chuyển tiền giữa hai tài khoản.

    3. Tìm hiểu về các trường hợp sử dụng transactions.

Ngày 65: Ôn tập và tổng kết

  • Lý thuyết:

    • Ôn tập lại toàn bộ kiến thức đã học trong khóa học.

    • Tổng kết những điểm quan trọng cần ghi nhớ.

  • Thực hành:

    • Thực hiện một dự án nhỏ để tổng hợp kiến thức.
  • Bài tập:

    1. Thiết kế và xây dựng một ứng dụng đơn giản sử dụng MongoDB.

    2. Viết một bài báo cáo tóm tắt những kiến thức đã học và kinh nghiệm thực tế.

    3. Chuẩn bị cho các kỳ thi hoặc phỏng vấn liên quan đến MongoDB.