连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
所謂最壞情況下最優連接(Worst-Case Optimal Joins),是一項關于數據庫中連接操作的最新技術。給定若干表{R1, R2, ..., Rn},在它們之上的多表連接所能得到結果的數量上限可以根據它們的連接所對應超圖(hypergraph)的部分邊覆蓋(fractional edge cover)來確定。
所謂超圖H=(V(H), E(H)),就是圖中每條邊可以有多個端點,而不再是常用的圖定義中每條邊只有兩個端點。顯然,超圖是常用的圖定義的泛化,所以在超圖上滿足的性質在常用的圖定義上也滿足。而所謂超圖上的部分邊覆蓋(fractional edge cover)就是一個函數
,這個函數滿足對于任意屬于V(H)的v都有 。對于任意部分邊覆蓋f, 被稱為部分邊覆蓋f的權重,記為w。所有部分邊覆蓋f的權重中最小的值稱為部分邊覆蓋值(fractional edge cover number),記為w*。部分邊覆蓋值所對應的部分邊覆蓋記為f*。表{R1, R2, ..., Rn}上的任意一個多表連接可以對應到一個超圖H。具體而言,每個{R1, R2, ..., Rn}中表可以對應一個超圖H中的邊,而每個表中屬性對應一個超圖H中的點。然后,我們就可以有如下性質,表{R1, R2, ..., Rn}上的一個多表連接所能得到結果的數量|OUT|滿足一下性質:
其中
為超圖H上邊e所對應的表,| |是的大小,而f為一個部分邊覆蓋。分析時,我們常常假設任意一張表大小都是N,所以表{R1, R2, ..., Rn}上的一個多表連接所能得到結果的數量|OUT|上限為 ,w*為超圖H的部分邊覆蓋值。子圖匹配查詢也可以視為多表連接的一種特例。在子圖匹配查詢中,每條邊都是一個只有兩列的表,多條邊的子圖對應多個兩列表連接。
這個性質典型的例子就是下圖這個三角形查詢。這個查詢中假設每條邊都在圖上能匹配圖上N條邊的話,那么這個查詢所能得到結果的數量|OUT|上限為
。因為這個三角形部分邊覆蓋值是1.5,其所對應的部分邊覆蓋f*是將所有邊都賦值0.5。圖1. 三角形查詢
上述結論其實是非常特別的。因為傳統的多表連接都是將多表連接轉化成二表連接的組合,所以上述的三角形查詢的查詢執行過程都會如下圖所示。而下圖所示的查詢執行過程會導致
的結果數量。圖2. 傳統三角形查詢執行計劃
那三角形查詢如何得到上述
的結果呢?更進一步,如何讓多表連接得到公式(1)的效果?就需要用使用通用連接(Generic Join)技術。通用連接(Generic Join)
所謂通用連接技術,給定一個查詢的子圖Q=(V(Q), E(Q)),它會首先確定一個查詢點的順序s=<
>,然后按照這個順序s依次對其中查詢點通過多路交集操作來實現多路連接(multiway join)。每個查詢點順序也可被視為一個查詢計劃。在子圖匹配問題上,多路交集可以通過對一個或者多個查詢點匹配的臨接表取交集這個操作來實現。實現的過程中,查詢點的順序s基本都是保證對于任意小于|E(Q)|的k,<
>組成的誘導子圖都是連通的。這里,我們把< >組成的誘導子圖記為Qk。具體到整個過程中,其中包含兩個基本操作:Scan和Extend/Intersect。
Scan:對于查詢點順序s=<
>上的頭兩個點而言,直接通過掃描圖的鄰接表就可以得到。Extend/Intersect(E/I):當我們得到的Qk-1匹配后,本文通過Extend/Intersect操作符計算Qk的匹配。對于任意一個Qk-1的匹配而言,每個與uk相鄰的查詢點的匹配沿著其鄰接表出發得到uk可能的匹配,然后這些從不同的與uk相鄰的查詢點的匹配出發得到的匹配做交集,就能得到uk的匹配。
參考文獻:
Amine Mhedhbi and Semih Salihoglu. 2019. Optimizing subgraph queries by combining binary and worst-case optimal joins. Proc. VLDB Endow. 12, 11 (July 2019), 1692–1704. DOI:https://doi.org/10.14778/3342263.3342643
總結
以上是生活随笔為你收集整理的连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gdb 编译make: *** [all
- 下一篇: python整理数据_Python常见数