TDSQL“相似查詢工具MSQL+”入選VLDB論文

作者介紹:王曉宇,騰訊數據庫TDSQL團隊成員,目前參與TDSQL數據庫內核研發工作。

騰訊與高校合作的論文入選數據庫頂會

騰訊TDSQL團隊攜手中國人民大學信息學院、武漢大學計算機學院合作的DEMO論文“MSQL+: a Plugin Toolkit for Similarity Search under Metric Spaces in Distributed Relational Database Systems”被國際數據庫頂級會議VLDB 2018錄取。

該論文設計了一款基於RDBMS的插件式近似查詢工具MSQL+。MSQL+遵循SQL標準,支持面向度量空間(一種比文本空間、向量空間等更爲簡潔和通用的表達方式)的近似查詢,依託分佈式數據庫系統TDSQL,實現了通用、易用、高效的相似查詢處理技術。

會議期間,團隊展示基於騰訊分佈式數據庫TDSQL實現的相似查詢工具MSQL+,用於在分佈式系統TDSQL中實現相似查詢。在TDSQL數據庫內部集成更多的計算功能,賦予數據庫更爲豐富的計算能力

原論文請見http://www.vldb.org/pvldb/vol11/p1970-lu.pdf。論文信息如下:

Wei Lu, Xinyi Zhang, Zhiyu Shui, Zhe Peng, Xiao Zhang, Xiaoyong Du, Hao Huang, Xiaoyu Wang, Anqun Pan, Haixiang Li: MSQL+: a Plugin Toolkit for Similarity Search under Metric Spaces in Distributed Relational Database Systems. VLDB 2018 Demonstration

如果您想了解更多技術細節,請參考如下內容(如下重點介紹MSQL+的產生背景、功能、架構、設計):

論文解讀

以下重點介紹MSQL+的產生背景、功能、架構、設計,原論文請見http://www.vldb.org/pvldb/vol11/p1970-lu.pdf

MSQL+產生背景

相似查詢是諸多數據庫應用的基本操作。

舉例來說,相似查詢在文本檢索、拼寫檢查、指紋認證、人臉識別等場景作用顯著。

那麼這些應用是如何進行相似查詢的?給出對象q和集合R,返回R中與q相似度相差不超過θ的元素。最直接地,遍歷r∈R,計算r與q的相似度,可想而知,此方法效率很低。

各領域已發展出多種方式對上述相似查詢方式針對優化,但仍存在以下問題:

1與現有數據庫系統剝離:現有的相似查詢方法,大量建立新系統或新式索引提高效率,如M-Tree、D-Index、kd-tree等,雖說性能得以提升,但很難將其融合到現有RDBMS。另有一些方法基於B+-tree實現相似查詢,但要在現有RDBMS上開發新API,而且效率表現不佳。這些方法缺少統一標準、兼容性差,每接觸新方法,都要付出額外的學習成本。

2數據空間有限,普適性差:衆多應用場景對“相似”的定義不同,衡量維度、數據類型不同,難以建立通用的相似查詢模型。藉助於定製化的剪枝規則,特定場景相似查詢性能得到提升,但幾乎不可能移植到其他應用場景。作爲基本操作,相似查詢應該具有普適性,在不同RDBMS應用中都能保證良好表現。

3僅適用中心化系統,難應對“大數據”場景:大數據時代下,藉助於分佈式系統維護日益增長的數據是大勢所趨。遺憾的是現有的相似查詢方式,並未良好地支持分佈式系統。

爲避免上述問題,MSQL+被設計爲:基於RDBMS,遵循SQL標準,借力分佈式數據庫,以實現通用、易用、高效。在實際生產系統中,MSQL+以騰訊公司的分佈式數據庫TDSQL爲依託,高效地實現了論文提出的思想和功能。

MSQL+主要功能

MSQL+由兩大模塊組成:

1構建索引:MSQL+爲每個數據對象生成可比較的簽名(Signature),並在簽名上建立B+-tree索引,簽名值位於相似度範圍內的對象,作爲相似查詢的候選項;

2查詢處理:用戶提交SELECT-FROM-WHERE語句,該語句須提供兩個約束條件,分別爲:a) 用戶定義的相似度函數,b) 相似度範圍,條件b)初步篩選候選項,條件a)精煉候選項、返回相似結果集。

相比於現有的相似查詢方式,MSQL+具備以下優勢:

1基於RDBMS現有功能實現,使用B+-tree索引數據,使用SELECT-FROM-WHERE語句相似查詢;

2支持廣泛的數據空間:任意類型數據可被合理地索引(見下文設計),經由統一接口相似查詢;

3可運行於單機和分佈式RDBMS,依託分佈式關係數據庫系統TDSQL,能夠加快預處理及相似查詢進程。

MSQL+設計方案

本節將對MSQL+近似查詢方案做簡單介紹,細節請見原論文。

1. Similarity Search in Metric Spaces

MSQL+採用分治策略,將完整的數據集劃分成多個獨立的分片,每個分片篩選出若干較爲相似的候選者,這些候選者後續會被二次精選。

MSQL+如何劃分數據集?論文說明,數據集內一些對象被選爲pivot(下節介紹選舉pivot的策略),剩餘的數據對象按某種策略分配到唯一的pivot(比如,與之最近的pivot),這些pivot和分配至此的數據對象構成了一個分片。如此,完整的數據集被劃分成多個互不相交的小數據集,然後在各分片內篩選較爲相似的候選者。

篩選候選者的規則是什麼呢?我們從一個例子入手:給出對象q和數據集R,相似查詢返回R中與q相差不超過θ的數據對象。對分區

而言,篩選

,且

的對象r作爲候選者。

定理 1

對於分區

(其pivot爲

),

的必要條件是:

Pivot的挑選,是上述過程的基礎,那麼,MSQL+如何挑選pivot?

2. Pivot Selection

選擇合適的pivot,可以加快篩選候選者及精選結果集的過程,論文提出了四種pivot選擇方式:

1Random:從集合R中隨機挑選對象作爲pivot;

2MaxVariance:從集合R中挑選方差最大的一組對象作爲pivots;

3MaxProb:pivot需滿足,預期篩選出的候選項的個數最少;

4Heuristic:採取類似於k-means的啓發式算法,整體上看,各分區中的元素儘量靠近pivot。

到此,已經可以篩選較爲相近的候選者,那麼,如何從中精選出更相近的結果集呢?

3. Processing similarity queries in RDBMS

爲了快速精選出結果集,MSQL+在數據集上構建B+-tree索引,以下分兩步,介紹該索引如何構建、如何使用。

論文做出定義:某表存儲了數據集R,表上有M個屬性(即M列),部分屬性作爲相似度的度量,記作A:{A1, A2, ..., An}

,對於

,r[A]表示數據r屬性{A1, A2, ..., An}的值。

3.1 Index Building

在A上建立B+-tree索引,有兩個條件:a) 域{A1, A2, ..., An}都是可比較的,b) 只需比較A各域的值即可精選候選項。藉助於此索引,可方便地實現相似查詢。那麼,如何構建這樣的索引?論文做出這樣的設計:

對於

,一張“簽名表”(Signature generation schema)記錄了r的簽名S(r[A]),S(r[A])=<i, |r,

|>,其中i是分區ID,|r,

|是分區內數據對象r和pivot

的差距,簽名的比較規則爲:

原表(存儲數據集R)上新增一列I記錄簽名<i, |r,

|>,並在I上建立B+-tree索引,此索引滿足“可比較”和“比較索引可確定候選項”兩要素,故可藉助此索引方便地近似查詢。

3.2 Query Processing

至此,已經構建了合適的B+-tree索引,如何利用該索引精選候選者?

MSQL+支持用戶自定義相似度函數DIST(r[A], q[A], θ),此函數判斷r[A]和q[A]的距離未超過θ,用戶定義相似度函數這一設計,擴展了MSQL+支持的數據空間和類型。有了DIST函數,用戶輸入SELECT-FROM-WHERE語句形如:

SELECT R.A1,...,R.An

FROM R

WHERE DIST(r[A], q[A], θ)

上面這條SQL,直接從數據集R中精確篩選結果集,效率堪憂。

候選者此時派上用場,定理1(見Similarity Search in Metric Spaces)描述瞭如何篩選候選者,減少精確篩選的數據量,加速精揀過程。結合定理1和DIST函數,用戶輸入SELECT-FROM-WHERE語句形如:

SELECT R.A1,...,R.An

FROM R, PivotsRangeSet PRS

WHERE I BETWEEN PRS.LB and PRS.UB AND

DIST(r[A], q[A], θ)

其中,臨時表PivotsRangeSet維護了各pivot的LU和UB。因爲PivotsRangeSet規模很小,查詢優化器總會先索引掃描得到候選項,然後DIST函數精煉結果集。

MSQL+分佈式架構

MSQL+既可在本地RDBMS上工作,又可部署在分佈式RDBMS。論文給出MSQL+基於TDSQL的架構。

1. System Architecture

1.1 TDSQL介紹

TDSQL是騰訊針對金融聯機交易場景推出的高一致性,分佈式數據庫集羣解決方案,能夠保證強一致下的高可用,擁有靈活的全球部署架構,實現了倍數性能提升,增強了MySQL原生的安全機制,能夠在水平方向上分佈式擴展,具有自動化的運營體系和完善的配套設施。

TDSQL由以下關鍵組件構成:

1Routing Node:負載均衡;

2ZooKeeprt:維護系統元信息,如表、索引、分區等;

3Global Executor:接收SQL、下發local executor、彙集本地結果、生成執行計劃等;

4Local executor:本地數據存、取、計算等。

1.2 TDSQL增益

MSQL+是一款由用戶自定義函數、存儲過程實現的插件式工具,可以無縫融入TDSQL。

MSQL+如何在TDSQL上工作呢?

ZooKeeper維護MSQL+特需的元信息,並同步至各local executors;Global executor接收相似查詢請求,分發至各local executors執行,彙集最終結果並給出執行計劃;Local executor完成本地分片相似查詢,返回執行結果。

TDSQL又能給MSQL+帶來什麼樣的增益?

首先是可靠、可用性,TDSQL實現了多副本強一致性,最大程度地保障MSQL+所需的大量樣本數據的安全、可用、可靠。

其次,TDSQL支持水平方向分佈式擴展,免除單機存儲容量不足的後顧之憂,無論MSQL+樣本數據多大,TDSQL都可輕鬆應對。

TDSQL在安全機制做出的優化,很大程度保證MSQL+樣本數據的安全和機密。

我們最關心的性能問題,從分佈式角度看,TDSQL多個本地節點並行查詢,全局相似查詢效率大幅度提升;具體到本地節點,TDSQL在數據庫內核方面做出大量優化,使得單節點效率也有很大提升。

2. Index Building

ZooKeeper維護了全部pivot信息,並由Global executor將pivot信息下發至local executors。 Global executor協調local executors構建索引,每個local executor維護一定數量的分片,也就維護對應的pivots,基於這些pivots,local executor生成簽名S(r[A]),進而構建起索引。

3. Query Processing

用戶發起相似查詢請求時,routing node選擇一個global executor,global executor協調local executors並行執行相似查詢,彙集本地執行結果並生成執行計劃。

MSQL+界面展示

論文展示的操作界面如下,MSQL+支持相似查詢、索引構建、客戶端連接、集羣管理、數據導入、查詢狀態顯示、執行計劃可視化等功能。

結論:

MSQL+是一款基於RDBMS的插件式近似查詢工具,基於騰訊TDSQL實現,具有通用、易用、高效的特點:統一接口支持多種數據空間;遵循SQL標準,發起SELECT-FROM-WHERE命令即可完成相似查詢任務;MSQL+依託騰訊分佈式數據庫TDSQL,實現了負載均衡、多點並行,可高效地完成相似查詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章