Năm 2023 được dự báo là năm phát triển vượt bậc của NoSQL, chính vì vậy nhu cầu nhân lực cho vị trí NoSQL Developer cũng trở nên nhiều hơn bao giờ hết, bài viết này cung cấp cho anh em một số câu hỏi phỏng vấn NoSQL Developer hay. Tất nhiên là anh em SQL Developer có thể đọc thêm NoSQL để bổ sung kiến thức.
Bài viết này chia sẻ với anh em 5 câu hỏi phỏng vấn liên quan tới NoSQL. Phần một này bao gồm các câu hỏi tổng quan, chi tiết và các câu hỏi khó hơn xin được viết ở phần 2.
Ok, gét gô thôi anh em!
1. NoSQL là gì? Điểm mạnh của NoSQL
Tất nhiên là câu hỏi đầu tiên phỏng vấn NoSQL Developer là câu hỏi về khái niệm NoSQL. Câu hỏi này anh em cố gắng trả lời càng chi tiết càng tốt.
Một câu hỏi định nghĩa cần nêu bật khái niệm một cách chính xác. Đầu tiên.
A NoSQL database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases (like SQL, Oracle, etc.).
NoSQL database cung cấp cơ chế lưu trữ và truy xuất dữ liệu được mô hình hoá theo các cách thức khác với dạng bảng được sử dụng trong cơ sở dữ liệu dạng quan hệ (như SQL, Oracle).
Các loại cơ sở dữ liệu được sử dụng trong NoSQL bao gồm:
- Document Oriented (Hướng tài liệu)
- Key Value
- Graph
- Column Oriented (Hướng theo cột)
Về ưu điểm của NoSQL anh em có thể nêu ra một số ưu điểm làm cho NoSQL trở nên mạnh mẽ hơn so với SQL truyền thống. Một số ưu điểm có thể kể tới là:
- NoSQL không có Schema
- Hỗ trợ đọc ghi với tần suất rất cao
- Hỗ trợ được big data (Terra Byte và Peta Byte)
- Tốc độ Development nhanh hơn
- Cho phép in memory cache giúp tối ưu performance cho queries
2. Lúc nào thì lựa chọn sử dụng NoSQL
Sau khi đã hiểu về NoSQL và một số ưu điểm của NoSQL thì câu hỏi phỏng vấn NoSQL Developer thứ hai liên quan tới khi nào thì anh em sử dụng nó.
Biết là có rất nhiều ưu điểm so với SQL truyền thống, nhưng không phải lúc nào cũng sử dụng. Tuỳ vào dự án, tuỳ vào business và yêu cầu data mà anh em sử dụng.
Hiểu được lúc nào sử dụng NoSQL cũng giúp anh em bớt cuồng, bớt thần thánh hoá. Một số trường hợp nêu dưới đây anh em nên sử dụng NoSQL.
- Sử dụng với dữ liệu phi cấu trúc (không đem vào bảng, mỗi dòng đều phải có đủ từng đó column,…). Cũng không cần thiết phải quan tâm với schema.
- Khách hàng cần xây dựng web, application có thể đáp ứng lượng truy cập cao hoặc cực cao.
- Dữ liệu phi cấu trúc của anh em đôi khi không có ý nghĩa gì nếu sử dụng với SQL, hoặc ít nhất là không thể tổ chức được trong SQL. Hoặc những thông tin đó anh em cần JOIN quá trời JOIN để lấy ra cho được.
3. Giải thích Document-oriented và Key-Value trong NoSQL
Ở hai câu hỏi trước, ta đã hiểu và biết lúc nào sẽ sử dụng NoSQL. Câu hỏi thứ 3 phỏng vấn NoSQL Developer sẽ đi sâu vào các kiểu thường được sử dụng trong NoSQL.
Cụ thể ở câu hỏi này là Document Oriented và Key Value.
3.1 Key-value
Với Key-value thì cách thức tổ chức dữ liệu đúng như tên gọi. Một khoá là một định danh duy nhất. Có thể sử dụng khoá để truy xuất dữ liệu.
Anh em có thể nêu các ví dụ thực tế. Phần giá trị (value) được lưu trữ không đơn giản như Hashmap. Nó có thể đơn giản như là chuỗi, các số, hoặc cũng có thể phức tạp hơn như các giá trị lồng với nhau. Key ở đây ánh xạ trực tiếp với giá trị, hoặc vị trí lưu trữ giá trị (location of data being stored)
3.2 Column Oriented
Về Column Oriented thì đúng như cái tên, Oriented (hướng về).
Column-oriented NoSQL databases use a set of columns to store data. These column sets are known as column families, and users can directly query these column families without going through all the data records. Dữ liệu hướng column là tập hợp các column để lưu dữ liệu. Các column này được gọi là danh sách họ các cột (trong cùng gia đình), user có thể truy vấn trực tiếp dữ liệu từ các cột mà không cần phải đi qua tất cả các dòng dữ liệu
Loại hình này rõ ràng khác biệt với cơ chế lưu theo kiểu hàng ở SQL và các RDBMS khác. Khi cần truy xuất data ở cột, anh em không cần phải lấy dữ liệu ở cột thông qua việc đi hết một lượt tất cả các dòng.
Việc sử dụng và lưu trữ dạng cột cũng giúp tăng hiệu năng, riêng đối với việc đọc dữ liệu thì Column Oriented tỏ ra có hiệu năng cao hơn hẳn so với RDBMS thông thường. Tất nhiên vẫn có những điểm yếu như việc ghi sẽ tốn nhiều effort hơn để đảm bảo tính consistency (nhất quán) của dữ liệu.
Tham khảo SQL Developer Jobs hấp dẫn trên TopDev
4. Làm thể nào để ghi lịch sử thay đổi trong NoSQL
Câu hỏi phỏng vấn NoSQL Developer số 4 liên quan tới kinh nghiệm làm thực tế. Từ những kiến thức lý thuyết ở trên, anh em có thể giải quyết được bài toán thực tế.
Đối với câu hỏi tracking history này bên SQL và RDBMS bình thường thì không có vấn đề gì ha anh em. Cứ mỗi lần thay đổi có thể insert thêm 1 dòng, có created_at và updated_at
Cứ insert lúc nào thì lưu history, câu chuyện không có gì khi yêu cầu thực hiện việc tương tự bên NoSQL. Với NoSQL, thông trường sẽ có vài cách để track được lịch sử thay đổi.
- Create a new version on each change (tạo version mỗi khi thay đổi)
- Only store changes in a new version (chỉ lưu trữ thay đổi trong version mới)
- Store changes within the document (lưu thay đổi kiểu document)
{ _id: "4c6b9456f61f000000007ba6" title: [ { version: 1, value: "Hello world" }, { version: 6, value: "Foo" } ], body: [ { version: 1, value: "Is this thing on?" }, { version: 2, value: "What should I write?" }, { version: 6, value: "This is the new body" } ], tags: [ { version: 1, value: [ "test", "trivial" ] }, { version: 6, value: [ "foo", "test" ] } ], comments: [ { author: "joe", // Unversioned field body: [ { version: 3, value: "Something cool" } ] }, { author: "xxx", body: [ { version: 4, value: "Spam" }, { version: 5, deleted: true } ] }, { author: "jim", body: [ { version: 7, value: "Not bad" }, { version: 8, value: "Not bad at all" } ] } ] }
Ví dụ dưới đây lưu thay đổi của các field độc lập với nhau. title có 2 version, body cũng vậy.
5. Trường hợp muốn chuyển đổi từ SQL qua NoSQL. Cần làm những gì?
Câu hỏi cuối cùng trong bài viết chia sẻ các câu hỏi phỏng vấn NoSQL Developer lần này là việc migration từ SQL qua NoSQL. Tất nhiên là việc bưng nguyên 1 cục từ SQL qua NoSQL không phải dễ dàng.
Tuy nhiên theo từng bước vẫn có thể thực hiện được. Câu hỏi này đánh vào kiến thức của anh em về cả SQL và NoSQL. Các bước thực hiện:
- Xác định các đối tượng dữ liệu ở SQL, mối liên hệ giữa các dữ liệu, đảm bảo cấu trúc và định dạng của dữ liệu đúng sau khi đem qua NoSQL
- Sau khi đã có cấu trúc và lưu được dữ liệu, anh em cần thực hiện query để đảm bảo tất cả dữ liệu đều được lưu đúng và đầy đủ. Bước này quan trọng
- Cuối cùng là kiểm tra lại hiệu năng, đảm bảo với NoSQL sẽ không có vấn đề gì về hiệu năng, nếu cần thì đánh index.
6. Kiến thức thêm chuẩn bị phỏng vấn NoSQL Developer
Kết thúc phần 1, ở phần 2 sẽ đi sâu hơn NoSQL cho anh em với một số câu hỏi:
- NoSQL là norelation nhưng làm sao xác định được mỗi liên hệ giữa các record (record relations)
- Transaction trong NoSQL
- Thực hiện scalability và giải quyết các vấn đề performance trong NoSQL.
Ngoài ra anh em có thể tham khảo thêm:
- Scaling the Firebase Realtime Database beyond 200k users
- Migration from SQL to NoSQL Databases – Whitepaper
- Column Oriented Storage – The hidden thing 1
Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!
Tác giả: Kiên Nguyễn
Có thể bạn quan tâm:
- Cách sử dụng Transaction trong SQL hiệu quả
- NoSQL Key Value Stores must know
- System Design Cơ Bản – Sql vs. Nosql
Xem thêm các việc làm Developer hấp dẫn tại TopDev