两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種海量數(shù)據(jù)查詢方法

文檔序號(hào):6484235閱讀:187來(lái)源:國(guó)知局

專利名稱::一種海量數(shù)據(jù)查詢方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)據(jù)庫(kù)數(shù)據(jù)査詢,尤其涉及一種提高了査詢性能的海量數(shù)據(jù)查詢方法,屬于信息
技術(shù)領(lǐng)域

背景技術(shù)
:査詢是用戶從數(shù)據(jù)庫(kù)獲取信息的唯一方式,也是一般應(yīng)用系統(tǒng)的主要功能,而系統(tǒng)的査詢效率也是衡量其實(shí)用性的關(guān)鍵指標(biāo)之一。在電信和互聯(lián)網(wǎng)等行業(yè)里,隨著信息化的發(fā)展,企業(yè)要處理的數(shù)據(jù)爆炸式的增長(zhǎng),數(shù)據(jù)量都達(dá)到了TB級(jí)、PB級(jí),隨著數(shù)據(jù)量增多,系統(tǒng)的負(fù)載越來(lái)越大,在不增加硬件成本的情況下,用戶査詢數(shù)據(jù)性能隨之下降。如何發(fā)揮已有系統(tǒng)的最大性能,使查詢速度能滿足實(shí)用的要求是許多企業(yè)面對(duì)的難題,目前常用的傳統(tǒng)方法有(1)建立合理的索引(2)使用分區(qū)技術(shù)(3)使用分布式數(shù)據(jù)庫(kù)(4)使用HINT暗示,使用PL/SQL(5)基于物化視圖的查詢重寫(6)基于緩存技術(shù)上述方法采用的手段歸根結(jié)底都是通過減少IO磁盤的訪問來(lái)提高查詢性能。比如,系統(tǒng)中都使用按時(shí)間分區(qū)的技術(shù),當(dāng)用戶查詢條件有時(shí)間范圍的時(shí)候,只需要查詢包含這段時(shí)間的數(shù)據(jù)分區(qū)而不用査詢所有的分區(qū),這樣就可以減少IO磁盤訪問。建立合理的索引也是如此,根據(jù)用戶査詢的條件,先從包含這些條件的索引中找到滿足條件的ROWID,再根據(jù)ROWID去查詢實(shí)際的數(shù)據(jù)來(lái)避免直接從表中查詢數(shù)據(jù)。再如,使用物化視圖和緩存把經(jīng)常查詢的數(shù)據(jù)提前裝載在內(nèi)存里,用戶查詢時(shí)就不用再去讀磁盤了。上述方法在某些條件下都能減少磁盤IO訪問,也能達(dá)到提高查詢性能的目的,但是提高的范圍仍有一定限度。當(dāng)數(shù)據(jù)量大到一定程度,并且不使用大型存儲(chǔ)時(shí),很多數(shù)據(jù)査詢IO磁盤訪問花費(fèi)時(shí)間還是很長(zhǎng),常超出用戶的承受范圍。比如某一系統(tǒng)一個(gè)月的數(shù)據(jù)就達(dá)到1TB,使用了RANGE分區(qū)技術(shù),按天創(chuàng)建了分區(qū),在常用査詢列上都建立了并且建了LOCAL索引。比如用戶在這個(gè)系統(tǒng)上査詢最近一個(gè)月滿足某一條件的數(shù)據(jù),系統(tǒng)最少要讀取這一個(gè)月約30個(gè)分區(qū)的本地索引才能得到實(shí)際數(shù)據(jù),這些索引的大小往往超過幾個(gè)GB,所以即使使用了這些技術(shù),花費(fèi)的時(shí)間往往也達(dá)到分鐘級(jí)。特殊情況下,如果滿足這個(gè)用戶査詢條件的數(shù)據(jù)非常少或者沒有,查詢的范圍就會(huì)加大,不但返回時(shí)間很長(zhǎng)而且還沒有結(jié)果。這會(huì)使用戶覺得這個(gè)系統(tǒng)的實(shí)用性不好,同時(shí)也大大降低了用戶的工作效率。此時(shí),如果要讓系統(tǒng)性能提高或許只能考慮購(gòu)買性能更好的服務(wù)器。本專利的技術(shù)則針對(duì)上述實(shí)際問題,通過統(tǒng)計(jì)等技術(shù)找到一個(gè)有效解決問題的辦法,提高系統(tǒng)的査詢性能。和一般應(yīng)用數(shù)據(jù)庫(kù)不同,海量數(shù)據(jù)庫(kù)系統(tǒng)具有以下特點(diǎn)-(1)數(shù)據(jù)有一定的時(shí)效性,且數(shù)據(jù)量隨著時(shí)間在不停增加。(2)査詢往往有一定的時(shí)間范圍,并且在數(shù)據(jù)上進(jìn)行修改的操作非常少。(3)相對(duì)來(lái)說系統(tǒng)查詢時(shí)間大都花費(fèi)在磁盤I0上,CPU使用所花費(fèi)的時(shí)間可忽略不計(jì)。(4)實(shí)體表的很多列上數(shù)據(jù)重復(fù)率很高。實(shí)際中像電信行業(yè)的計(jì)費(fèi)査詢系統(tǒng)、大型網(wǎng)站交易平臺(tái)等系統(tǒng),他們的數(shù)據(jù)量都隨著時(shí)間的推移,每天都在大量增加,而信息一旦錄入數(shù)據(jù)庫(kù),修改的就非常少。系統(tǒng)査詢時(shí)都有一定的時(shí)間范圍,數(shù)據(jù)超過一定時(shí)間就會(huì)刪除或者轉(zhuǎn)存其他系統(tǒng)。另外一個(gè)特點(diǎn)是,常用查詢列上有很高的重復(fù)率。比如,電信計(jì)費(fèi)系統(tǒng)的用戶手機(jī)號(hào),交易平臺(tái)交易雙方的ID等。本專利適用于具有上述特點(diǎn)的海量數(shù)據(jù)庫(kù)的查詢中。
發(fā)明內(nèi)容本方法針對(duì)海量數(shù)據(jù)査詢中傳統(tǒng)方法已經(jīng)無(wú)法滿足性能要求的情況,有效地利用系統(tǒng)的空閑時(shí)間對(duì)需要査詢的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),最大限度地減少查詢時(shí)磁盤10訪問以提高査詢速度。在系統(tǒng)不增加硬件成本的條件下,使査詢性能提高幾倍或者幾十倍。本發(fā)明針對(duì)以上背景資料中提到的實(shí)際問題,提出了一種利用數(shù)據(jù)庫(kù)系統(tǒng)的空閑時(shí)間,針對(duì)背景資料中提到的,用戶査詢常用的査詢中常用到的,并且數(shù)據(jù)有一定的重復(fù)率的列,進(jìn)行統(tǒng)計(jì),在實(shí)際查詢的時(shí)候,利用這個(gè)統(tǒng)計(jì)結(jié)果縮小査詢范圍再作查詢,以減少磁盤讀取,提高海量數(shù)據(jù)査詢效率。具體來(lái)說,本發(fā)明包括下列步驟a)進(jìn)行海量數(shù)據(jù)查詢前,對(duì)于一個(gè)或多個(gè)海量數(shù)據(jù)實(shí)體表,按照設(shè)定的時(shí)間間隔(比如,天或者小時(shí))對(duì)每個(gè)實(shí)體表進(jìn)行分區(qū),得到各個(gè)實(shí)體表的多個(gè)實(shí)體表分區(qū);并優(yōu)選在經(jīng)常被當(dāng)做查詢條件的屬性名稱(比如用戶ID等)的屬性列上,建立BITMAP本地索引。b)建立所述實(shí)體表中一個(gè)或多個(gè)屬性名稱的獨(dú)立的一個(gè)或多個(gè)統(tǒng)計(jì)表,每個(gè)屬性名稱的每個(gè)統(tǒng)計(jì)表均為二維統(tǒng)計(jì)表,其中一維表示設(shè)定的時(shí)間區(qū)間(比如,月)內(nèi)的各個(gè)時(shí)間間隔(和步驟a時(shí)間間隔相同),另一維表示所述屬性名稱的屬性列中的各個(gè)屬性數(shù)據(jù),統(tǒng)計(jì)表中的內(nèi)容表示在某個(gè)時(shí)間間隔內(nèi)存在某個(gè)屬性數(shù)據(jù)的實(shí)體表的名稱;換言之,在本步驟中,以一段時(shí)間為單位,把這段時(shí)間內(nèi)需要統(tǒng)計(jì)的屬性名稱的列數(shù)據(jù)統(tǒng)計(jì)在一個(gè)表里。一般情況下,對(duì)一個(gè)實(shí)體表進(jìn)行統(tǒng)計(jì),如果多個(gè)實(shí)體表有相同的屬性列,而且査詢的時(shí)候,用戶有可能對(duì)多個(gè)表同時(shí)一起査詢的話,可以把多個(gè)實(shí)體表的相同屬性列的數(shù)據(jù)統(tǒng)計(jì)到同一個(gè)表中。以按月統(tǒng)計(jì)為例,統(tǒng)計(jì)表的命名可以是屬性名+年月,比如某一列上的統(tǒng)計(jì)表名為CSTAT0903,表示2009年3月份的統(tǒng)計(jì)結(jié)果。CSTAT0903表共有32列,第一列是要統(tǒng)計(jì)的屬性列,比如為CustomID(下面以此列為例,進(jìn)行說明)、第2到32列,分別表示這一個(gè)月的每一天對(duì)應(yīng)的分區(qū)。列名為D1、D2…D31??稍O(shè)定在每天的某個(gè)具體時(shí)間(比如晚1時(shí)),對(duì)前一天的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),最終的結(jié)果上,CustomID列保存這所有統(tǒng)計(jì)過的CutomID,如果某分區(qū)里包含了這個(gè)CustomID的話,其相應(yīng)的行就保存對(duì)應(yīng)的實(shí)體表名。步驟b優(yōu)選在海量數(shù)據(jù)查詢空閑期間進(jìn)行。c)進(jìn)行海量數(shù)據(jù)査詢時(shí),若査詢條件中包括經(jīng)過步驟b統(tǒng)計(jì)的屬性名稱,則先査詢所述屬性名稱的統(tǒng)計(jì)表,并根據(jù)該統(tǒng)計(jì)表和査詢條件中設(shè)定的時(shí)間區(qū)間獲得在該時(shí)間區(qū)間內(nèi)的實(shí)體表分區(qū)的集合;若査詢條件中包括多個(gè)經(jīng)過步驟b統(tǒng)計(jì)的屬性名稱,則依次獲得實(shí)體表分區(qū)集合后取交集;參照步驟b所述實(shí)例,若海量查詢時(shí)的査詢條件中包含CustomID,則首先查詢CustomID的統(tǒng)計(jì)表,查找CSTAT090N(N表示月份,N=l,2,,12)的統(tǒng)計(jì)表,查找查詢條件中指定的時(shí)間范圍內(nèi)包含這個(gè)CustomID的分區(qū)集合(若以列表的形式展示該集合,則可稱為分區(qū)列表),把查詢范圍縮小到這些分區(qū)內(nèi)。如果查詢條件還包含其他經(jīng)統(tǒng)計(jì)的屬性名稱,則同樣取得其分區(qū)集合,取這幾個(gè)分區(qū)集合的交集。d)根據(jù)步驟c獲得的實(shí)體表分區(qū)集合或?qū)嶓w表分區(qū)集合的交集縮小海量數(shù)據(jù)査詢范圍,并根據(jù)所述集合或交集中的實(shí)體表分區(qū)進(jìn)行海量數(shù)據(jù)查詢。一般系統(tǒng)都采用分頁(yè)顯示,為了快速把結(jié)果返回結(jié)果,不是一次把所有的數(shù)據(jù)都査詢出來(lái),再返回結(jié)果,而是把分區(qū)列表根據(jù)其數(shù)據(jù)的時(shí)間按照指定的順序進(jìn)行排序,然后依次查詢這些分區(qū),如果查詢第一個(gè)分區(qū)里的記錄條數(shù)大于要求的第一頁(yè)的條數(shù),就先返回這些結(jié)果,如果不足,繼續(xù)查詢下一個(gè)分區(qū),直到滿足條數(shù),再返回結(jié)果。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是在不使用本專利的情況下,在海量數(shù)據(jù)庫(kù)中査詢,滿足査詢條件的結(jié)果非常少,那就需要進(jìn)行很多的磁盤10讀取,才能得到結(jié)果,使用本發(fā)明的方法,那就可以先通過一個(gè)統(tǒng)計(jì)表得到包含本數(shù)據(jù)的分區(qū)列表,再到這些分區(qū)列表里分區(qū)進(jìn)行讀取,這樣即使?jié)M足査詢條件的記錄很少,也能先得到哪些分區(qū)包含這些數(shù)據(jù),査詢的范圍也比較少,也能快速返回結(jié)果,反之,如果滿足査詢條件的記錄非常多,也只要査幾個(gè)分區(qū)就能得到結(jié)果。這個(gè)統(tǒng)計(jì)表的上的索引,是所有的數(shù)據(jù)的唯一值,相對(duì)于原有的這列上的索引的大小來(lái)說,只有原來(lái)的幾十分之一,因此,能夠很好的利用系統(tǒng)空閑時(shí)間進(jìn)行統(tǒng)計(jì),查詢的時(shí)候,只要花費(fèi)很小的代價(jià),就能避免在沒有數(shù)據(jù)的分區(qū)里進(jìn)行査詢,大大提高整體査詢性能。另外,通過本專利技術(shù)可以將系統(tǒng)空閑時(shí)間有效的利用起來(lái),最大限度的使用已有的系統(tǒng),通過服務(wù)器空閑時(shí)間,對(duì)前一天的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),在實(shí)際進(jìn)行査詢的時(shí)候,通過很少的10讀取高效準(zhǔn)確的找到包含需要查詢的數(shù)據(jù)所在的分區(qū),然后在一個(gè)分區(qū)接著一個(gè)分區(qū)的讀數(shù)據(jù),進(jìn)行排序,又最大限度的減少需要排序的數(shù)據(jù)。使系統(tǒng)消耗最少的資源,最快的返回查詢結(jié)果,和以前傳統(tǒng)的優(yōu)化方法相比,査詢效率會(huì)大幅提高,本技術(shù)的使用范圍很廣,隨著信息化的發(fā)展,許多應(yīng)用都建立在海量數(shù)據(jù)之上,只要數(shù)據(jù)有一定的重復(fù)率,都是可以應(yīng)該本專利的,比如,網(wǎng)絡(luò)交易系統(tǒng),電信行業(yè)的計(jì)費(fèi)系統(tǒng)等。該方法已應(yīng)用在北京銳安科技有限公司的分布式海量數(shù)據(jù)處理產(chǎn)品中,并解決了實(shí)際遇到的査詢慢的問題。下面是發(fā)明人在具體的海量數(shù)據(jù)平臺(tái)上的實(shí)際應(yīng)用測(cè)試效果環(huán)境30臺(tái)分布式的數(shù)據(jù)庫(kù),15個(gè)實(shí)體表,一個(gè)月的數(shù)據(jù)共84億多條記錄。查詢條件對(duì)這15個(gè)實(shí)體表的共有屬性列,時(shí)間一個(gè)月??偟挠涗浄秶?24億。沒有査詢結(jié)果查詢結(jié)果很多査詢結(jié)果很少(<100條)舊的算法2分40秒10秒30秒專利方法5秒8秒10秒可以看到,沒有查詢結(jié)果的時(shí)候,或者查詢結(jié)果很少的時(shí)候,使用本發(fā)明方法,查詢性能有很大的提升效果。圖1表示本發(fā)明實(shí)施例涉及客戶ID的査詢步驟;圖2表示本發(fā)明實(shí)施例涉及客戶ID和銷售商ID的査詢步驟;具體實(shí)施例方式下面通過具體實(shí)施例結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。假設(shè)本實(shí)施例系統(tǒng)中存在如下三個(gè)海量數(shù)據(jù)實(shí)體表,名稱分別是Food,Clothes和Device,這三個(gè)實(shí)體表的數(shù)據(jù)結(jié)構(gòu)如下表1-3所示表l:Food——食品類<table>tableseeoriginaldocumentpage7</column></row><table>表2:Clothes——衣服類<table>tableseeoriginaldocumentpage7</column></row><table>表3:Device——電器類<table>tableseeoriginaldocumentpage7</column></row><table>上面三個(gè)實(shí)體表記錄了網(wǎng)絡(luò)交易信息。一般情況下,對(duì)于單個(gè)系統(tǒng),提供用戶查詢的接口條件是有限個(gè)數(shù)的,統(tǒng)計(jì)用戶常用的查詢條件,得到的結(jié)果是80%以上的查詢都是某幾個(gè)特定的查詢條件。比如上述模型系統(tǒng)中,常用的査詢條件(屬性名稱)有(1)交易時(shí)間(2)客戶ID(3)銷售商ID本實(shí)施例方法包括下列步驟步驟一進(jìn)行海量數(shù)據(jù)査詢前,對(duì)于上述三個(gè)海量數(shù)據(jù)實(shí)體表,按照交易時(shí)間按天對(duì)每個(gè)實(shí)體表進(jìn)行分區(qū),則每個(gè)實(shí)體表均得到多個(gè)實(shí)體表分區(qū);同時(shí),在客戶ID,銷售商ID等常用屬性名稱上建立本地索引,索引類型為BITMAP,并在交易ID上建B樹的索引。另外,為了降低系統(tǒng)壓力,把數(shù)據(jù)按照購(gòu)客戶ID和銷售商ID進(jìn)行HASH,平均分布到多個(gè)數(shù)據(jù)庫(kù)上。步驟二建立上述實(shí)體表中客戶ID的多個(gè)統(tǒng)計(jì)表;在本實(shí)施例系統(tǒng)中,客戶ID這一列是一個(gè)重復(fù)率很高的列。整個(gè)系統(tǒng)在一段時(shí)間內(nèi)總的客戶ID的數(shù)量是一定的,如果把這個(gè)信息進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)每一個(gè)客戶ID發(fā)生交易的是哪些時(shí)間,這樣在查詢的時(shí)候,就能根據(jù)這個(gè)統(tǒng)計(jì)結(jié)果來(lái)確定需要査詢的時(shí)間范圍,而且只在這些時(shí)間范圍內(nèi)查詢,從而大大的減少磁盤的IO了。在本步驟中,將每一個(gè)月的信息統(tǒng)計(jì)到一個(gè)表中,因?yàn)榭蛻鬒D的信息,每間隔一段時(shí)間會(huì)有增有減,而在一個(gè)月范圍內(nèi),總的客戶ID數(shù)量是固定的,所以采用每一個(gè)月為單位,進(jìn)行統(tǒng)計(jì)。創(chuàng)建一個(gè)客戶ID的統(tǒng)計(jì)表,按照所統(tǒng)計(jì)的月份來(lái)命名,比如customStat0903,其中第一列是客戶ID這一屬性列中的各個(gè)屬性數(shù)據(jù),即這個(gè)月交易的所有的客戶ID,而且這一列只保留這一列的唯一值,在這一列上建一個(gè)唯一索引(B樹),命令為PK一customStat0903。在統(tǒng)計(jì)表customStat0903上,有另外31個(gè)列Dl、D2…D30、D31,分別表示這個(gè)月的每一天,而表中的內(nèi)容則表示在某天內(nèi)存在某個(gè)客戶ID的實(shí)體表的名稱,如下表4所示。表4:客戶ID的3月份統(tǒng)計(jì)表——customStat0903<table>tableseeoriginaldocumentpage8</column></row><table>:F=Food,下同;2:C=Clothes,下同;3:D=Device,下同。由于數(shù)據(jù)按天分區(qū),所以每天進(jìn)行一次統(tǒng)計(jì)。由于交易時(shí)間是實(shí)際時(shí)間,每天到了24時(shí)以后,就不會(huì)有當(dāng)天的數(shù)據(jù)生成了,而且大部分查詢?cè)诎滋煜到y(tǒng)壓力較大時(shí)進(jìn)行,深夜l時(shí)以后,壓力較小,所以本實(shí)施例設(shè)定在每天l時(shí)開始統(tǒng)計(jì)前一天的數(shù)據(jù)。本實(shí)施例進(jìn)行上述統(tǒng)計(jì)所使用的SQL語(yǔ)句如下(以統(tǒng)計(jì)FOOD表2009年3月1日的客戶ID為例)mergeintorunvista.Stat0903sUSING(selectdistinct客戶IDfromFoodpartition(P090301)t)ON(s.客戶IDL客戶ID)WHENMATCHEDTHENUPDATESETS.D1=S.Dl『food'WHENNOTMATCHEDTHENinsert(客戶ID,Dl)values(t.srcip,'food');對(duì)于客戶ID的其他統(tǒng)計(jì)表,其SQL語(yǔ)句類似。由于本實(shí)施例在每個(gè)實(shí)體表中的客戶ID列上均建立了BITMAP本地索弓l,所以selectdistinct客戶IDfromFoodpartition(P0卯301),直接從索引中就能得到結(jié)果,都不需要排序,整個(gè)統(tǒng)計(jì)也不需要很多時(shí)間。類似地,對(duì)銷售商ID按月進(jìn)行統(tǒng)計(jì),得到銷售商ID的多個(gè)統(tǒng)計(jì)表,其中一個(gè)統(tǒng)計(jì)表如下表5所示表5:銷售商ID的3月份統(tǒng)計(jì)表——SaleStat0卯3(PK—SaleStat0903是銷售商ID列上唯一索引)<table>tableseeoriginaldocumentpage9</column></row><table>步驟三查詢某客戶最近三個(gè)月的購(gòu)物記錄(2009-01-01—2009-3-31),并且按舊到新排序輸出。如果不使用本發(fā)明方法,那么系統(tǒng)得到所需數(shù)據(jù)需要讀取的10是三個(gè)實(shí)體表三個(gè)月共約90個(gè)分區(qū)的客戶ID屬性列上的索引。其存在下列缺點(diǎn)Z要讀的IO為90個(gè)分區(qū)索引,非常多7如果返回的數(shù)據(jù)非常多,排序時(shí)也占到很多時(shí)間Z如果返回的數(shù)據(jù)非常少,或者沒有,需要查詢完90個(gè)分區(qū)才能得到結(jié)果,也需要不少時(shí)間按照本發(fā)明方法進(jìn)行査詢則按照下列步驟進(jìn)行,如圖1所示由于査詢條件包括經(jīng)統(tǒng)計(jì)的屬性名稱一客戶ID,因此先讀取客戶ID的統(tǒng)計(jì)表,由于查詢的時(shí)間為2009年1月-3月,因此讀取customStat0901,customStat0902,customStat0903這三個(gè)月的統(tǒng)計(jì)表,如果有客戶ID的數(shù)據(jù),加到分區(qū)列表中。此處,如果査詢的時(shí)間區(qū)間包含査詢當(dāng)天,則由于當(dāng)天的數(shù)據(jù)未經(jīng)統(tǒng)計(jì),所以可直接從當(dāng)天的分區(qū)中去找,如果有,把當(dāng)天的分區(qū)也加到分區(qū)列表中去。如果分區(qū)列表中,沒有數(shù)據(jù),說明這個(gè)客戶沒有記錄,流程結(jié)束。根據(jù)分區(qū)列表的時(shí)間先后順序,査詢分區(qū)的數(shù)據(jù),并統(tǒng)計(jì)結(jié)果,如果統(tǒng)計(jì)數(shù)大于結(jié)果要求的條數(shù),直接把結(jié)果排序輸出,如果沒有達(dá)到結(jié)果要求的條數(shù),繼續(xù)下一個(gè)分區(qū),直到滿足為之,再排序輸出,這樣處理可以減少排序帶來(lái)的IO磁盤讀取。進(jìn)一步,如果査詢條件涉及多個(gè)經(jīng)統(tǒng)計(jì)的屬性名稱,則對(duì)每個(gè)屬性名稱均按上述方法得到各自分區(qū)列表,對(duì)分區(qū)列表取交集,再在交集中的分區(qū)的基礎(chǔ)上,根據(jù)剩下的條件進(jìn)行查詢。比如下列應(yīng)用要査詢一個(gè)客戶A最近一個(gè)月從銷售商B購(gòu)買了大于100元的清單。這是一個(gè)相對(duì)比較復(fù)雜的査詢,由于査詢的條件都是AND條件,而且統(tǒng)計(jì)系統(tǒng)中已經(jīng)把客戶ID,銷售商ID的存在信息都進(jìn)行了統(tǒng)計(jì),所以可以先查客戶A的客戶ID得到分區(qū)列表LIST1,再查銷售商B的銷售商ID得到分區(qū)列表LIST2,然后在LIST1和LIST2這兩個(gè)列表中取交集,在交集的分區(qū)里找到大于100元的清單,如圖2所示。關(guān)于分頁(yè)輸出,再作如下說明通過統(tǒng)計(jì)的信息可以得到包含數(shù)據(jù)的分區(qū)列表,如果把所有的數(shù)據(jù)都査詢出來(lái),再排序分頁(yè)輸出,這樣數(shù)據(jù)庫(kù)要讀的IO,包含所有分區(qū)的數(shù)據(jù)的讀取,以及大數(shù)據(jù)量排序需要的IO,為了加快這部分的性能,可能先將得到的査詢列表按照時(shí)間排序,然后一個(gè)分區(qū)一個(gè)分的取得結(jié)果,在這個(gè)分區(qū)里進(jìn)行排序,依次保存在集合類型的里,如果此時(shí)査詢的記錄大于要求的條數(shù)就結(jié)束,如果不足,繼續(xù)讀下一個(gè)分區(qū),輸出結(jié)果的時(shí)候,直接從集合里查詢就可以了。翻頁(yè)的時(shí)候,再根據(jù)前一頁(yè)得到的結(jié)果的最小時(shí)間為査詢條件,以及主鍵,再次査詢其他的分區(qū)列表,根據(jù)傳入的時(shí)間和主鍵值,再次査詢后面的分區(qū)列表,并確保數(shù)據(jù)在傳入的時(shí)間和主鍵值之后,這樣就不會(huì)返回重復(fù)的數(shù)據(jù)。再次翻頁(yè)査詢的時(shí)候,算法同第一頁(yè)査詢。權(quán)利要求1.一種海量數(shù)據(jù)查詢方法,其特征在于,包括下列步驟a)進(jìn)行海量數(shù)據(jù)查詢前,對(duì)于一個(gè)或多個(gè)海量數(shù)據(jù)實(shí)體表,按照設(shè)定的時(shí)間間隔對(duì)每個(gè)實(shí)體表進(jìn)行分區(qū),得到各個(gè)實(shí)體表的多個(gè)實(shí)體表分區(qū);b)建立所述實(shí)體表中一個(gè)或多個(gè)屬性名稱的獨(dú)立的一個(gè)或多個(gè)統(tǒng)計(jì)表,每個(gè)屬性名稱的每個(gè)統(tǒng)計(jì)表均為二維統(tǒng)計(jì)表,其中一維表示設(shè)定的時(shí)間區(qū)間內(nèi)的各個(gè)時(shí)間間隔,另一維表示所述屬性名稱的屬性列中的各個(gè)屬性數(shù)據(jù),統(tǒng)計(jì)表中的內(nèi)容表示在某個(gè)時(shí)間間隔內(nèi)存在某個(gè)屬性數(shù)據(jù)的實(shí)體表的名稱;c)進(jìn)行海量數(shù)據(jù)查詢時(shí),若查詢條件中包括經(jīng)過步驟b統(tǒng)計(jì)的屬性名稱,則獲得所述屬性名稱的統(tǒng)計(jì)表,并根據(jù)該統(tǒng)計(jì)表和查詢條件中設(shè)定的時(shí)間區(qū)間獲得在該時(shí)間區(qū)間內(nèi)的實(shí)體表分區(qū)的集合;d)根據(jù)步驟c獲得的實(shí)體表分區(qū)集合縮小海量數(shù)據(jù)查詢范圍,并根據(jù)所述集合中的實(shí)體表分區(qū)進(jìn)行海量數(shù)據(jù)查詢。2.如權(quán)利要求1所述的海量數(shù)據(jù)査詢方法,其特征在于,在步驟c中,若査詢條件中包括多個(gè)經(jīng)過步驟b統(tǒng)計(jì)的屬性名稱,則根據(jù)各個(gè)屬性名稱依次獲得實(shí)體表分區(qū)集合后取交集,且步驟d根據(jù)該交集中的實(shí)體表分區(qū)進(jìn)行海量數(shù)據(jù)查詢。3.如權(quán)利要求1所述的海量數(shù)據(jù)査詢方法,其特征在于,在海量數(shù)據(jù)査詢空閑期間按步驟b所述建立統(tǒng)計(jì)表。4.如權(quán)利要求1或2所述的海量數(shù)據(jù)査詢方法,其特征在于,步驟a和步驟b所述時(shí)間間隔均為天或者小時(shí)。5.如權(quán)利要求1或2所述的海量數(shù)據(jù)查詢方法,其特征在于,步驟b所述時(shí)間區(qū)間為月。6.如權(quán)利要求1或2所述的海量數(shù)據(jù)查詢方法,其特征在于,步驟a對(duì)實(shí)體表進(jìn)行分區(qū)后,在所述實(shí)體表中一個(gè)或多個(gè)屬性名稱的屬性列上建立BITMAP本地索引。7.如權(quán)利要求1或2所述的海量數(shù)據(jù)査詢方法,其特征在于,步驟d進(jìn)行海量數(shù)據(jù)査詢時(shí),分頁(yè)顯示查詢結(jié)果。8.如權(quán)利要求6所述的海量數(shù)據(jù)査詢方法,其特征在于,步驟d根據(jù)所述實(shí)體表分區(qū)的時(shí)間先后按照設(shè)定的順序依次査詢所述分區(qū),當(dāng)在已有査詢結(jié)果的基礎(chǔ)上加上當(dāng)前分區(qū)的查詢結(jié)果滿足分頁(yè)顯示數(shù)量要求時(shí),先顯示結(jié)果再查詢下一分區(qū);當(dāng)不滿足分頁(yè)顯示數(shù)量要求時(shí),先査詢下一分區(qū)直至滿足要求再顯示結(jié)果。全文摘要本發(fā)明公開了一種海量數(shù)據(jù)查詢方法,屬于信息
技術(shù)領(lǐng)域
。本發(fā)明方法包括a)對(duì)海量數(shù)據(jù)實(shí)體表按設(shè)定的時(shí)間間隔進(jìn)行分區(qū);b)建立所述實(shí)體表中屬性名稱的二維統(tǒng)計(jì)表,其中一維表示設(shè)定的時(shí)間區(qū)間內(nèi)的各個(gè)時(shí)間間隔,另一維表示屬性名稱的屬性列中的屬性數(shù)據(jù),統(tǒng)計(jì)表中的內(nèi)容表示在某個(gè)時(shí)間間隔內(nèi)存在某個(gè)屬性數(shù)據(jù)的實(shí)體表的名稱;c)查詢時(shí),若查詢條件中包括經(jīng)統(tǒng)計(jì)的屬性名稱,則根據(jù)該屬性名稱的統(tǒng)計(jì)表和查詢條件中設(shè)定的時(shí)間區(qū)間獲得在該時(shí)間區(qū)間內(nèi)的實(shí)體表分區(qū)的集合;d)根據(jù)該集合縮小海量數(shù)據(jù)查詢范圍再進(jìn)行查詢。本發(fā)明方法可用于諸如電信行業(yè)的計(jì)費(fèi)查詢系統(tǒng)、大型網(wǎng)站交易平臺(tái)等大型系統(tǒng)中的海量數(shù)據(jù)查詢。文檔編號(hào)G06F17/30GK101533406SQ200910081509公開日2009年9月16日申請(qǐng)日期2009年4月10日優(yōu)先權(quán)日2009年4月10日發(fā)明者儲(chǔ)院生申請(qǐng)人:北京銳安科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
海林市| 新化县| 瑞丽市| 兴文县| 宜宾市| 左贡县| 大港区| 云和县| 西城区| 镇赉县| 阿拉善右旗| 休宁县| 沛县| 曲阳县| 江陵县| 墨玉县| 鱼台县| 酒泉市| 恩平市| 乐清市| 嘉定区| 额济纳旗| 德保县| 筠连县| 札达县| 上杭县| 多伦县| 东辽县| 石河子市| 桑植县| 峨山| 太康县| 搜索| 资溪县| 塔河县| 岳池县| 禹城市| 资阳市| 谷城县| 昆山市| 渝北区|