---
# System prepended metadata

title: '[2019 ICDE]  An efficient framework for correctness-aware knn queries on road networks'
tags: [DBMS]

---

---
tags: DBMS
---
# [2019 ICDE]  An efficient framework for correctness-aware knn queries on road networks
## Abstract
$KNN\ query$ = 在一路網上有 $o$ 的物件集合以及 $q$ 點 ($q$ 點 不等於 $vertex$)，$KNN\ query$ 意思為離 $q$ 點最近的 $k$ 個物件($\in o$)。
這篇論文提出一個 $GLAD$ 框架來解決 $KNN$ 的正確性以及提升效能。在此框架下執行的 $KNN$ 任務能夠消耗較少的運算資源($Enhance\ efficient$)且有效率的來獲得正確答案($Enhance\ throughput$)。
## Introduction
* $KNN$ 能夠用在叫計程車，路邊意外處理或警察派遣，解決實際路況的情況。作者提到現有許多試圖解決路網問題的架構，但都無法在效能與答案間取得平衡。而問題的癥結點多發生在 $KNN\ Correctness$。而 $correctness$ 是由兩大因素去決定。
1. $Update\ Moving\ Object$
    系統更新移動物件的頻率通常比更新物件的 $index$ 還要快。若一個路網中有許多追蹤中的移動物件，那所需的時間比更新單一物件的所在位置還花時間。這就導致了系統上物件與實際上的位置不同。e.g. $Uber\ EAT$
2. $Query\ Conflict$
    兩個並行的 $KNN\ Query$ 獲得相同的 $Object$。e.g 在兩個不同的點$q_{1}, q_{2}$ 的 $3NN$ 拿到 $q_{1} = (o_{1}, o_{3}, o_{4})$，$q_{2} = (o_{1}, o_{2}, o_{5})$。在 $o_{1}$ 被重複獲得的情況下，$q_{2}$ 的時間就會被 $Delay$ 或是 $Abort$
* 這篇論文提出一個框架 $GLAD$ 提供 $High\ throughput$ 兼顧 $Correctness$。
1. $light-weighted\ grid\ index\ structure$，透過本論文的索引架構能夠快速更新 $index$ 並獲取 $query$，解決第一個問題。
2. $formally\ define\ the\ conflict\ and\ serializability\ of\ KNN$，透過本論文的排程演算法能夠有效解決 $query\ conflict$ 進一步提升系統整體的輸出。
## Problem Defination
```graphviz
digraph linkedlist {
	node[shape = circle]
	v
    u
    o
    q
    rankdir=LR
    {
        u->v[label="e(u, v)"]
        u->o
        o->v
        u->q
        q->v 
    }
}
```
這篇論文假設 $Object\ o$ 與 $Query\ q$ 都在 $Vertex$ 上，忽略掉上面的誤差。
* KNN query
    KNN query returns a set $R \subseteq M$ of k moving objects sucj that for all ....
* KNN Conflict
* Update query conflict
* Serializable kNN

我們應該要盡量避免 $query\ conflict$ 還有 $query\ update\ conflict$，這樣才要有效增加系統輸出。
以下簡介我們系統模型，分為$task\ arrival\ ,\ task\ handling$ 兩部分。
![](https://i.imgur.com/jeT5lYZ.png)

* Task arrival
假設 $queries$ 進入系統的過程是柏松分布(也就是一段時間區間內互相獨立不影響。)系統會每 $T$ 更新所有 $object$ 一次。假設 $Object$ 的 GPS 更新週期為 $T_{0}$，則因為更新成本以及處理時間的考量，假設處理時間為 $T_{u}$，若 $T_{u} > T$ 則系統不會有輸出，因為處理趕不上更新。$T > T_{0}$ 通常為成本的考量。
* Task Handling
一個系統中應存在多個處理單元，由 $Task\ queue$ 來做分配，達成平行的執行條件。透過 $Response\ time\ T_{r}$ 的限制，提高舊 $query$ 的優先度。因為是平行處理 $query$ 所以有可能發生 $conflict$ 一旦發生則把該 $query$ 丟棄並重新計算，因為處理的時間是在下次更新前的間隔，所以不會更新 $query$ 內容。
![](https://i.imgur.com/PC9S9Zx.png)
透過此公式，可以知道系統的總體輸出能夠靠減少 $query\ processing\ time\ t_{q}$ 以及 $update\ time\ t_{u}$ 來增加。
## GLAD Index structure
$GLAD$ 的物件索引架構是基於網格($Grid-based$)來記錄的。以下簡述其作法
* 將路網切分成不同網格並記錄觀察進入網格的物件
* 在網格中的節點彼此距離固定
* 因此在計算 $KNN\ query$ 時能夠透過獲取節點間的距離來快速得到物件與 $query$ 的距離

將路網切成 $2^{x} * 2^{x}$ 的正方形，並透過 $Hilbert\ curve$ 將每個網格標上編號。 
![](https://i.imgur.com/hInQ26m.png)
並且記錄
* 每個網格上有哪些物件
* 每個物件落在哪些網格上

為了避免每隔 $T$ 時間全部更新一次造成的時間成本，論文採用不同的更新手段。
1. 優先更新要求更新的物件。
    * 如果一物件移動到新的網格，則將該物件直接放入那網格儲存物件的 list 中。雖然會造成重複的資訊，但不會影響到整體的正確率。
    * 並且在遍歷網格的途中也會將重複的刪除
2. 透過累積更新次數來避免大量更新
    * 當有更新一物件的網格索引( $Grid\ index$ )後，總更新次數 $a_{u}$ 就會增加 1 。
    * 當 $a_{u}\ =\ |M|$ 的時候就會從頭更新一次，這樣 $Update\ cost$ 最多 $O(|M|)$
舉例來說，Fig 3 上有五個物件 $o_{1}, o_{2}, o_{3}, o_{4}, o_{5}$，分布在 $v_{1}, v_{3}, v_{6}, v_{8}, v_{9}$ 五個頂點上。因此各網格的儲存資訊如下。
* $L_{4} = \{ o_{1}, o_{2} \}$
* $L_{10} = \{ o_{3} \}$
* $L_{40} = \{ o_{5} \}$
* $L_{52} = \{ o_{4} \}$
* 並且透過一陣列 $\{4, 4, 10, 52, 40\}$來表示對應物件所處的網格號碼。

因為現存大量的紀錄節點間距離的方式，此篇論文用 $D(u, v)$ 來表示節點間距離。
因為是要算 $K$ 個最近的物件，所以在此用基於網格($Grid-based$)的剪枝方式計算並挑選。
![](https://i.imgur.com/rSTaHzl.png)
這個演算法的目的是利用歐式距離，以 $query$ 所在的點為中心，擴散出去來找到最近的 $K$ 個物件。e.g. $1*1,\ 3*3,\ 5*5$ 透過這種方式可以大幅減少計算所有物件與 $query$ 距離的時間。以 $query$ 為起點，第一輪是計算 $query$ 的鄰居網格有沒有物件存在，之後再尋找鄰居往隔的鄰居網格，一層一層迭代，直到找到 $K$ 個為止。
舉例來說，如上圖我們希望找到在 $Vertex\ 7$ 的 $2NN\ query$。一開始找 $Vertex\ 7$ 的 $grid$，裡面沒有物件。之後往外找 $3*3$，找到兩個候選物件 $\{o_{3}, o_{4}\}$。雖然找到兩個，但因為路網邊長不一定相同，較遠的網格有可能抵達 $Vertex\ 7$ 的距離比近的網格快。所以再往外找 $5*5$，發現 $o_{5}$ ，但其的距離比候選物件的第二短還長，所以不需要再往下找。
以下簡述
* 先找 $query\ grid$
* 以 $query\ grid$ 為中心擴大搜尋
* 若最小的距離大於第 $K$ 物件的距離則結束

**Question**
> 因為路網邊界的長度以例子來說有可能會不相同，為何在一次找不到後就停止?
> 可能跟計算距離的方式有關