Scale-Independent
QL
Dirty Secret: Declarative languages hide complexity.
![]() | ![]() | ![]() |
get(key) and getRange(prefix, limit)Given the set of all queries in an application $Q$. Let $Exec(q_i)$ denote the number of operations performed in the worst case by a query and $c_{ops}^{q_i}$ be a constant.
$$\forall q_i \in Q \exists c_{ops}^{q_i} : Exec(q_i) < c_{ops}^{q_i}$$
|
![]() |
$c_{ops}=1$ GetRange |
![]() |
$c_{ops}=1$ GetRange |
![]() |
$c_{ops}=|ChildPlan|$ Gets |
![]() |
$c_{ops}=|Child Plan|$ GetRanges |
|
![]() |
Why is this safe to run? Developers have more information than optimizer.
|
|
|
|
Measure Single-Op |
Predict Query SLO |
Throughput![]() Linear scaling as application grows. |
Latency![]() Constant response time as application grows. |
By adding scale independence to the relational model, PIQL makes it easier to build web application that work even as they explode in popularity.
/
#