NoSQL
Trang này chứa các mẹo và tài nguyên để chuẩn bị cho các cuộc phỏng vấn NoSQL.
Dưới đây là 20 câu hỏi về MongoDB từ cơ bản đến nâng cao, kèm theo câu trả lời chuyên nghiệp bằng tiếng Việt. Các câu hỏi được thiết kế để bao quát nhiều khía cạnh của MongoDB, từ khái niệm cơ bản đến các tính năng nâng cao.
Câu hỏi cơ bản
MongoDB là gì? Trả lời: MongoDB là một cơ sở dữ liệu NoSQL hướng tài liệu (document-oriented), mã nguồn mở, được thiết kế để lưu trữ, truy xuất và quản lý dữ liệu phi cấu trúc hoặc bán cấu trúc. Nó lưu trữ dữ liệu dưới dạng các tài liệu JSON hoặc BSON (Binary JSON), giúp linh hoạt hơn so với các cơ sở dữ liệu quan hệ truyền thống.
Sự khác biệt giữa MongoDB và cơ sở dữ liệu quan hệ (RDBMS) là gì? Trả lời: MongoDB khác RDBMS ở chỗ nó không sử dụng bảng và hàng mà dùng các tài liệu và bộ sưu tập (collections). RDBMS yêu cầu schema cố định, trong khi MongoDB có schema động, cho phép thay đổi cấu trúc dữ liệu dễ dàng. Ngoài ra, MongoDB hỗ trợ mở rộng ngang (horizontal scaling) tốt hơn thông qua sharding.
Collection trong MongoDB là gì? Trả lời: Collection là một nhóm các tài liệu (documents) trong MongoDB, tương tự như bảng trong RDBMS. Tuy nhiên, các tài liệu trong một collection không cần tuân theo cùng một cấu trúc, mang lại tính linh hoạt cao.
BSON là gì và tại sao MongoDB sử dụng nó? Trả lời: BSON (Binary JSON) là định dạng dữ liệu nhị phân mà MongoDB sử dụng để lưu trữ và trao đổi dữ liệu. Nó mở rộng JSON bằng cách hỗ trợ thêm các kiểu dữ liệu như Date, Binary Data, và ObjectId, đồng thời tối ưu hóa hiệu suất truy xuất và lưu trữ.
Làm thế nào để chèn một tài liệu vào MongoDB? Trả lời: Để chèn một tài liệu, bạn sử dụng phương thức
insertOne()
hoặcinsertMany()
. Ví dụ:Phương thức này sẽ thêm một tài liệu vào collection
users
.
Câu hỏi trung cấp
ObjectId trong MongoDB là gì? Trả lời: ObjectId là một định danh duy nhất 12 byte được MongoDB tự động tạo cho mỗi tài liệu trong một collection. Nó bao gồm timestamp, mã máy, mã tiến trình và một số ngẫu nhiên, đảm bảo tính duy nhất và hỗ trợ phân tích thời gian tạo.
Làm thế nào để truy vấn dữ liệu trong MongoDB? Trả lời: Bạn sử dụng phương thức
find()
. Ví dụ:Câu lệnh này trả về tất cả tài liệu trong collection
users
cóage
lớn hơn 20.Toán tử
$set
trong MongoDB dùng để làm gì? Trả lời: Toán tử$set
được sử dụng trong phương thứcupdateOne()
hoặcupdateMany()
để cập nhật giá trị của một hoặc nhiều trường trong tài liệu mà không thay đổi các trường khác. Ví dụ:Index trong MongoDB là gì và tại sao cần nó? Trả lời: Index là cấu trúc dữ liệu giúp tăng tốc độ truy vấn bằng cách giảm số lượng tài liệu cần quét. MongoDB tự động tạo index trên trường
_id
, nhưng bạn có thể tạo thêm index trên các trường khác bằng lệnh:Phương thức
aggregate()
trong MongoDB dùng để làm gì? Trả lời: Phương thứcaggregate()
thực hiện các phép xử lý dữ liệu phức tạp (như lọc, nhóm, sắp xếp) thông qua một pipeline các giai đoạn (stages). Ví dụ:Câu lệnh này đếm số người theo độ tuổi ở Hà Nội.
Câu hỏi nâng cao
Sharding trong MongoDB là gì? Trả lời: Sharding là kỹ thuật phân chia dữ liệu thành các phần nhỏ (shards) và lưu trữ trên nhiều máy chủ để hỗ trợ mở rộng ngang. MongoDB sử dụng shard key để quyết định cách phân phối dữ liệu, giúp xử lý khối lượng dữ liệu lớn và tăng hiệu suất.
Replica Set trong MongoDB hoạt động như thế nào? Trả lời: Replica Set là một nhóm các máy chủ MongoDB duy trì cùng một bản sao dữ liệu để đảm bảo tính sẵn sàng cao (high availability). Nó bao gồm một Primary node (nhận ghi) và nhiều Secondary nodes (nhận đọc). Nếu Primary thất bại, một Secondary sẽ được bầu làm Primary mới.
Làm thế nào để tối ưu hóa hiệu suất truy vấn trong MongoDB? Trả lời: Để tối ưu hóa:
Sử dụng index phù hợp trên các trường thường xuyên truy vấn.
Giới hạn số lượng tài liệu trả về bằng
limit()
.Sử dụng
explain()
để phân tích kế hoạch truy vấn.Tránh quét toàn bộ collection bằng cách lọc dữ liệu sớm.
MongoDB hỗ trợ giao dịch (transaction) như thế nào? Trả lời: Từ phiên bản 4.0, MongoDB hỗ trợ giao dịch đa tài liệu (multi-document transactions) trong Replica Set và từ 4.2 trong Sharded Cluster. Ví dụ:
GridFS trong MongoDB là gì? Trả lời: GridFS là một cơ chế trong MongoDB để lưu trữ và quản lý các tệp lớn (vượt quá giới hạn 16MB của BSON). Nó chia tệp thành các chunk và lưu trong hai collection:
fs.files
(metadata) vàfs.chunks
(dữ liệu).
Câu hỏi chuyên sâu
Làm thế nào để xử lý xung đột dữ liệu trong Replica Set? Trả lời: MongoDB không tự động giải quyết xung đột dữ liệu. Trong Replica Set, dữ liệu được đồng bộ từ Primary sang Secondary qua oplog. Nếu xảy ra xung đột (ví dụ: do mạng chậm), bạn cần thiết kế ứng dụng để xử lý logic xung đột hoặc sử dụng timestamp để ưu tiên bản ghi mới nhất.
Write Concern trong MongoDB là gì? Trả lời: Write Concern xác định mức độ xác nhận ghi dữ liệu. Ví dụ:
{ w: "majority" }
yêu cầu dữ liệu được ghi vào đa số node trong Replica Set trước khi trả về thành công, đảm bảo độ bền dữ liệu cao hơn.Khi nào nên sử dụng
$lookup
trong aggregation? Trả lời:$lookup
được sử dụng để thực hiện phép nối (join) giữa các collection trong MongoDB, tương tự như LEFT OUTER JOIN trong SQL. Ví dụ:Nó hữu ích khi cần kết hợp dữ liệu từ nhiều collection.
Làm thế nào để sao lưu và khôi phục dữ liệu trong MongoDB? Trả lời: Để sao lưu, dùng
mongodump
:Để khôi phục, dùng
mongorestore
:Cả hai công cụ đều hỗ trợ tùy chọn như nén, chọn collection cụ thể.
Change Streams trong MongoDB là gì và ứng dụng của nó? Trả lời: Change Streams cho phép ứng dụng theo dõi thời gian thực các thay đổi trong collection (thêm, sửa, xóa). Ví dụ:
Ứng dụng: xây dựng hệ thống thông báo, đồng bộ dữ liệu, hoặc kích hoạt sự kiện dựa trên thay đổi.
Last updated