本發(fā)明涉及數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化,具體地說(shuō)是一種基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法、系統(tǒng)、設(shè)備及介質(zhì)。
背景技術(shù):
1、在數(shù)據(jù)庫(kù)應(yīng)用中,深翻頁(yè)是指用戶(hù)查詢(xún)結(jié)果集的較靠后頁(yè)面數(shù)據(jù)的操作。例如在一個(gè)包含大量記錄的表中,用戶(hù)請(qǐng)求查看第100頁(yè)及以后的記錄信息。傳統(tǒng)的深翻頁(yè)查詢(xún)往往是先獲取前n頁(yè)(n為深翻頁(yè)起始頁(yè)之前的頁(yè)數(shù))的所有數(shù)據(jù),然后丟棄這些數(shù)據(jù),僅返回深翻頁(yè)起始頁(yè)及之后的目標(biāo)數(shù)據(jù)。這種方式在數(shù)據(jù)量較大時(shí),會(huì)消耗大量的系統(tǒng)資源,包括cpu、內(nèi)存和磁盤(pán)i/o等,導(dǎo)致查詢(xún)性能低下,響應(yīng)時(shí)間過(guò)長(zhǎng),嚴(yán)重影響用戶(hù)體驗(yàn)和系統(tǒng)的整體性能。尤其是在處理海量數(shù)據(jù)的數(shù)據(jù)庫(kù)系統(tǒng)中,深翻頁(yè)操作的性能瓶頸愈發(fā)明顯。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的技術(shù)任務(wù)是提供一種基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法、系統(tǒng)、設(shè)備及介質(zhì),來(lái)解決深翻頁(yè)場(chǎng)景下數(shù)據(jù)庫(kù)查詢(xún)性能低下及資源消耗過(guò)度的問(wèn)題。
2、本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,一種基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法,該方法具體如下:
3、收集并存儲(chǔ)數(shù)據(jù)統(tǒng)計(jì)信息:在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行過(guò)程中,周期性地收集表中各列數(shù)據(jù)的統(tǒng)計(jì)信息,并將統(tǒng)計(jì)信息存儲(chǔ)在專(zhuān)門(mén)的系統(tǒng)表或數(shù)據(jù)字典中,以便后續(xù)查詢(xún)優(yōu)化時(shí)能夠快速獲?。?/p>
4、深翻頁(yè)查詢(xún)接收與解析:當(dāng)接收到深翻頁(yè)查詢(xún)請(qǐng)求時(shí),解析查詢(xún)語(yǔ)句,確定查詢(xún)涉及的表、列以及深翻頁(yè)的起始位置和每頁(yè)顯示的數(shù)據(jù)量的深翻頁(yè)參數(shù)信息;
5、生成基于統(tǒng)計(jì)信息的過(guò)濾條件:根據(jù)查詢(xún)列的統(tǒng)計(jì)信息和深翻頁(yè)參數(shù)信息計(jì)算出深翻頁(yè)起始位置之前的數(shù)據(jù)范圍對(duì)應(yīng)的過(guò)濾條件;
6、執(zhí)行數(shù)據(jù)查詢(xún)與過(guò)濾:通過(guò)過(guò)濾條件對(duì)數(shù)據(jù)庫(kù)表進(jìn)行查詢(xún)操作;
7、結(jié)果返回及性能監(jiān)控:將深翻頁(yè)查詢(xún)的結(jié)果返回給用戶(hù),并在后臺(tái)對(duì)本次深翻頁(yè)操作的性能進(jìn)行監(jiān)控和記錄獲取監(jiān)控?cái)?shù)據(jù),監(jiān)控?cái)?shù)據(jù)用于后續(xù)對(duì)統(tǒng)計(jì)信息收集策略和過(guò)濾條件生成算法的優(yōu)化調(diào)整,以進(jìn)一步提高性能。
8、作為優(yōu)選,收集并存儲(chǔ)數(shù)據(jù)統(tǒng)計(jì)信息具體如下:
9、開(kāi)啟統(tǒng)計(jì)信息的收集任務(wù):設(shè)定在數(shù)據(jù)庫(kù)系統(tǒng)負(fù)載低于設(shè)定閾值的時(shí)段進(jìn)行數(shù)據(jù)統(tǒng)計(jì)信息的收集,例如在每天的凌晨時(shí)段或者每周特定的維護(hù)窗口時(shí)間;收集頻率根據(jù)數(shù)據(jù)的更新頻率和系統(tǒng)資源情況確定,對(duì)于數(shù)據(jù)更新大于設(shè)定更新頻率閾值的數(shù)據(jù)庫(kù),根據(jù)更新頻率收集統(tǒng)計(jì)信息,如每天一次;而對(duì)于數(shù)據(jù)相對(duì)穩(wěn)定的數(shù)據(jù)庫(kù),每周或每月收集一次;
10、制定統(tǒng)計(jì)信息的計(jì)算方法:在kaiwudb中,列數(shù)據(jù)按照數(shù)據(jù)塊進(jìn)行存儲(chǔ),每1000行一個(gè)數(shù)據(jù)塊;每個(gè)數(shù)據(jù)塊收集最小值及最大值,建立數(shù)據(jù)塊的統(tǒng)計(jì)信息;再收集列數(shù)據(jù)分布直方圖信息及整列數(shù)據(jù)的最大值、最小值以及數(shù)據(jù)行數(shù);其中,在kaiwudb中,建立數(shù)據(jù)分布直方圖信息是通過(guò)確定合適的區(qū)間(桶)數(shù)量和范圍,再統(tǒng)計(jì)每個(gè)區(qū)間對(duì)應(yīng)數(shù)據(jù)的數(shù)量;
11、將收集到的統(tǒng)計(jì)信息存儲(chǔ)在專(zhuān)門(mén)的系統(tǒng)表或者數(shù)據(jù)字典中。
12、作為優(yōu)選,深翻頁(yè)查詢(xún)接收與解析具體如下:
13、數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)網(wǎng)絡(luò)接口接收來(lái)自客戶(hù)端的深翻頁(yè)查詢(xún)請(qǐng)求;
14、解析關(guān)鍵查詢(xún)信息,從查詢(xún)語(yǔ)句中提取出涉及的數(shù)據(jù)庫(kù)表名稱(chēng)和排序的列名稱(chēng);
15、解析出深翻頁(yè)參數(shù),確定深翻頁(yè)的起始位置和每頁(yè)顯示的數(shù)據(jù)量;同時(shí)深翻頁(yè)參數(shù)還包括排序方向(升序或降序)信息。
16、作為優(yōu)選,生成基于統(tǒng)計(jì)信息的過(guò)濾條件具體如下:
17、當(dāng)查詢(xún)按照任一列排序,且已知相應(yīng)列的數(shù)據(jù)分布直方圖信息以及深翻頁(yè)起始位置“start_pos”時(shí),若是升序排序,則深翻頁(yè)起始位置之前的數(shù)據(jù)行數(shù)為“start_pos”,通過(guò)直方圖統(tǒng)計(jì)信息找到起始位置之前的最大值“max_val”和過(guò)濾掉的數(shù)據(jù)行數(shù)“filter_count”,對(duì)應(yīng)的過(guò)濾條件是“column_name>max_val”,另外起始位置改為“start_pos-filter_count”。
18、作為優(yōu)選,執(zhí)行查詢(xún)與過(guò)濾具體如下:
19、數(shù)據(jù)庫(kù)引擎在執(zhí)行查詢(xún)時(shí),根據(jù)過(guò)濾條件對(duì)數(shù)據(jù)庫(kù)表進(jìn)行掃描篩選,僅獲取可能在深翻頁(yè)目標(biāo)范圍內(nèi)的數(shù)據(jù);在執(zhí)行過(guò)程中,使用列塊統(tǒng)計(jì)信息快速過(guò)濾不滿(mǎn)足條件的數(shù)據(jù)塊,不需要掃描源表數(shù)據(jù);或使用其他索引(如果過(guò)濾條件涉及的列有合適的索引)快速定位符合條件的數(shù)據(jù)行;
20、按照查詢(xún)要求進(jìn)行排序及分頁(yè)操作;
21、返回深翻頁(yè)請(qǐng)求的目標(biāo)數(shù)據(jù)。
22、更優(yōu)地,結(jié)果返回與性能監(jiān)控具體如下:
23、將經(jīng)過(guò)深翻頁(yè)查詢(xún)與過(guò)濾后得到的目標(biāo)數(shù)據(jù)按照數(shù)據(jù)庫(kù)系統(tǒng)與客戶(hù)端約定的格式和協(xié)議返回給客戶(hù)端;
24、監(jiān)控本次深翻頁(yè)操作的各項(xiàng)性能指標(biāo),并將性能指標(biāo)記錄到專(zhuān)門(mén)的性能日志表或者系統(tǒng)監(jiān)控?cái)?shù)據(jù)存儲(chǔ)區(qū)域中;其中,性能指標(biāo)包括查詢(xún)執(zhí)行時(shí)間、數(shù)據(jù)傳輸量以及過(guò)濾掉的數(shù)據(jù)量;查詢(xún)執(zhí)行時(shí)間是指從接收到查詢(xún)請(qǐng)求到返回結(jié)果所花費(fèi)的總時(shí)間;數(shù)據(jù)傳輸量是指返回給客戶(hù)端的數(shù)據(jù)大小;過(guò)濾掉的數(shù)據(jù)量是指通過(guò)與未使用過(guò)濾條件時(shí)可能查詢(xún)的數(shù)據(jù)量對(duì)比得出。
25、一種基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化系統(tǒng),該系統(tǒng)包括統(tǒng)計(jì)信息管理模塊、查詢(xún)解析模塊、過(guò)濾條件生成模塊、數(shù)據(jù)查詢(xún)與過(guò)濾模塊以及結(jié)果返回與性能監(jiān)控模塊;
26、統(tǒng)計(jì)信息管理模塊提供數(shù)據(jù)統(tǒng)計(jì)基礎(chǔ),用于統(tǒng)計(jì)信息收集、更新與存儲(chǔ);
27、查詢(xún)解析模塊作為入口,用于接收查詢(xún)請(qǐng)求并將解析后深翻頁(yè)查詢(xún)請(qǐng)求分發(fā)給過(guò)濾條件生成模塊;
28、過(guò)濾條件生成模塊用于根據(jù)統(tǒng)計(jì)信息管理模塊提供的查詢(xún)列的統(tǒng)計(jì)信息和查詢(xún)解析模塊獲取的深翻頁(yè)參數(shù)信息計(jì)算出深翻頁(yè)起始位置之前的數(shù)據(jù)范圍對(duì)應(yīng)的過(guò)濾條件,生成基于統(tǒng)計(jì)信息的過(guò)濾條件;
29、數(shù)據(jù)查詢(xún)與過(guò)濾模塊用于基于過(guò)濾條件執(zhí)行數(shù)據(jù)查詢(xún)與過(guò)濾操作;
30、結(jié)果返回與性能監(jiān)控模塊用于輸出最終結(jié)果并監(jiān)控性能數(shù)據(jù)。
31、作為優(yōu)選,統(tǒng)計(jì)信息管理模塊包括:
32、統(tǒng)計(jì)信息的收集任務(wù)開(kāi)啟子模塊,用于設(shè)定在數(shù)據(jù)庫(kù)系統(tǒng)負(fù)載低于設(shè)定閾值的時(shí)段進(jìn)行數(shù)據(jù)統(tǒng)計(jì)信息的收集,例如在每天的凌晨時(shí)段或者每周特定的維護(hù)窗口時(shí)間;收集頻率根據(jù)數(shù)據(jù)的更新頻率和系統(tǒng)資源情況確定,對(duì)于數(shù)據(jù)更新大于設(shè)定更新頻率閾值的數(shù)據(jù)庫(kù),根據(jù)更新頻率收集統(tǒng)計(jì)信息,如每天一次;而對(duì)于數(shù)據(jù)相對(duì)穩(wěn)定的數(shù)據(jù)庫(kù),每周或每月收集一次;
33、統(tǒng)計(jì)信息的計(jì)算方法制定子模塊,用于在kaiwudb中,列數(shù)據(jù)按照數(shù)據(jù)塊進(jìn)行存儲(chǔ),每1000行一個(gè)數(shù)據(jù)塊;每個(gè)數(shù)據(jù)塊收集最小值及最大值,建立數(shù)據(jù)塊的統(tǒng)計(jì)信息;再收集列數(shù)據(jù)分布直方圖信息及整列數(shù)據(jù)的最大值、最小值以及數(shù)據(jù)行數(shù);其中,在kaiwudb中,建立數(shù)據(jù)分布直方圖信息是通過(guò)確定合適的區(qū)間(桶)數(shù)量和范圍,再統(tǒng)計(jì)每個(gè)區(qū)間對(duì)應(yīng)數(shù)據(jù)的數(shù)量;
34、統(tǒng)計(jì)信息存儲(chǔ)子模塊,用于將收集到的統(tǒng)計(jì)信息存儲(chǔ)在專(zhuān)門(mén)的系統(tǒng)表或者數(shù)據(jù)字典中;
35、查詢(xún)解析模塊包括:
36、深翻頁(yè)查詢(xún)請(qǐng)求接收子模塊,用于數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)網(wǎng)絡(luò)接口接收來(lái)自客戶(hù)端的深翻頁(yè)查詢(xún)請(qǐng)求;
37、查詢(xún)信息解析及提取子模塊,用于解析關(guān)鍵查詢(xún)信息,從查詢(xún)語(yǔ)句中提取出涉及的數(shù)據(jù)庫(kù)表名稱(chēng)和排序的列名稱(chēng);例如對(duì)于查詢(xún)語(yǔ)句“select*from?orders?order?byorder_date?limit?100,20”,提取出表名“orders”和列名“order_date”;
38、深翻頁(yè)參數(shù)解析子模塊,用于解析出深翻頁(yè)參數(shù),確定深翻頁(yè)的起始位置(如上述例子中的100,表示從第101條記錄開(kāi)始查詢(xún))和每頁(yè)顯示的數(shù)據(jù)量(如上述例子中的20);同時(shí)深翻頁(yè)參數(shù)還包括排序方向(升序或降序)信息;
39、過(guò)濾條件生成模塊具體為:當(dāng)查詢(xún)按照任一列排序,且已知相應(yīng)列的數(shù)據(jù)分布直方圖信息以及深翻頁(yè)起始位置“start_pos”時(shí),若是升序排序,則深翻頁(yè)起始位置之前的數(shù)據(jù)行數(shù)為“start_pos”,通過(guò)直方圖統(tǒng)計(jì)信息找到起始位置之前的最大值“max_val”和過(guò)濾掉的數(shù)據(jù)行數(shù)“filter_count”,對(duì)應(yīng)的過(guò)濾條件是“column_name>max_val”,另外起始位置改為“start_pos-filter_count”;
40、數(shù)據(jù)查詢(xún)與過(guò)濾模塊包括:
41、掃描篩選子模塊,用于數(shù)據(jù)庫(kù)引擎在執(zhí)行查詢(xún)時(shí),根據(jù)過(guò)濾條件對(duì)數(shù)據(jù)庫(kù)表進(jìn)行掃描篩選,僅獲取可能在深翻頁(yè)目標(biāo)范圍內(nèi)的數(shù)據(jù);在執(zhí)行過(guò)程中,使用列塊統(tǒng)計(jì)信息快速過(guò)濾不滿(mǎn)足條件的數(shù)據(jù)塊,不需要掃描源表數(shù)據(jù);或使用其他索引(如果過(guò)濾條件涉及的列有合適的索引)快速定位符合條件的數(shù)據(jù)行;
42、排序及分頁(yè)子模塊,用于按照查詢(xún)要求進(jìn)行排序及分頁(yè)操作;
43、目標(biāo)數(shù)據(jù)返回子模塊,用于返回深翻頁(yè)請(qǐng)求的目標(biāo)數(shù)據(jù);
44、結(jié)果返回與性能監(jiān)控模塊包括:
45、結(jié)果返回子模塊,用于將經(jīng)過(guò)深翻頁(yè)查詢(xún)與過(guò)濾后得到的目標(biāo)數(shù)據(jù)按照數(shù)據(jù)庫(kù)系統(tǒng)與客戶(hù)端約定的格式和協(xié)議返回給客戶(hù)端;
46、監(jiān)控子模塊,用于監(jiān)控本次深翻頁(yè)操作的各項(xiàng)性能指標(biāo),并將性能指標(biāo)記錄到專(zhuān)門(mén)的性能日志表或者系統(tǒng)監(jiān)控?cái)?shù)據(jù)存儲(chǔ)區(qū)域中;其中,性能指標(biāo)包括查詢(xún)執(zhí)行時(shí)間、數(shù)據(jù)傳輸量以及過(guò)濾掉的數(shù)據(jù)量;查詢(xún)執(zhí)行時(shí)間是指從接收到查詢(xún)請(qǐng)求到返回結(jié)果所花費(fèi)的總時(shí)間;數(shù)據(jù)傳輸量是指返回給客戶(hù)端的數(shù)據(jù)大?。贿^(guò)濾掉的數(shù)據(jù)量是指通過(guò)與未使用過(guò)濾條件時(shí)可能查詢(xún)的數(shù)據(jù)量對(duì)比得出。
47、一種電子設(shè)備,包括:存儲(chǔ)器和至少一個(gè)處理器;
48、其中,所述存儲(chǔ)器上存儲(chǔ)有計(jì)算機(jī)程序;
49、所述至少一個(gè)處理器執(zhí)行所述存儲(chǔ)器存儲(chǔ)的計(jì)算機(jī)程序,使得所述至少一個(gè)處理器執(zhí)行如上述的基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法。
50、一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序可被處理器執(zhí)行以實(shí)現(xiàn)如上述的基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法。
51、本發(fā)明的基于數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息的深翻頁(yè)場(chǎng)景優(yōu)化方法、系統(tǒng)、設(shè)備及介質(zhì)具有以下優(yōu)點(diǎn):
52、(一)本發(fā)明周期性收集并存儲(chǔ)表中各列數(shù)據(jù)的統(tǒng)計(jì)信息,如最小值、最大值、直方圖及數(shù)據(jù)行數(shù)等相關(guān)統(tǒng)計(jì)信息,再接收深翻頁(yè)查詢(xún)請(qǐng)求后解析出關(guān)鍵信息;再依據(jù)解析信息與存儲(chǔ)的統(tǒng)計(jì)信息生成過(guò)濾條件;再運(yùn)用此過(guò)濾條件進(jìn)行數(shù)據(jù)查詢(xún)與過(guò)濾,先篩選數(shù)據(jù)再排序分頁(yè)以獲取目標(biāo)數(shù)據(jù);最后返回結(jié)果并監(jiān)控性能,記錄查詢(xún)執(zhí)行時(shí)間、數(shù)據(jù)傳輸量和過(guò)濾量等指標(biāo)用于后續(xù)優(yōu)化,解決了深翻頁(yè)場(chǎng)景下數(shù)據(jù)庫(kù)查詢(xún)性能低下以及資源消耗過(guò)度的關(guān)鍵問(wèn)題,有效利用統(tǒng)計(jì)信息在深翻頁(yè)查詢(xún)時(shí)提前過(guò)濾大量無(wú)關(guān)數(shù)據(jù),顯著提升查詢(xún)速度,減少cpu、內(nèi)存和磁盤(pán)i/o等系統(tǒng)資源消耗,從而提升數(shù)據(jù)庫(kù)系統(tǒng)在深翻頁(yè)場(chǎng)景下的整體性能和資源利用率;
53、(二)本發(fā)明通過(guò)基于統(tǒng)計(jì)信息生成精準(zhǔn)的過(guò)濾條件,能夠在查詢(xún)初期就迅速篩除大量無(wú)關(guān)數(shù)據(jù),使數(shù)據(jù)庫(kù)引擎可直接聚焦于深翻頁(yè)目標(biāo)數(shù)據(jù)的檢索與處理,極大地縮短了查詢(xún)響應(yīng)時(shí)間,顯著提升深翻頁(yè)查詢(xún)的整體效率,使用戶(hù)能夠更迅速地獲取到期望的數(shù)據(jù)頁(yè)面;
54、(三)本發(fā)明借助統(tǒng)計(jì)信息提前過(guò)濾數(shù)據(jù),有效減少了數(shù)據(jù)處理量,從而降低了cpu的計(jì)算負(fù)載,減少了內(nèi)存占用,并減輕了磁盤(pán)i/o壓力,實(shí)現(xiàn)了系統(tǒng)資源的高效利用,提升了數(shù)據(jù)庫(kù)系統(tǒng)在處理深翻頁(yè)查詢(xún)時(shí)的整體性能與穩(wěn)定性,使數(shù)據(jù)庫(kù)系統(tǒng)在有限資源下能夠更好地應(yīng)對(duì)大量并發(fā)的深翻頁(yè)請(qǐng)求;
55、(四)本發(fā)明通過(guò)在深翻頁(yè)場(chǎng)景中利用統(tǒng)計(jì)信息生成過(guò)濾條件,提前過(guò)濾掉大量不必要的數(shù)據(jù),有效減少了數(shù)據(jù)傳輸量、內(nèi)存占用量和cpu處理時(shí)間,顯著提高了深翻頁(yè)操作的性能,改善了用戶(hù)體驗(yàn),尤其適用于處理海量數(shù)據(jù)的數(shù)據(jù)庫(kù)系統(tǒng),能夠在大數(shù)據(jù)環(huán)境下高效地滿(mǎn)足用戶(hù)的深翻頁(yè)查詢(xún)需求,提升整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行效率和資源利用率。