国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

      文檔序號:11774725閱讀:309來源:國知局
      稀疏數(shù)據(jù)的訪問方法及系統(tǒng)與流程

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



      背景技術(shù):

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

      目前現(xiàn)有日志分析系統(tǒng)中,都采用反數(shù)據(jù)庫范式的設(shè)計。和傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)的三范式設(shè)計不同,日志表被設(shè)計為單表,以便保證日志的加載速度。因為日志隨時隨地產(chǎn)生,且數(shù)據(jù)巨大,需要不間斷地加載到分析系統(tǒng)中,如果采用第三范式的設(shè)計方法,將影響加載數(shù)據(jù)。而采用單表則有比較好的加載性能,因為不需要更新和管理多張相互關(guān)聯(lián)的表,但這樣做的代價就是會導(dǎo)致表非常巨大。因此現(xiàn)有日志分析系統(tǒng),對日志信息并沒有采用特殊的存儲和訪問方法。而日志的有用信息是相當(dāng)稀疏的,導(dǎo)致對日志的檢索非常低效。

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      附圖說明

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

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

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

      具體實施方式

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

      實施例一

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

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

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

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

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

      select*fromtwhereb=3;

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

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

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

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

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

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

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

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

      其中,步驟s3,具體為:

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

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

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

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

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

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

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

      而對于數(shù)據(jù)的固定類型的大小大于nullvarchar,即固定大小的值可為null的數(shù)據(jù)類型,則后臺程序?qū)⒌讓哟鎯︻愋透臑関archar。

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

      通過編譯器給出的警告提示,可及時提醒用戶。

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

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

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

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

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

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

      select*fromtwhereb=3;

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

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

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

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

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

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

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

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

      其中,步驟s3,具體為:

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

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

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

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

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

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

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

      而對于數(shù)據(jù)的固定類型的大小大于nullvarchar,即固定大小的值可為null的數(shù)據(jù)類型,則后臺程序?qū)⒌讓哟鎯︻愋透臑関archar。

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

      通過編譯器給出的警告提示,可及時提醒用戶。

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

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

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