奧推網

選單
科技

【金猿技術展】一種分散式 HTAP 資料庫上基於索引的資料任意分佈...

本技術提供了一種資料處理方法,涉及資料庫技術領域。該方法包括:接收資料查詢請求,並確定資料查詢請求對應的目標資料表;從多個重分佈索引中確定與目標資料表對應的目標索引;其中,重分佈索引中的資料是基於重分佈索引的索引列分佈儲存在分散式資料庫中的;當針對資料查詢請求的操作指向目標索引的索引列時,根據目標索引,對原始執行計劃進行最佳化,生成目標執行計劃;針對資料查詢請求的操作包括單表聚合操作和/或多表關聯操作;執行目標執行計劃,得到資料查詢請求對應的查詢結果。本技術實現了查詢最佳化,減少了跨節點的資料交換操作,提高了資料處理的效率,提升整個分散式資料庫的效能。

技術說明

HTAP(混合事務和分析處理)是近年來提出的一種新型的資料庫架構,旨在打破事務處理和分析之間界限, 在一份資料上保證事務處理的同時支援實時分析,並且可以靈活配置兩種負載的資源佔比,使得線上交易和分析互不影響,並可以分別實現線性擴充套件,一站式地解決企業級應用的各種需求,從而大幅度降低成本,同時提高了企業決策的效率。當前,HTAP 已成為資料庫發展的前沿領域。

TiDB HTAP 採用了事務處理與分析查詢物理分離的架構,同一份資料根據業務的需要,在後臺進行自動的行式儲存到列式儲存的轉換以分別響應 OLTP 和 OLAP 兩種型別的負載。儲存層大幅優化了從 TiKV “行”儲存到 TiFlash “列”儲存格式的轉換效率,在“行 - 列”轉換環節的 CPU 效率大幅提升,進而使得高負載情況下可以節約出更多的 CPU 資源用於其他環節的計算任務。

在分散式 OLAP 資料庫中,使用者通常可以對一張表選擇任意的一列作為其分佈的 key,這樣這張表的資料就可以按照這個 key 列分佈到不同的資料庫節點上。在進行單表聚合或多表關聯時,如果聚合的分組列或關聯的關聯列是上述的分佈 key,則各個節點可以僅在本地進行這個聚合或關聯計算,避免跨節點的資料交換,從而獲得巨大的效能提升。這一般被稱作 collocation 最佳化。在分散式 HTAP 資料庫中,資料有行存和列存兩種形式,分別對應於面向 OLTP 的場景和麵向 OLAP 的場景,行存和列存的資料透過某種方式進行同步。在一個強實時性的 HTAP 資料庫中,這種同步方式要求行存和列存中的資料滿足相同的分佈以保證同步效率即實時性,這要求 HTAP 資料庫中的資料應以 OLTP 中的分佈形式為準,而 HTAP 中的 TP 能力需要資料按照主鍵進行分佈,這使得 AP 能力中無法有效的實現 collocation 最佳化,對於單表聚合或多表關聯,需要進行跨節點的資料交換,使得效能落後於專用的 OLAP 資料庫。

為了解決這一問題,本技術引入了一種基於索引的資料重分佈及 collocation 最佳化的方法,包括:

S1、建立一種新的索引

:重分佈索引。使用者可以為一張表指定一個或多個重分佈索引,其中每個重分佈索引值包含一到多列。重分佈索引同時具有聚簇索引和二級索引的性質:與聚簇索引相同,重分佈索引儲存完整的行資料,與二級索引相同,重分佈索引獨立於表資料儲存。資料庫透過在事務中同時處理表資料和重分佈索引資料以維持兩者的一致性。

S2、重分佈索引需要指定歸屬於某個 collocation 組

。同個 collocation 組內所有重分佈索引均擁有相同的資料分佈,也就是索引列相同的資料均位於分散式叢集中的同一個節點。

S3、查詢最佳化器對於單表聚合或兩表關聯的查詢

,檢查其聚合的分組列或關聯列是否為重分佈索引列,如果是,則執行後續步驟。

S4、查詢最佳化器對於單表聚合,檢查其聚合的分組列是否有重分佈索引

,對於兩表關聯,檢查兩表的關聯列是否都有重分佈索引並且都屬於同個 collocation 組,如果是,則執行後續步驟。

S5、將對該表的掃描轉化為對重分佈索引的掃描。

S6、消除原執行計劃上的跨界點資料交換運算元。

S7、分散式叢集擴縮容或者熱點排程

時,部分重分佈索引資料會被複制到新節點,資料分佈會發生變化。在同個 collocation 組內的所有重分佈索引按照最新的資料分佈遷移完成之前,查詢最佳化器依然可以使用原來的重分佈索引做 collocation 最佳化。等到 collocation 組內所有重分佈索引資料均遷移完成之後,查詢最佳化器才可以使用新的重分散式索引,此時舊的重分佈索引可以被刪除。因為重分佈索引資料與表資料是獨立存放的兩份資料,因此重分佈索引與表資料的資料分佈也是相互獨立的,進而他們的排程也是相互獨立的,這樣可以互不影響。

一種基於索引的資料重分佈及 collocation 最佳化的系統,包括:

1、元資訊模組,用於為使用者提供建立、刪除重分佈索引的方法,使用者可以透過建表語句或 alter table 語句,為某張表建立或刪除重分佈索引。

2、事務模組,用於在事務中隨著表資料的插入、更新、刪除,同步的對重分佈索引資料進行對應的操作,以保證重分佈索引資料與表資料一樣具有 ACID 語義。

3、分散式儲存計算模組,儲存部分用於分散式的儲存重分佈索引資料,根據資料排程模組的指令將重分佈索引資料排程到指定節點,從而滿足 collocation 最佳化的條件;計算部分用於分散式的執行一個查詢計劃,分散式叢集上的每個節點可以對儲存在該節點上的資料按照執行計劃進行計算。

4、查詢最佳化器模組,用於根據重分佈索引資訊,對滿足條件的單表聚合和多表關聯查詢進行 collocation 最佳化,消除查詢計劃中的跨節點資料交換操作。

5、資料排程模組,用於在分散式叢集擴縮容或熱點排程時對資料進行排程。按照 S6 中所述方案,在排程過程中保留原來的重分佈索引,排程完成之後再使用新的重分佈索引,這樣 collocation 最佳化在排程期間仍然可以生效。

本發明的一個分散式 HTAP 資料庫系統的實施例:

如上圖所示,本發明基於一個分散式 HTAP 資料庫系統,該 HTAP 資料庫由三部分組成:

1、SQL 層:負責接收使用者的 SQL 查詢請求,生成和最佳化 SQL 的執行計劃,並完成一些簡單的計算

2、排程層:負責決定如何分散式儲存資料,例如一張表的資料如何被分成多份,並存儲在多個節點中

3、儲存/計算層:負責儲存資料以及相關的查詢計算

本發明實施例具體步驟包含:

1、在 SQL 層支援一種新的索引:重分佈索引,該索引具備三個特徵:

① 該索引的每一行都儲存了對應表的所有資料,即該索引包含了表的所有資料。

② 該索引與表資料獨立儲存。

③ 該索引值包含一列或多列資料,使用雜湊演算法索引值到整數值域。

2、在 SQL 層透過事務保證重分佈索引的資料與表裡面的資料的一致性。

3、對於同一個表可以支援定義一個或者多個不同的重分佈索引,同時重分佈索引需要指定歸屬於某個 collocation 組。

4、在 SQL 層,對於單表聚合,最佳化器檢查其聚合列是否包含該表中某個重分佈索引的索引列:

① 如果包含了,則最佳化器將對錶的掃描轉換為對應重分佈索引的掃描,並且兩階段聚合最佳化為每個儲存/計算節點上的 collocation 聚合。

② 如果沒包含,則最佳化器按照傳統的演算法生成相關的分散式聚合的執行計劃。

5、在 SQL 層,對於關聯操作,最佳化器依次檢查如下情況:

① 如果參與關聯的兩個表都包含某個重分佈索引使得關聯列包含該重分佈索引的索引列,並且兩個重分佈索引屬於同個 collocation 組,則最佳化器將對這兩個表的掃描都改成對對應重分佈索引的掃描,並消除原始執行計劃中的資料交換運算元,將分散式關聯演算法改為只需要儲存/計算節點自己內部做關聯的collocation關聯。

② 如果參與關聯的其中一個表包含某個重分佈索引使得關聯列包含重分佈索引的索引列,則最佳化器將對這個表的掃描改成對重分佈索引的掃描,並消除原始執行計劃中該表一側的資料交換運算元,並修改另一側表的資料交換運算元使其按照相應重分佈索引所屬 collocation 組的分佈進行資料交換,將兩個表都需要做資料交換的分散式關聯演算法改成僅需要一個表做資料交換的分散式關聯演算法。

③ 如果參與關聯的兩個表都沒有相關重分佈索引,則最佳化器按照傳統的演算法生成分散式關聯的執行計劃。

在排程層,由於重分佈索引值為雜湊值,範圍為整數值域,可將這個值域切分為多個相鄰的範圍,均勻的排程到所有儲存節點上。在分散式叢集擴縮容或熱點排程時,可根據相應的機制重新劃分值域範圍,並且需要對同個 collocation 組的不同重分佈索引使用相同的值域劃分。此外,在排程過程中需要保留原來的重分佈索引,完成之後再使用新的重分佈索引,這樣 collocation 最佳化在排程期間仍然可以生效。

在數字化轉型過程中,企業對“海量、實時、線上”的資料需求變得更加迫切,企業中的任意人在任意時間、任意地點對任意形態的資料都可能產生消費的需求,HTAP作為資料庫的創新形態,用一個數據平臺應對規模化交易和實時分析的需求,提升業務決策的時效性並且降低資料技術棧的複雜性,已經成為金融、運營商、製造、零售、新經濟、網際網路、政府業務創新的重要引擎。HTAP 資料庫在這些行業的應用場景不斷延伸,例如透過使用者的各種行為、金融交易、徵信、風控、風險偏好等資料可以識別出客戶的風險特徵和投資偏好,進而推薦合適的產品;對營銷線索的轉化週期實時跟蹤監測,根據使用者需求的變化實時調整,提升轉化效率等。

★專利申請號/公開號

:CN115422205A

開發團隊

·帶隊負責人姓名:孫若曦

孫若曦,

TiDB Cloud Compute Engine 團隊研發負責人,負責 TiDB 核心計算引擎的架構演進及功能開發。曾任職 NVIDIA、星環科技,專注於資料庫、大資料領域,有十餘年平行計算、系統軟體的開發經驗。

團隊其他重要成員姓名:徐飛,耿立琪、陳書寧。

·隸屬機構:

PingCAP

PingCAP 是業界領先的企業級開源分散式資料庫企業,提供包括開源分散式資料庫產品、解決方案與諮詢、技術支援與培訓認證服務,致力於為全球行業使用者提供穩定高效、安全可靠、開放相容的新型資料服務平臺,解放企業生產力,加速企業數字化轉型升級。

相關評價

用時間換空間和用空間換時間是個永恆的話題,Redistribute Index 在時間和空間的推敲中找到了一個新的方法。讓計算的資料儘量在同一臺機器上,既可以加快資料處理的速度又可以減少網路資料的傳輸,而 Collocation Group 是一個確保資料分佈的新思路,讓 Redistribute Index 的實現成為可能。當然,最佳化沒有銀彈,在時間和空間上的權衡不可避免。

——李雨來

TiDB Committer, Seaweedfs Contributor

網路IO開銷是分散式資料庫的一大效能痛點,redistributed key利用儲存分佈規則的變化在代價極小的情況下解決了常用場景的分析計算問題,創新且實用。

——劉子東

小米資料庫工程師