歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~node
本文由騰訊雲數據庫 TencentDB發表於雲+社區專欄算法
做者介紹:王曉宇,騰訊數據庫TDSQL團隊成員,目前參與TDSQL數據庫內核研發工做。sql
騰訊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 Demonstrationdom
若是您想了解更多技術細節,請參考以下內容(以下重點介紹MSQL+的產生背景、功能、架構、設計):機器學習
如下重點介紹MSQL+的產生背景、功能、架構、設計,原論文請見http://www.vldb.org/pvldb/vol11/p1970-lu.pdf。分佈式
類似查詢是諸多數據庫應用的基本操做。
舉例來講,類似查詢在文本檢索、拼寫檢查、指紋認證、人臉識別等場景做用顯著。
那麼這些應用是如何進行類似查詢的?給出對象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+由兩大模塊組成:
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+採用分治策略,將完整的數據集劃分紅多個獨立的分片,每一個分片篩選出若干較爲類似的候選者,這些候選者後續會被二次精選。
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?
選擇合適的pivot,能夠加快篩選候選者及精選結果集的過程,論文提出了四種pivot選擇方式:
1Random:從集合R中隨機挑選對象做爲pivot;
2MaxVariance:從集合R中挑選方差最大的一組對象做爲pivots;
3MaxProb:pivot需知足,預期篩選出的候選項的個數最少;
4Heuristic:採起相似於k-means的啓發式算法,總體上看,各分區中的元素儘可能靠近pivot。
到此,已經能夠篩選較爲相近的候選者,那麼,如何從中精選出更相近的結果集呢?
爲了快速精選出結果集,MSQL+在數據集上構建B+-tree索引,如下分兩步,介紹該索引如何構建、如何使用。
論文作出定義:某表存儲了數據集R,表上有M個屬性(即M列),部分屬性做爲類似度的度量,記做A:{ A1, A2, ..., An } n≦M ,對於r∈R ,r[A]表示數據r屬性{A1, A2, ..., An}的值。
在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索引,此索引知足「可比較」和「比較索引可肯定候選項」兩要素,故可藉助此索引方便地近似查詢。
至此,已經構建了合適的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+既可在本地RDBMS上工做,又可部署在分佈式RDBMS。論文給出MSQL+基於TDSQL的架構。
TDSQL是騰訊針對金融聯機交易場景推出的高一致性,分佈式數據庫集羣解決方案,可以保證強一致下的高可用,擁有靈活的全球部署架構,實現了倍數性能提高,加強了MySQL原生的安全機制,可以在水平方向上分佈式擴展,具備自動化的運營體系和完善的配套設施。
TDSQL由如下關鍵組件構成:
1Routing Node:負載均衡;
2ZooKeeprt:維護系統元信息,如表、索引、分區等;
3Global Executor:接收SQL、下發local executor、聚集本地結果、生成執行計劃等;
4Local executor:本地數據存、取、計算等。
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在數據庫內核方面作出大量優化,使得單節點效率也有很大提高。
ZooKeeper維護了所有pivot信息,並由Global executor將pivot信息下發至local executors。 Global executor協調local executors構建索引,每一個local executor維護必定數量的分片,也就維護對應的pivots,基於這些pivots,local executor生成簽名S(r[A]),進而構建起索引。
用戶發起類似查詢請求時,routing node選擇一個global executor,global executor協調local executors並行執行類似查詢,聚集本地執行結果並生成執行計劃。
論文展現的操做界面以下,MSQL+支持類似查詢、索引構建、客戶端鏈接、集羣管理、數據導入、查詢狀態顯示、執行計劃可視化等功能。
MSQL+是一款基於RDBMS的插件式近似查詢工具,基於騰訊TDSQL實現,具備通用、易用、高效的特色:統一接口支持多種數據空間;遵循SQL標準,發起SELECT-FROM-WHERE命令便可完成類似查詢任務;MSQL+依託騰訊分佈式數據庫TDSQL,實現了負載均衡、多點並行,可高效地完成類似查詢。
問答
PHP + MSQL +函數在函數中使用請求
相關閱讀
TDSQL參加全球數據庫頂級盛會 VLDB 2018回顧
騰訊雲數據庫MySQL遊戲行業數據安全實踐分享
MySQL 8.0 版本功能變動介紹
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識
此文已由做者受權騰訊雲+社區發佈,更多原文請點擊
搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!
海量技術實踐經驗,盡在雲加社區!