Mỗi họ NoSQL đánh đổi khả năng truy vấn để lấy một đặc tính cụ thể. Chọn đúng nghĩa là bài toán khớp với chính đặc tính đó.
Key-value (Redis, DynamoDB): truy cập theo khoá đã biết, độ trễ thấp nhất. Hợp với session, cache, feature flag, đếm, rate limit. Chọn nhầm khi phải quét toàn bộ key để trả lời một câu hỏi — nghĩa là cần truy vấn theo thuộc tính chứ không theo khoá.
Document (MongoDB): gom một thực thể cùng phần con vào một document đọc/ghi nguyên khối, schema mềm khi hình dạng dữ liệu khác nhau giữa các bản ghi (catalog nhiều thuộc tính, sự kiện, CMS). Chọn nhầm khi phải nối nhiều collection cho hầu hết truy vấn, hoặc phải cập nhật cùng một dữ liệu ở nhiều chỗ đã nhân bản — đó chính là bài toán của mô hình quan hệ. Document ghi rất nhanh ở mức một document nhưng khiến việc giữ nhất quán giữa các bản sao trở thành việc của ứng dụng.
Wide-column (Cassandra, HBase, Bigtable): ghi rất lớn, nhiều node, không có node chủ, khả dụng cao qua nhiều vùng. Hợp với log sự kiện, chuỗi thời gian theo thiết bị, lịch sử tin nhắn. Mô hình bắt buộc thiết kế bảng theo từng truy vấn (mỗi truy vấn một bảng, nhân bản dữ liệu). Chọn nhầm khi cần truy vấn tuỳ ý, nhất quán mạnh, hoặc khi khối lượng ghi thực tế còn nằm gọn trong một Postgres — lúc đó chỉ nhận về chi phí vận hành cụm.
Graph (Neo4j): duyệt quan hệ nhiều bậc là truy vấn chính (đường đi ngắn nhất, bạn của bạn, phát hiện gian lận theo mạng lưới, phân quyền lồng sâu). Chọn nhầm khi dữ liệu chỉ có một cấp cha-con — Postgres với khoá ngoại, hoặc recursive CTE cho vài bậc, xử lý tốt hơn nhiều mà không cần thêm kho dữ liệu.
Dấu hiệu chung của chọn nhầm: phải viết code ứng dụng để bù đắp những gì kho dữ liệu không làm — join thủ công, đối soát dữ liệu nhân bản, quét toàn bộ, hoặc dựng thêm một kho phụ chỉ để trả lời các câu hỏi thường ngày.