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 -> reduce trong 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?

Điểm cần đối chiếu với section note

Viết lại bằng lời của tôi

Liên kết