Declarative Query Language

Định nghĩa

Declarative Query Language mô tả pattern và điều kiện của kết quả cần lấy mà không quy định chính xác trình tự thao tác để tạo ra kết quả đó.

Mental model

Declarative: what
-> optimizer chọn how
 
Imperative: how + order
-> application khóa chặt execution path hơn

Lợi ích

  • Query ngắn và tập trung vào intent.
  • Storage engine có thể đổi index, join order hoặc execution plan mà không đổi query.
  • Ít phụ thuộc vào physical record order.
  • Có nhiều không gian cho parallel execution.

SQL, Cypher và SPARQL là các ví dụ trong database; CSS selector và XPath cho thấy cùng nguyên lý ở web browser.

Declarative rule trên web

CSS selector mô tả element nào phải nhận style, không chỉ cách browser đi tìm và mutate element đó. Khi DOM thay đổi và selector không còn match, browser tự gỡ style. Với imperative DOM mutation, application phải tự viết cả logic áp dụng lẫn cleanup.

Underlying data/DOM thay đổi
-> runtime đánh giá lại declarative rule
-> kết quả được cập nhật để rule tiếp tục đúng

Điều này tương ứng với database: query giữ nguyên trong khi engine có thể đổi access path, index strategy hoặc parallel implementation.

So với MapReduce

MapReduce nằm giữa declarative và imperative. Framework kiểm soát placement, grouping và retry, nhưng user vẫn cung cấp arbitrary code trong map và reduce. Vì optimizer khó hiểu code tùy ý, declarative SQL hoặc aggregation pipeline thường tạo nhiều cơ hội tối ưu hơn.

Giới hạn

Declarative language thường hy sinh một phần quyền kiểm soát low-level. Với xử lý đặc thù, user-defined function hoặc imperative framework vẫn có thể cần thiết, nhưng làm optimizer khó suy luận hơn.

Liên kết