BDI302c - Phần 6: Truy xuất dữ liệu lớn
Cách lấy dữ liệu ra phụ thuộc vào mô hình đã chọn khi lưu. Với kho khoá và giá trị, truy xuất gần như chỉ là đưa khoá vào và nhận bản ghi về. Với tài liệu kiểu MongoDB, lệnh find lọc được theo cả trường lồng nhau, còn đường ống tổng hợp nối nhiều bước xử lý thành một truy vấn. Với SQL, gom nhóm, ghép bảng hay lọc dòng vẫn viết như trên một máy, nhưng khi bảng đã chia phân vùng khắp cụm như dữ liệu trên HDFS ở Phần 3, phép ghép theo một khoá khác khoá phân vùng phải chuyển dòng qua mạng nên tốn kém hơn nhiều. Dữ liệu văn bản cần chỉ mục đảo, loại chỉ mục mà Solr dựng sẵn, để tìm theo từ khoá, kể cả từ đồng nghĩa. Bài thực hành đi qua những câu hỏi thật, như dân số trung bình của các hạt trong một bang. Ghép kết quả từ nhiều nguồn là việc của Phần 7.
Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.
Luyện tập theo chủ đề này
Câu hỏi của chủ đề
Đáp án đúng: "<projection> ". Trong SQL, mệnh đề SELECT quyết định những cột nào được trả về, tức phép chiếu (projection) trong đại số quan hệ. Trong lệnh find của MongoDB, tham số thứ hai là tài liệu projection, liệt kê trường nào được giữ lại hay bỏ đi trong kết quả (ví dụ đặt name bằng 1 để chỉ lấy trường name), nên nó tương đương SELECT. "<query filter>"là tham số thứ nhất, mô tả điều kiện chọn tài liệu như tuổi lớn hơn 18, tương ứng mệnh đề WHERE chứ không phải SELECT. "<cursor modifier>"là các phương thức nối sau con trỏ kết quả như sort, limit, skip, tương ứng ORDER BY và LIMIT trong SQL. "<collection> " là tên tập hợp tài liệu đang được truy vấn, giống tên bảng đứng sau FROM trong SQL.
Đáp án đúng: "A query statement within another query.". Subquery (truy vấn con) là một câu SELECT được lồng bên trong một câu truy vấn khác, đặt ở mệnh đề WHERE, FROM hay SELECT; kết quả của truy vấn con được truy vấn ngoài dùng làm điều kiện lọc, làm bảng tạm hoặc làm giá trị tính toán, chẳng hạn lọc các nhân viên có lương lớn hơn lương trung bình do truy vấn con tính ra. "A short query than normal." sai vì truy vấn con được nhận diện bằng vị trí lồng nhau, không bằng độ dài; nó có thể dài và phức tạp hơn cả truy vấn ngoài. "An alternative query that acts as a substitute for another query." sai vì truy vấn con không thay thế truy vấn nào mà cung cấp kết quả trung gian cho truy vấn chứa nó; nhiều truy vấn con có thể viết lại thành phép JOIN tương đương, nhưng đó là một cách viết khác chứ không phải định nghĩa của subquery.
db.userIndex.find({email:{$gt:24}}, {_id:0})db.email.find({userIndex:{$gt:24}}, {email:1, _id:0})db.userIndex.find({email:{$lte:24}}, {_id:0})db.email.find({userIndex:{$lte:24}}, {email:1, _id:0})Đáp án đúng: "
db.email.find({
userIndex:{
$gt:24
}
}, {email:1, _id:0})". Trong MongoDB, lệnh find nhận hai đối số: điều kiện lọc (query) và phép chiếu (projection). Yêu cầu là lọc theo trường userIndex lớn hơn 24 nên điều kiện phải là userIndex với toán tử $gt, và chỉ lấy email nên projection đặt email bằng 1 và tắt _id bằng 0. "
db.userIndex.find({
email:{
$gt:24
}
}, {_id:0})" đặt điều kiện lên email, so một địa chỉ thư với số 24, và projection trả mọi trường trừ _id. "
db.userIndex.find({
email:{
$lte:24
}
}, {_id:0})" vừa lọc nhầm trường email vừa dùng $lte (nhỏ hơn hoặc bằng), ngược chiều yêu cầu. "
db.email.find({
userIndex:{
$lte:24
}
}, {email:1, _id:0})" đúng trường và đúng phép chiếu nhưng $lte lấy các chỉ số từ 24 trở xuống, trái với điều kiện lớn hơn 24.
Đề có câu hỏi của chủ đề này
3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.