1. 程式人生 > >TDSQL“相似查詢工具MSQL+”入選VLDB論文

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

range 小數 node 每日 大數 alt 面向 process evel

歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~

本文由騰訊雲數據庫 TencentDB發表於雲+社區專欄

作者介紹:王曉宇,騰訊數據庫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相差不超過θ的數據對象。對分區Pi而言,篩選r∈Pi ,且|q,r|≦θ的對象r作為候選者。

定理 1

對於分區Pi(其pivot為Pi),?r∈Pi ,|q,r|≦θ的必要條件是:

LBi=|pi, q|-θ≦|pi, r|≦|pi, q|+θ = UBi

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 } nM ,對於r∈R ,r[A]表示數據r屬性{A1, A2, ..., An}的值。

3.1 Index Building

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

對於r∈R,一張“簽名表”(Signature generation schema)記錄了r的簽名S(r[A]),S(r[A])=<i, |r, Pi|>,其中i是分區ID,|r, Pi|是分區內數據對象r和pivot Pi的差距,簽名的比較規則為:

技術分享圖片

原表(存儲數據集R)上新增一列I記錄簽名<i, |r, Pi|>,並在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,實現了負載均衡、多點並行,可高效地完成相似查詢。

問答
PHP + MSQL +函數在函數中使用請求
相關閱讀
TDSQL參加全球數據庫頂級盛會 VLDB 2018回顧
騰訊雲數據庫MySQL遊戲行業數據安全實踐分享
MySQL 8.0 版本功能變更介紹
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社區發布,更多原文請點擊

搜索關註公眾號「雲加社區」,第一時間獲取技術幹貨,關註後回復1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區!

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