25-09-2026 - Designing Data-Intensive Applications
Mục tiêu buổi đọc
- Đọc trang 45-63 của 02 - Data Models and Query Languages.
- Phân biệt declarative query, imperative API và MapReduce.
- Hiểu property graph, triple-store, Cypher, SPARQL và Datalog qua cùng một bài toán traversal.
Kế hoạch đọc
- So sánh CSS selector với imperative DOM manipulation.
- Giải thích vì sao declarative query mở đường cho optimizer và parallelism.
- Theo dõi luồng
map -> group by key -> reducetrong ví dụ shark sightings. - Vẽ vertex/edge/properties từ Figure 2-5.
- So sánh cùng query di cư trong Cypher, recursive SQL, SPARQL và Datalog.
- Viết tiêu chí chọn document, relational hoặc graph model.
Ghi chú trong lúc đọc
- Query mô tả kết quả hay khóa cứng execution order?
- Phần nào của execution được optimizer tự quyết định?
- Relationship có độ sâu cố định hay variable-length?
- Graph cần property graph hay triple-store semantics?
- Logic nào đủ phức tạp để đáng tách thành reusable Datalog rule?
Câu hỏi review
- Vì sao declarative language thường bền hơn trước thay đổi implementation?
- Tại sao declarative query có cơ hội parallelize tốt hơn imperative code?
- Pure function giúp MapReduce retry và phân tán execution như thế nào?
- Vì sao aggregation pipeline dễ tối ưu hơn hai function map/reduce tùy ý?
- Khi nào quan hệ trong dữ liệu nên được model như graph?
- Property graph lưu những gì trong vertex và edge?
- Vì sao variable-length traversal dài dòng trong SQL nhưng ngắn trong Cypher?
- Triple-store ánh xạ property và edge vào triple như thế nào?
- Datalog facts và rules khác dữ liệu gốc và derived predicate ra sao?
- Tại sao graph database hiện đại không đơn giản là CODASYL quay lại?