亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

稀疏數(shù)據(jù)的訪問(wèn)方法及系統(tǒng)與流程

文檔序號(hào):11774725閱讀:311來(lái)源:國(guó)知局
稀疏數(shù)據(jù)的訪問(wèn)方法及系統(tǒng)與流程

本發(fā)明涉及數(shù)據(jù)訪問(wèn)技術(shù)領(lǐng)域,尤其涉及稀疏數(shù)據(jù)的訪問(wèn)方法及系統(tǒng)。



背景技術(shù):

日志文件廣泛應(yīng)用于各種服務(wù)中,如網(wǎng)頁(yè)服務(wù)器,數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器。日志用來(lái)記錄不同類型的信息,這些信息擁有不同的重要性等級(jí)。日志可以用于調(diào)試和排錯(cuò)。通常情況下,日志文件集中保存在網(wǎng)絡(luò)文件系統(tǒng)中,但也可以分散保存(每個(gè)服務(wù)器包含應(yīng)用程序自身運(yùn)行所產(chǎn)生的日志)。能夠從各種日志中有效地提取有用信息對(duì)于開發(fā)/調(diào)試應(yīng)用,以及確保生產(chǎn)環(huán)境的正確運(yùn)行,都是一項(xiàng)十分重要的任務(wù)。然而日志通常是文本文件,因此搜索和分析日志就很困難并且要花費(fèi)高昂的代價(jià)。首先要將日志文件存儲(chǔ)到數(shù)據(jù)庫(kù)的結(jié)構(gòu)化或半結(jié)構(gòu)化的表里。再通過(guò)查詢數(shù)據(jù)庫(kù),運(yùn)用復(fù)雜的算法來(lái)進(jìn)行模式識(shí)別、統(tǒng)計(jì)分析或機(jī)器學(xué)習(xí),從而獲取所需要的信息。

目前現(xiàn)有日志分析系統(tǒng)中,都采用反數(shù)據(jù)庫(kù)范式的設(shè)計(jì)。和傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)的三范式設(shè)計(jì)不同,日志表被設(shè)計(jì)為單表,以便保證日志的加載速度。因?yàn)槿罩倦S時(shí)隨地產(chǎn)生,且數(shù)據(jù)巨大,需要不間斷地加載到分析系統(tǒng)中,如果采用第三范式的設(shè)計(jì)方法,將影響加載數(shù)據(jù)。而采用單表則有比較好的加載性能,因?yàn)椴恍枰潞凸芾矶鄰埾嗷リP(guān)聯(lián)的表,但這樣做的代價(jià)就是會(huì)導(dǎo)致表非常巨大。因此現(xiàn)有日志分析系統(tǒng),對(duì)日志信息并沒有采用特殊的存儲(chǔ)和訪問(wèn)方法。而日志的有用信息是相當(dāng)稀疏的,導(dǎo)致對(duì)日志的檢索非常低效。

一般情況下,在海量的日志信息中,只有很少的日志條目含有有用信息。例如,跟蹤網(wǎng)頁(yè)服務(wù)器流量的日志,其中只有極小一部分含有惡意軟件行為相關(guān)的信息,或者含有其他特定網(wǎng)頁(yè)搜索行為的相關(guān)日志條目。相對(duì)所有的網(wǎng)頁(yè)流量而言,這些惡意軟件和網(wǎng)頁(yè)搜索行為是極少的(我們稱之為稀疏數(shù)據(jù)),但他們?nèi)匀痪哂兄匾囊饬x(因?yàn)檫@些極有可能就是客戶要對(duì)某些案例做分析或查詢所需要的信息)。第二個(gè)例子是,設(shè)想下sql查詢數(shù)據(jù)庫(kù)的相關(guān)日志。數(shù)據(jù)庫(kù)里一張表的一列記錄了每條sql語(yǔ)句的相關(guān)日志,比如sql錯(cuò)誤信息。如果這條sql執(zhí)行成功則記為null,否則存儲(chǔ)出錯(cuò)信息。由于大多數(shù)sql語(yǔ)句會(huì)執(zhí)行成功,并不會(huì)有相關(guān)錯(cuò)誤信息,這個(gè)列的數(shù)據(jù)就會(huì)是稀疏的(幾乎都是null),但sql出現(xiàn)錯(cuò)誤的語(yǔ)義價(jià)值肯定是很高的,因?yàn)檫@些信息正是用戶所關(guān)注的。

通過(guò)上述兩種情況,可以看到,稀疏數(shù)據(jù)列含有相當(dāng)重要的語(yǔ)義信息,以它們作為查詢條件的語(yǔ)句肯定是100%存在的。目前主流數(shù)據(jù)庫(kù)均支持二級(jí)索引,但傳統(tǒng)上基于btree的二級(jí)索引無(wú)法高效地支持稀疏檢索。

現(xiàn)有技術(shù)中,對(duì)于這個(gè)問(wèn)題的對(duì)策是,在這個(gè)稀疏列上創(chuàng)建二級(jí)索引。然而當(dāng)表非常大而且數(shù)據(jù)流入速率非常高時(shí),索引不是一個(gè)好的解決方法,因?yàn)樗饕母聲?huì)降低數(shù)據(jù)流人速率。但如果沒有索引或其它措施,以稀疏數(shù)據(jù)為過(guò)濾條件對(duì)含有日志信息的表執(zhí)行的查詢,將會(huì)進(jìn)行全表掃描(或僅受限于日期范圍的掃描),進(jìn)而導(dǎo)致非常慢的訪問(wèn)速度。

因此,現(xiàn)有技術(shù)中的缺陷是,對(duì)于稀疏數(shù)據(jù)的訪問(wèn),通過(guò)在稀疏列上創(chuàng)建二級(jí)索引的方式實(shí)現(xiàn)數(shù)據(jù)的訪問(wèn),由于索引的更新會(huì)降低數(shù)據(jù)流人速率,以稀疏數(shù)據(jù)為過(guò)濾條件對(duì)含有日志信息的表執(zhí)行查詢時(shí),將會(huì)進(jìn)行全表掃描,導(dǎo)致訪問(wèn)速度非常慢。



技術(shù)實(shí)現(xiàn)要素:

針對(duì)上述技術(shù)問(wèn)題,本發(fā)明提供一種稀疏數(shù)據(jù)的訪問(wèn)方法及系統(tǒng),采用了對(duì)稀疏列進(jìn)行標(biāo)記的方式,并且不需要二級(jí)索引,直接使用基本表,可以在持續(xù)數(shù)據(jù)輸入的情況下,高效地對(duì)數(shù)據(jù)進(jìn)行過(guò)濾讀取。

為解決上述技術(shù)問(wèn)題,本發(fā)明提供的技術(shù)方案是:

第一方面,本發(fā)明提供一種稀疏數(shù)據(jù)的訪問(wèn)方法,包括:

步驟s1,在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,所述稀疏矩陣由多個(gè)稀疏列組成;

步驟s2,在所述稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將所述被標(biāo)記的稀疏列作為主鍵的第一列;

步驟s3,獲取查詢條件,根據(jù)所述查詢條件在所述事實(shí)表中進(jìn)行稀疏列的查詢:

當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),將所述查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;

當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),重新返回所述步驟s1;

步驟s4,根據(jù)所述查詢條件和所述限定查詢條件,實(shí)現(xiàn)所述查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)方法,其技術(shù)方案為:在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,所述稀疏矩陣由多個(gè)稀疏列組成;在所述稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將所述被標(biāo)記的稀疏列作為主鍵的第一列;獲取查詢條件,根據(jù)所述查詢條件在所述事實(shí)表中進(jìn)行稀疏列的查詢:當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),將所述查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),重新返回所述步驟s1;根據(jù)所述查詢條件和所述限定查詢條件,實(shí)現(xiàn)所述查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)方法,采用了對(duì)稀疏列進(jìn)行標(biāo)記的方式,并且不需要二級(jí)索引,直接使用基本表,可以在持續(xù)數(shù)據(jù)輸入的情況下,高效地對(duì)數(shù)據(jù)進(jìn)行過(guò)濾讀取。

進(jìn)一步地,在所述數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)固定大小的值為null的數(shù)據(jù)類型保存所述被標(biāo)記的稀疏列,所述被標(biāo)記的稀疏列對(duì)應(yīng)的固定類型的值不大于null值。

進(jìn)一步地,在所述數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)可變長(zhǎng)度字符串?dāng)?shù)據(jù)類型保存固定類型的值大于所述null值的數(shù)據(jù)。

進(jìn)一步地,所述步驟s3中,當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列不包含所述被標(biāo)記的稀疏列時(shí),通過(guò)編譯器給出警告提示。

第二方面,本發(fā)明提供了一種稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng),包括:

稀疏矩陣創(chuàng)建模塊,用于在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,所述稀疏矩陣由多個(gè)稀疏列組成;

稀疏列標(biāo)記模塊,用于在所述稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將所述被標(biāo)記的稀疏列作為主鍵的第一列;

稀疏列查詢模塊,用于獲取查詢條件,根據(jù)所述查詢條件在所述事實(shí)表中進(jìn)行稀疏列的查詢:

當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),將所述查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;

當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),重新返回所述稀疏矩陣創(chuàng)建模塊;

稀疏數(shù)據(jù)訪問(wèn)模塊,用于根據(jù)所述查詢條件和所述限定查詢條件,實(shí)現(xiàn)所述查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng),其技術(shù)方案為:通過(guò)稀疏矩陣創(chuàng)建模塊,在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,所述稀疏矩陣由多個(gè)稀疏列組成;通過(guò)稀疏列標(biāo)記模塊,在所述稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將所述被標(biāo)記的稀疏列作為主鍵的第一列;通過(guò)稀疏列查詢模塊,用于獲取查詢條件,根據(jù)所述查詢條件在所述事實(shí)表中進(jìn)行稀疏列的查詢:當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),將所述查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),重新返回所述稀疏矩陣創(chuàng)建模塊;通過(guò)稀疏數(shù)據(jù)訪問(wèn)模塊,根據(jù)所述查詢條件和所述限定查詢條件,實(shí)現(xiàn)所述查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng),采用了對(duì)稀疏列進(jìn)行標(biāo)記的方式,并且不需要二級(jí)索引,直接使用基本表,可以在持續(xù)數(shù)據(jù)輸入的情況下,高效地對(duì)數(shù)據(jù)進(jìn)行過(guò)濾讀取。

進(jìn)一步地,還包括數(shù)據(jù)存儲(chǔ)模塊,用于在所述數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)固定大小的值為null的數(shù)據(jù)類型保存所述被標(biāo)記的稀疏列,所述被標(biāo)記的稀疏列對(duì)應(yīng)的固定類型的值不大于null值。

進(jìn)一步地,所述數(shù)據(jù)存儲(chǔ)模塊,用于在所述數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)可變長(zhǎng)度字符串?dāng)?shù)據(jù)類型保存固定類型的值大于所述null值的數(shù)據(jù)。

進(jìn)一步地,所述稀疏列查詢模塊中,當(dāng)所述查詢條件中對(duì)應(yīng)的稀疏列不包含所述被標(biāo)記的稀疏列時(shí),通過(guò)編譯器給出警告提示。

附圖說(shuō)明

為了更清楚地說(shuō)明本發(fā)明具體實(shí)施方式或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)具體實(shí)施方式或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹。

圖1示出了本發(fā)明實(shí)施例所提供的一種稀疏數(shù)據(jù)的訪問(wèn)方法的流程圖;

圖2示出了本發(fā)明實(shí)施例所提供的一種稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng)的示意圖。

具體實(shí)施方式

下面將結(jié)合附圖對(duì)本發(fā)明技術(shù)方案的實(shí)施例進(jìn)行詳細(xì)的描述。以下實(shí)施例僅用于更加清楚地說(shuō)明本發(fā)明的技術(shù)方案,因此只是作為示例,而不能以此來(lái)限制本發(fā)明的保護(hù)范圍。

實(shí)施例一

圖1示出了本發(fā)明實(shí)施例所提供的一種稀疏數(shù)據(jù)的訪問(wèn)方法的流程圖;如圖1所示,實(shí)施例一提供的一種稀疏數(shù)據(jù)的訪問(wèn)方法,包括:

步驟s1,在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,稀疏矩陣由多個(gè)稀疏列組成;

步驟s2,在稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列_has_sparse_data_char(1),并將被標(biāo)記的稀疏列作為主鍵的第一列;如果定義了_salt_和_division_by_則放在它們之后。

本實(shí)施例中,假設(shè)數(shù)據(jù)存儲(chǔ)時(shí)是按主鍵(或由多列組成的主鍵)來(lái)排序的,而且數(shù)據(jù)庫(kù)具備像trafodionmdam(多維訪問(wèn)方法)的特性。關(guān)于這一特性的大體描述如下:

假設(shè)表t有4列:a,b,c,d,主鍵由兩列(a,b)組成,mdam將保證對(duì)于如下查詢:

select*fromtwhereb=3;

如果列a中數(shù)據(jù)的基數(shù)cardinality不是特別高的話,生成的查詢條件會(huì)在b=3的行對(duì)a的所有可能的值做隨機(jī)訪問(wèn),而不是進(jìn)行全表掃描,因?yàn)閍并不是查詢條件。這在沒有mdam時(shí),是會(huì)進(jìn)行全表掃描的。將被標(biāo)記的稀疏列作為主鍵的第一列,可在數(shù)據(jù)訪問(wèn)時(shí),首先對(duì)主鍵的第一列進(jìn)行訪問(wèn),加快了的訪問(wèn)速度。

需要說(shuō)明的是,本方法并不一定需要數(shù)據(jù)庫(kù)具備像mdam這樣的特性。例如,如果存儲(chǔ)層使用的是orc格式,則本方法可以充分利用其謂語(yǔ)下推和列數(shù)據(jù)有序的特性。

步驟s3,獲取查詢條件,根據(jù)查詢條件在事實(shí)表中進(jìn)行稀疏列的查詢:

當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列中的數(shù)據(jù)有效,不是notnull,換句話說(shuō),查詢條件中包含被標(biāo)記的稀疏列時(shí),將查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;

當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列中沒有有效數(shù)據(jù),換句話說(shuō),查詢條件中不包含被標(biāo)記的稀疏列時(shí),重新返回步驟s1;

步驟s4,根據(jù)查詢條件和限定查詢條件,實(shí)現(xiàn)查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)方法,其技術(shù)方案為:在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,稀疏矩陣由多個(gè)稀疏列組成;在稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將被標(biāo)記的稀疏列作為主鍵的第一列;獲取查詢條件,根據(jù)查詢條件在事實(shí)表中進(jìn)行稀疏列的查詢:當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),將查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),重新返回步驟s1;根據(jù)查詢條件和限定查詢條件,實(shí)現(xiàn)查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)方法,采用了對(duì)稀疏列進(jìn)行標(biāo)記的方式,并且不需要二級(jí)索引,直接使用基本表,可以在持續(xù)數(shù)據(jù)輸入的情況下,高效地對(duì)數(shù)據(jù)進(jìn)行過(guò)濾讀取。

其中,步驟s3,具體為:

當(dāng)輸入的一行數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列數(shù)據(jù),當(dāng)該數(shù)據(jù)在稀疏列上的值是有效數(shù)據(jù)(notnull),則將這一行的_has_sparse_data_設(shè)為‘t’,否則設(shè)為‘f’;即查詢條件中對(duì)應(yīng)的稀疏列為被標(biāo)記的稀疏列時(shí),限定查詢條件為“t”,否則為“f”。

需要說(shuō)明的是,采用這種方式,只需要t/f兩種取值,這樣可以保證_has_sparse_data_的基數(shù)cardinality始終為2。而不需要用特殊的編碼技術(shù),比如比特位圖等技術(shù)來(lái)表示表的哪一列有值,僅僅用t表示某個(gè)稀疏列上有值即可。采用特殊編碼往往會(huì)適得其反,因?yàn)闀?huì)增加此列的基數(shù)(cardinality)從而影響mdam多維存取存儲(chǔ)器。另外,采用比特位圖這類位運(yùn)算,無(wú)法轉(zhuǎn)換為范圍表達(dá)式,而采用t/f兩種布爾值的表示方法已經(jīng)足夠,可以根據(jù)數(shù)據(jù)是否存在稀疏列上有值進(jìn)行不同的分區(qū)。

通過(guò)上述限定查詢條件的設(shè)置,當(dāng)查詢語(yǔ)句的條件中包含被標(biāo)記的稀疏列時(shí),自動(dòng)在查詢條件中加入and_has_sparse_data_=‘t’。此時(shí)數(shù)據(jù)庫(kù)僅訪問(wèn)_has_sparse_data_=‘t’的行,也就是稀疏列中包含有效數(shù)據(jù)的行,無(wú)需進(jìn)行多行掃描,因此可以快速響應(yīng),對(duì)并行處理和查詢整個(gè)數(shù)據(jù)集的要求相當(dāng)?shù)汀?/p>

優(yōu)選地,在數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)固定大小的值為null的數(shù)據(jù)類型保存被標(biāo)記的稀疏列,被標(biāo)記的稀疏列對(duì)應(yīng)的固定類型的值不大于null值。

使用固定大小的值可為null的數(shù)據(jù)類型來(lái)保存稀疏數(shù)據(jù),而不使用varchar可變長(zhǎng)度字符串這種數(shù)據(jù)類型。

例如。對(duì)于timestamp(6)類型,稀疏數(shù)據(jù)依然占用7字節(jié),因?yàn)閠imestamp(6)在數(shù)據(jù)庫(kù)中占有固定大小的空間,7字節(jié)。然而空的varchar并不占用字節(jié)。在數(shù)據(jù)庫(kù)中,行的大小與掃描表的性能息息相關(guān),所以固定大小的稀疏數(shù)據(jù)可以被轉(zhuǎn)換為字符串,varchar,然后再轉(zhuǎn)換回來(lái)。對(duì)于稀疏數(shù)據(jù),這樣可以大量節(jié)省存儲(chǔ)空間,并提高訪問(wèn)的效率。

優(yōu)選地,在數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)可變長(zhǎng)度字符串?dāng)?shù)據(jù)類型保存固定類型的值大于null值的數(shù)據(jù)。

而對(duì)于數(shù)據(jù)的固定類型的大小大于nullvarchar,即固定大小的值可為null的數(shù)據(jù)類型,則后臺(tái)程序?qū)⒌讓哟鎯?chǔ)類型改為varchar。

優(yōu)選地,步驟s3中,當(dāng)查詢條件中對(duì)應(yīng)的稀疏列不包含被標(biāo)記的稀疏列時(shí),通過(guò)編譯器給出警告提示。

通過(guò)編譯器給出的警告提示,可及時(shí)提醒用戶。

優(yōu)選地,本實(shí)施例中的稀疏數(shù)據(jù)的訪問(wèn)方法的設(shè)計(jì)和實(shí)現(xiàn)如果完全由應(yīng)用程序?qū)崿F(xiàn)會(huì)非常繁瑣。于是我們將上面的操作寫到dbms后臺(tái),讓這些操作對(duì)使用者透明。

第二方面,圖2示出了本發(fā)明實(shí)施例所提供的一種稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng)的示意圖,參見圖2,本實(shí)施例提供了一種稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng)10,包括:

稀疏矩陣創(chuàng)建模塊101,用于在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,稀疏矩陣由多個(gè)稀疏列組成;

稀疏列標(biāo)記模塊102,用于在稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列_has_sparse_data_char(1),并將被標(biāo)記的稀疏列作為主鍵的第一列;如果定義了_salt_和_division_by_則放在它們之后。

本實(shí)施例中,假設(shè)數(shù)據(jù)存儲(chǔ)時(shí)是按主鍵(或由多列組成的主鍵)來(lái)排序的,而且數(shù)據(jù)庫(kù)具備像trafodionmdam(多維訪問(wèn)方法)的特性。關(guān)于這一特性的大體描述如下:

假設(shè)表t有4列:a,b,c,d,主鍵由兩列(a,b)組成,mdam將保證對(duì)于如下查詢:

select*fromtwhereb=3;

如果列a中數(shù)據(jù)的基數(shù)cardinality不是特別高的話,生成的查詢條件會(huì)在b=3的行對(duì)a的所有可能的值做隨機(jī)訪問(wèn),而不是進(jìn)行全表掃描,因?yàn)閍并不是查詢條件。這在沒有mdam時(shí),是會(huì)進(jìn)行全表掃描的。將被標(biāo)記的稀疏列作為主鍵的第一列,可在數(shù)據(jù)訪問(wèn)時(shí),首先對(duì)主鍵的第一列進(jìn)行訪問(wèn),加快了的訪問(wèn)速度。

需要說(shuō)明的是,本方法并不一定需要數(shù)據(jù)庫(kù)具備像mdam這樣的特性。例如,如果存儲(chǔ)層使用的是orc格式,則本方法可以充分利用其謂語(yǔ)下推和列數(shù)據(jù)有序的特性。

稀疏列查詢模塊103,用于獲取查詢條件,根據(jù)查詢條件在事實(shí)表中進(jìn)行稀疏列的查詢:

當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為有效數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列中的數(shù)據(jù)有效,不是notnull,將查詢條件中對(duì)應(yīng)的稀疏列作為限定查詢條件;

當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為無(wú)效數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列中沒有有效數(shù)據(jù),重新返回稀疏矩陣創(chuàng)建模塊;

稀疏數(shù)據(jù)訪問(wèn)模塊104,用于根據(jù)查詢條件和限定查詢條件,實(shí)現(xiàn)查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng)10,其技術(shù)方案為:通過(guò)稀疏矩陣創(chuàng)建模塊101,在數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)建立事實(shí)表時(shí),創(chuàng)建稀疏矩陣,稀疏矩陣由多個(gè)稀疏列組成;通過(guò)稀疏列標(biāo)記模塊102,在稀疏矩陣中至少對(duì)一個(gè)稀疏列進(jìn)行標(biāo)記,得到被標(biāo)記的稀疏列,并將被標(biāo)記的稀疏列作為主鍵的第一列;通過(guò)稀疏列查詢模塊103,用于獲取查詢條件,根據(jù)查詢條件在事實(shí)表中進(jìn)行稀疏列的查詢:當(dāng)查詢條件中對(duì)應(yīng)的稀疏列為被標(biāo)記的稀疏列,將被標(biāo)記的稀疏列作為限定查詢條件;當(dāng)查詢條件中對(duì)應(yīng)的稀疏列不包含被標(biāo)記的稀疏列,重新返回稀疏矩陣創(chuàng)建模塊;通過(guò)稀疏數(shù)據(jù)訪問(wèn)模塊104,根據(jù)查詢條件和限定查詢條件,實(shí)現(xiàn)查詢條件中對(duì)應(yīng)的稀疏列所對(duì)應(yīng)數(shù)據(jù)的訪問(wèn)。

本發(fā)明提供的稀疏數(shù)據(jù)的訪問(wèn)系統(tǒng)10,采用了對(duì)稀疏列進(jìn)行標(biāo)記的方式,并且不需要二級(jí)索引,直接使用基本表,可以在持續(xù)數(shù)據(jù)輸入的情況下,高效地對(duì)數(shù)據(jù)進(jìn)行過(guò)濾讀取。

其中,步驟s3,具體為:

當(dāng)輸入的一行數(shù)據(jù),即查詢條件中對(duì)應(yīng)的稀疏列數(shù)據(jù),當(dāng)該數(shù)據(jù)在稀疏列上的值是有效數(shù)據(jù)(notnull),則將這一行的_has_sparse_data_設(shè)為‘t’,否則設(shè)為‘f’;即查詢條件中對(duì)應(yīng)的稀疏列為被標(biāo)記的稀疏列時(shí),限定查詢條件為“t”,否則為“f”。

需要說(shuō)明的是,采用這種方式,只需要t/f兩種取值,這樣可以保證_has_sparse_data_的基數(shù)cardinality始終為2。而不需要用特殊的編碼技術(shù),比如比特位圖等技術(shù)來(lái)表示表的哪一列有值,僅僅用t表示某個(gè)稀疏列上有值即可。采用特殊編碼往往會(huì)適得其反,因?yàn)闀?huì)增加此列的基數(shù)(cardinality)從而影響mdam多維存取存儲(chǔ)器。另外,采用比特位圖這類位運(yùn)算,無(wú)法轉(zhuǎn)換為范圍表達(dá)式,而采用t/f兩種布爾值的表示方法已經(jīng)足夠,可以根據(jù)數(shù)據(jù)是否存在稀疏列上有值進(jìn)行不同的分區(qū)。

通過(guò)上述限定查詢條件的設(shè)置,當(dāng)查詢語(yǔ)句的條件中包含被標(biāo)記的稀疏列時(shí),自動(dòng)在查詢條件中加入and_has_sparse_data_=‘t’。此時(shí)數(shù)據(jù)庫(kù)僅訪問(wèn)_has_sparse_data_=‘t’的行,也就是稀疏列中包含有效數(shù)據(jù)的行,無(wú)需進(jìn)行多行掃描,因此可以快速響應(yīng),對(duì)并行處理和查詢整個(gè)數(shù)據(jù)集的要求相當(dāng)?shù)汀?/p>

優(yōu)選地,還包括數(shù)據(jù)存儲(chǔ)模塊,用于在數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)固定大小的值為null的數(shù)據(jù)類型保存被標(biāo)記的稀疏列,被標(biāo)記的稀疏列對(duì)應(yīng)的固定類型的值不大于null值。

使用固定大小的值可為null的數(shù)據(jù)類型來(lái)保存稀疏數(shù)據(jù),而不使用varchar可變長(zhǎng)度字符串這種數(shù)據(jù)類型。

例如:對(duì)于timestamp(6)類型,稀疏數(shù)據(jù)依然占用7字節(jié),因?yàn)閠imestamp(6)在數(shù)據(jù)庫(kù)中占有固定大小的空間,7字節(jié)。然而空的varchar并不占用字節(jié)。在數(shù)據(jù)庫(kù)中,行的大小與掃描表的性能息息相關(guān),所以固定大小的稀疏數(shù)據(jù)可以被轉(zhuǎn)換為字符串,varchar,然后再轉(zhuǎn)換回來(lái)。對(duì)于稀疏數(shù)據(jù),這樣可以大量節(jié)省存儲(chǔ)空間,并提高訪問(wèn)的效率。

優(yōu)選地,數(shù)據(jù)存儲(chǔ)模塊,用于在數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)訪問(wèn)的過(guò)程中,通過(guò)可變長(zhǎng)度字符串?dāng)?shù)據(jù)類型保存固定類型的值大于null值的數(shù)據(jù)。

而對(duì)于數(shù)據(jù)的固定類型的大小大于nullvarchar,即固定大小的值可為null的數(shù)據(jù)類型,則后臺(tái)程序?qū)⒌讓哟鎯?chǔ)類型改為varchar。

優(yōu)選地,稀疏列查詢模塊103中,當(dāng)查詢條件中對(duì)應(yīng)的稀疏列不包含被標(biāo)記的稀疏列時(shí),通過(guò)編譯器給出警告提示。

通過(guò)編譯器給出的警告提示,可及時(shí)提醒用戶。

優(yōu)選地,本實(shí)施例中的稀疏數(shù)據(jù)的訪問(wèn)方法的設(shè)計(jì)和實(shí)現(xiàn)如果完全由應(yīng)用程序?qū)崿F(xiàn)會(huì)非常繁瑣。于是我們將上面的操作寫到dbms后臺(tái),讓這些操作對(duì)使用者透明。

最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求和說(shuō)明書的范圍當(dāng)中。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1