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ơnLợ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.