本技術(shù)屬于數(shù)據(jù)庫領(lǐng)域,更具體地,涉及一種基于哈希位圖和快速排序的自適應(yīng)混合排序方法及系統(tǒng)。
背景技術(shù):
1、在數(shù)據(jù)庫系統(tǒng)中,索引是提升查詢性能的重要手段。當(dāng)查詢返回的結(jié)果集行數(shù)較多但又未達(dá)到需要處理所有表數(shù)據(jù)的規(guī)模時(shí),優(yōu)化器通常會在索引掃描和順序掃描之間進(jìn)行權(quán)衡。由于索引掃描會引入大量隨機(jī)io操作,相比順序掃描的順序io而言成本更高,因此優(yōu)化器通常會選擇位圖掃描(bitmap?scan)方式來降低執(zhí)行計(jì)劃的代價(jià)。
2、然而,傳統(tǒng)列存表位圖掃描采用有序ctid向量數(shù)組替代位圖的方式,雖然解決了結(jié)果集稀疏時(shí)的內(nèi)存浪費(fèi)問題,但也引入了排序時(shí)間復(fù)雜度高、內(nèi)存占用高以及外部排序開銷大等技術(shù)問題,這些問題在大規(guī)模olap查詢場景中尤為突出,導(dǎo)致數(shù)據(jù)庫的查詢性能和效率不佳,難以進(jìn)一步提升。
3、因此,亟需一種高效的列存表位圖掃描優(yōu)化方案,以提高數(shù)據(jù)庫的查詢性能和效率。
技術(shù)實(shí)現(xiàn)思路
1、針對現(xiàn)有技術(shù)的缺陷,本技術(shù)的目的在于提供一種基于哈希位圖和快速排序的自適應(yīng)混合排序方法及系統(tǒng),旨在解決現(xiàn)有技術(shù)中數(shù)據(jù)庫系統(tǒng)的查詢性能不佳的問題。
2、為實(shí)現(xiàn)上述目的,第一方面,本技術(shù)提供了一種基于哈希位圖和快速排序的自適應(yīng)混合排序方法,應(yīng)用于數(shù)據(jù)庫的列存表,包括:
3、從數(shù)據(jù)庫索引中獲取滿足查詢條件的行標(biāo)識符,得到查詢的結(jié)果集;
4、將所述行標(biāo)識符拆分為壓縮單元標(biāo)識符和行號,將壓縮單元標(biāo)識符存儲至標(biāo)識符數(shù)組中,將行號存儲至哈希位圖中;
5、利用混合排序法對所述標(biāo)識符數(shù)組進(jìn)行快速排序,得到壓縮單元標(biāo)識符的數(shù)組序列;所述混合排序法是基于哈希位圖和快速排序?qū)崿F(xiàn)的;
6、遍歷所述數(shù)組序列,確定每個(gè)壓縮單元標(biāo)識符在哈希位圖中對應(yīng)的壓縮單元位圖;
7、根據(jù)所述壓縮單元標(biāo)識符和壓縮單元位圖拼接得到完整行標(biāo)識符,以基于所述完整行標(biāo)識符返回結(jié)果集進(jìn)行記錄。
8、可選地,完整行標(biāo)識符的拼接方法包括:
9、根據(jù)所述壓縮單元標(biāo)識符從哈希位圖中提取對應(yīng)的壓縮單元位圖,并解析壓縮單元位圖的有效行號;
10、根據(jù)壓縮單元標(biāo)識符與有效行號拼接得到完整行標(biāo)識符,以基于所述完整行標(biāo)識符的順序讀取并返回?cái)?shù)據(jù)記錄。
11、可選地,還包括:
12、根據(jù)結(jié)果集和優(yōu)先策略選擇排序方式,所述優(yōu)先策略包括性能優(yōu)先策略和內(nèi)存優(yōu)先策略;
13、在性能優(yōu)先策略的情況下,根據(jù)結(jié)果集的數(shù)據(jù)量和預(yù)設(shè)閾值選取排序方式;
14、在內(nèi)存優(yōu)先策略的情況下,獲取結(jié)果集的數(shù)據(jù)量和表記錄總數(shù)之間的占比比例,根據(jù)占比比例和預(yù)審比例閾值選取排序方式。
15、可選地,所述標(biāo)識符數(shù)組僅存儲結(jié)果集中去重的壓縮單元標(biāo)識符;
16、所述哈希位圖中的每個(gè)成員均包括壓縮單元標(biāo)識符、位圖大小以及壓縮單元位圖,所述壓縮單元標(biāo)識符為哈希位圖的鍵,其中,鍵用于快速定位對應(yīng)的壓縮單元位圖;
17、所述壓縮單元位圖的每一位均表示壓縮單元中的一行記錄是否滿足查詢條件,值為1表示滿足條件,值為0表示被過濾。
18、可選地,將行號存儲至哈希位圖中的方法包括:
19、以壓縮單元標(biāo)識符為鍵,將所述壓縮單元標(biāo)識符的對應(yīng)行號映射到壓縮單元位圖的二進(jìn)制位中,其中,1表示有效行,0表示無效行。
20、可選地,所述排序方法的確定方法包括:
21、若所述結(jié)果集的數(shù)據(jù)量超過預(yù)設(shè)閾值,選取哈希位圖與快速排序混合排序法,若所述結(jié)果集的數(shù)據(jù)量不超過預(yù)設(shè)閾值,選取行標(biāo)識符向量數(shù)組排序法;
22、若所述占比比例超過比例閾值,選取哈希位圖與快速排序混合排序法,若所述占比比例不超過比例閾值,選取行標(biāo)識符向量數(shù)組排序法。
23、可選地,所述行標(biāo)識符向量數(shù)組排序法包括:
24、將查詢得到的行標(biāo)識符存儲至行標(biāo)識符數(shù)組中;
25、對行標(biāo)識符數(shù)組進(jìn)行排序,得到數(shù)組序列;
26、遍歷排序后的數(shù)組序列,按順序訪問每個(gè)行標(biāo)識符對應(yīng)的壓縮單元,根據(jù)行號從壓縮單元中讀取對應(yīng)的數(shù)據(jù)記錄。
27、第二方面,本技術(shù)還提供一種基于哈希位圖和快速排序的自適應(yīng)混合排序系統(tǒng),包括:
28、查詢模塊,用于從數(shù)據(jù)庫索引中獲取滿足查詢條件的行標(biāo)識符,得到查詢的結(jié)果集;
29、拆分模塊,用于將所述行標(biāo)識符拆分為壓縮單元標(biāo)識符和行號,將壓縮單元標(biāo)識符存儲至標(biāo)識符數(shù)組中,將行號存儲至哈希位圖中;
30、排序模塊,用于利用混合排序法對所述標(biāo)識符數(shù)組進(jìn)行快速排序,得到壓縮單元標(biāo)識符的數(shù)組序列;所述混合排序法是基于哈希位圖和快速排序?qū)崿F(xiàn)的;
31、遍歷模塊,用于遍歷所述數(shù)組序列,確定每個(gè)壓縮單元標(biāo)識符在哈希位圖中對應(yīng)的壓縮單元位圖;
32、拼接模塊,用于根據(jù)所述壓縮單元標(biāo)識符和壓縮單元位圖拼接得到完整行標(biāo)識符,以基于所述完整行標(biāo)識符返回結(jié)果集進(jìn)行記錄。
33、第三方面,本技術(shù)提供一種電子設(shè)備,包括:至少一個(gè)存儲器,用于存儲程序;至少一個(gè)處理器,用于執(zhí)行存儲器存儲的程序,當(dāng)存儲器存儲的程序被執(zhí)行時(shí),處理器用于執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。
34、第四方面,本技術(shù)提供一種計(jì)算機(jī)可讀存儲介質(zhì),計(jì)算機(jī)可讀存儲介質(zhì)存儲有計(jì)算機(jī)程序,當(dāng)計(jì)算機(jī)程序在處理器上運(yùn)行時(shí),使得處理器執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。
35、第五方面,本技術(shù)提供一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)計(jì)算機(jī)程序產(chǎn)品在處理器上運(yùn)行時(shí),使得處理器執(zhí)行第一方面或第一方面的任一種可能的實(shí)現(xiàn)方式所描述的方法。
36、可以理解的是,上述第二方面至第五方面的有益效果可以參見上述第一方面中的相關(guān)描述,在此不再贅述。
37、總體而言,通過本技術(shù)所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:
38、(1)本技術(shù)將行標(biāo)識符拆分為壓縮單元標(biāo)識符和行號,并分別存儲至數(shù)組和哈希位圖中,有效減少了排序的數(shù)據(jù)規(guī)模。壓縮單元標(biāo)識符作為高頻訪問的主鍵,獨(dú)立存儲便于排序,而行號通過哈希位圖以緊湊的二進(jìn)制形式存儲,節(jié)省了連續(xù)內(nèi)存空間。通過拆分存儲的方式不僅減少了內(nèi)存占用,還避免了全量排序中冗余數(shù)據(jù)的復(fù)制,從而大幅降低了排序時(shí)間,進(jìn)而實(shí)現(xiàn)提高數(shù)據(jù)庫的查詢性能和效率。
39、(2)本技術(shù)通過引入混合排序法,結(jié)合哈希位圖和快速排序的優(yōu)勢,進(jìn)一步優(yōu)化了排序性能。哈希位圖對壓縮單元標(biāo)識符關(guān)聯(lián)的行號進(jìn)行預(yù)分組,避免了傳統(tǒng)全量排序中頻繁的跨壓縮單元標(biāo)識符比較操作,顯著降低了排序復(fù)雜度。快速排序則對分桶后的壓縮單元標(biāo)識符進(jìn)行局部排序,兼顧全局有序性與局部高效性。通過混合排序方式不僅適應(yīng)稀疏或密集的數(shù)據(jù)分布特性,還能在極端數(shù)據(jù)分布下保持穩(wěn)定性能,從而進(jìn)一步提升了排序效率。
40、(3)本技術(shù)可根據(jù)性能和內(nèi)存的需求選擇合適的排序方式,使得系統(tǒng)在處理不同規(guī)模的數(shù)據(jù)時(shí)能夠靈活調(diào)整資源使用和性能優(yōu)化。標(biāo)識符數(shù)組中僅存儲去重的壓縮單元標(biāo)識符,有效減少了內(nèi)存的占用,提高了數(shù)據(jù)處理效率。
41、(4)本技術(shù)根據(jù)查詢結(jié)果集的數(shù)據(jù)量和表記錄總數(shù)的占比情況,動態(tài)選擇排序方法,提高了算法的自適應(yīng)能力,使其在不同使用場景下都能保持良好的性能。