本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,尤其涉及一種數(shù)據(jù)庫數(shù)據(jù)處理方法、裝置及終端。
背景技術(shù):
對于常見的數(shù)據(jù)庫,用戶只能根據(jù)結(jié)構(gòu)化查詢語言(structuredquerylanguage)sql語句或者類似sql語句的形式來執(zhí)行數(shù)據(jù)的查詢。如圖1所示,基于sql的查詢通常包括下述步驟:客戶端發(fā)出sql或者類sql的查詢語句;服務器分析并優(yōu)化用戶輸入的查詢語句;服務器執(zhí)行優(yōu)化后的查詢語句并把查詢結(jié)果返回給客戶端。
受限于sq語句或者類sql語句的表達能力,一些復雜的查詢邏輯難以實現(xiàn)。并且如果數(shù)據(jù)庫中的數(shù)據(jù)以二進制大對象(binarylargeobject,
blob)的形式保存,則難以通過sql語句來進行分析查詢。
技術(shù)實現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明提出了一種數(shù)據(jù)庫數(shù)據(jù)處理方法、裝置及終端。本發(fā)明具體是以如下技術(shù)方案實現(xiàn)的:
第一方面,一種數(shù)據(jù)庫數(shù)據(jù)處理方法,所述方法包括:
獲取客戶端發(fā)出的數(shù)據(jù)查詢請求;根據(jù)所述查詢請求得到過濾器集合;
根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對應的集合以及待查詢數(shù)據(jù)對應的索引;
由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對應的索引對所述待查詢數(shù)據(jù)對應的集合進行第一輪過濾以得到第一目標數(shù)據(jù)對應的集合和第一過濾器集合;所述第一過濾器集合為過濾器集合中無法使用所述待查詢數(shù)據(jù)對應的索引的過濾器所構(gòu)成的集合;
判斷所述第一過濾器集合是否為空;若所述第一過濾器集合不為空,則由所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對應的集合;向客戶端返回第二目標數(shù)據(jù)。
第二方面,一種數(shù)據(jù)庫數(shù)據(jù)處理裝置,所述裝置包括:
數(shù)據(jù)查詢請求獲取模塊,用于獲取客戶端發(fā)出的數(shù)據(jù)查詢請求;根據(jù)所述查詢請求得到過濾器集合;
查詢參數(shù)獲取模塊,用于根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對應的集合以及待查詢數(shù)據(jù)對應的索引;
第一過濾模塊,用于由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對應的索引對所述待查詢數(shù)據(jù)對應的集合進行第一輪過濾以得到第一目標數(shù)據(jù)對應的集合和第一過濾器集合;所述第一過濾器集合為過濾器集合中無法使用所述待查詢數(shù)據(jù)對應的索引的過濾器所構(gòu)成的集合;
判斷模塊,用于判斷所述第一過濾器集合是否為空;
第二過濾模塊,用于由所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對應的集合;
數(shù)據(jù)返回模塊,用于向客戶端返回第二目標數(shù)據(jù)。
第三方面,一種終端,所述終端包括上述的裝置。
本發(fā)明提供了一種數(shù)據(jù)庫數(shù)據(jù)處理方法、裝置及終端,具有如下有益效果:
本發(fā)明提供的數(shù)據(jù)庫數(shù)據(jù)處理方法,能夠允許用戶自行實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)處理邏輯,從而最大化數(shù)據(jù)處理過程的可定制程度。用戶通過自行定制數(shù)據(jù)庫數(shù)據(jù)處理邏輯可以在復雜特殊的場景中對數(shù)據(jù)庫數(shù)據(jù)進行處理,即便對于不容易被解析的二進制大對象,也可以通過用戶自行定制的數(shù)據(jù)處理邏輯高效地進行處理。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它附圖。
圖1是本發(fā)明背景技術(shù)提供的基于sql的查詢方法流程圖;
圖2是本發(fā)明實施例提供的一種數(shù)據(jù)庫數(shù)據(jù)處理方法的應用環(huán)境圖;
圖3是本發(fā)明實施例提供的數(shù)據(jù)庫數(shù)據(jù)處理方法流程圖;
圖4是本發(fā)明另一實施例提供的數(shù)據(jù)庫數(shù)據(jù)處理方法流程圖;
圖5是本發(fā)明實施例提供的或關(guān)系下進行第二輪過濾的方式流程圖;
圖6是本發(fā)明實施例提供的另一種或關(guān)系下進行第二輪過濾的方式流程圖;
圖7是本發(fā)明實施例提供的與關(guān)系過濾器的過濾方法流程圖;
圖8是本發(fā)明實施例提供的或關(guān)系過濾器的過濾方法流程圖;
圖9是本發(fā)明實施例提供的另一或關(guān)系過濾器方法流程圖;
圖10是本發(fā)明實施例提供的一種數(shù)據(jù)庫數(shù)據(jù)處理裝置框圖;
圖11是本發(fā)明實施例提供的第二過濾模塊框圖;
圖12是本發(fā)明實施例提供的另一第二過濾模塊框圖;
圖13是本發(fā)明實施例提供的一種服務器結(jié)構(gòu)示意圖;
圖14是本發(fā)明實施例提供的終端示意圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
本發(fā)明實施例提供了一種數(shù)據(jù)庫數(shù)據(jù)處理方法的應用環(huán)境圖,所述數(shù)據(jù)庫數(shù)據(jù)處理方法可以應用于常見的客戶端-服務器架構(gòu)的系統(tǒng),也可以應用于如圖2所示的由終端110和服務器集群120構(gòu)成的分布式系統(tǒng)之中。服務器集群120可以包括多個服務器節(jié)點。終端110可以有多個,比如終端110(1)和終端110(2)。
通常情況下,數(shù)據(jù)庫使用結(jié)構(gòu)化查詢語言sql語句來訪問,然而sql語句的表達能力較弱,因此,在很多的較為復雜應用場景下使用sql語句實現(xiàn)數(shù)據(jù)的訪問較為困難,并且數(shù)據(jù)訪問過程的性能也難以保證,以游戲開發(fā)為例,游戲后臺開發(fā)的過程中有些特殊場景下對數(shù)據(jù)的訪問非常復雜或者很難實現(xiàn),因此sql語句的數(shù)據(jù)訪問能力對于游戲開發(fā)者而言局限性較大,有必要實現(xiàn)一種數(shù)據(jù)庫數(shù)據(jù)處理方法以使得用戶可以隨意解析數(shù)據(jù),充分利用索引,定制自己的查詢邏輯。
在上述的應用環(huán)境中,本發(fā)明實施例提供一種數(shù)據(jù)庫數(shù)據(jù)處理方法,所述方法可以應用于如圖2所示的應用環(huán)境之中。
所述方法如圖3所示,具體包括:
s101.獲取客戶端發(fā)出的數(shù)據(jù)查詢請求;根據(jù)所述查詢請求得到過濾器集合。
過濾器集合表達了數(shù)據(jù)庫查詢的條件,相當于sql語句查詢時where后面的條件,過濾器集合也可以包含多個過濾器,此時,過濾器集合表達了多個查詢條件的組合。
具體地,所述過濾器能夠由客戶端預先自行定義并上傳至服務器進行保存,也可以由服務器實現(xiàn)并允許客戶端自行選擇調(diào)用。在獲取到數(shù)據(jù)查詢請求后,服務器根據(jù)數(shù)據(jù)查詢請求調(diào)用過濾器集合(或過濾器)進行查詢。
在一個可行的實施例中,客戶端發(fā)出的查詢請求中即包括過濾器集合。
在另一個可行的實施例中,也可由客戶端發(fā)出數(shù)據(jù)查詢請求,所述查詢請求中使用where標識具體的查詢條件,由服務器根據(jù)所述查詢條件獲取其對應的過濾器集合。
s102.根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對應的集合以及待查詢數(shù)據(jù)對應的索引。
待查詢數(shù)據(jù)對應的集合即執(zhí)行所述數(shù)據(jù)查詢請求的數(shù)據(jù)源,所述待查詢數(shù)據(jù)對應的索引為所述數(shù)據(jù)源中的索引,根據(jù)所述索引在所述數(shù)據(jù)源中查詢能夠提升查詢速率。進一步地,所述索引可以僅對數(shù)據(jù)源的某個或某幾個字段有效。
s103.由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對應的索引對所述待查詢數(shù)據(jù)對應的集合進行第一輪過濾以得到第一目標數(shù)據(jù)對應的集合和第一過濾器集合。
第一輪過濾為基于索引的過濾,從而能夠充分利用數(shù)據(jù)源中已有的索引提升過濾速率。所述第一過濾器集合為過濾器集合中無法使用所述待查詢數(shù)據(jù)對應的索引的過濾器所構(gòu)成的集合。以所述過濾器集合包括a集合和b集合為例,a集合能夠利用索引進行數(shù)據(jù)過濾,而b集合不能利用索引進行數(shù)據(jù)過濾。在步驟s103中僅僅基于a集合進行第一輪過濾并得到第一目標數(shù)據(jù)對應的集合??梢姷谝荒繕藬?shù)據(jù)對應的集合滿足a集合的數(shù)據(jù)查詢要求而不一定滿足b集合的數(shù)據(jù)查詢要求。b集合在步驟s103并未被執(zhí)行,從而構(gòu)成了第一過濾器集合以便于在步驟s104中使用。
s104.判斷所述第一過濾器集合是否為空。
s105.若所述第一過濾器集合為空,則向客戶端返回第一目標數(shù)據(jù)。
若第一過濾器集合為空,則說明步驟s101中得到的過濾器集合中的全部過濾器均已經(jīng)在步驟s103中被執(zhí)行,得到的第一目標數(shù)據(jù)即為查詢的最終結(jié)果。
s106.若所述第一過濾器集合不為空,則根據(jù)所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對應的集合;向客戶端返回第二目標數(shù)據(jù)。
若第一過濾器集合不為空,則存在未被執(zhí)行的過濾器,因此,需要進行第二輪過濾以得到最終的查詢結(jié)果(第二目標數(shù)據(jù))。
本發(fā)明實施例提供了一種數(shù)據(jù)庫數(shù)據(jù)處理方法,能夠允許用戶自行實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)處理(查詢)邏輯,從而最大化可定制程度。用戶通過自行定制數(shù)據(jù)庫數(shù)據(jù)處理邏輯可以在復雜特殊的場景中對數(shù)據(jù)庫數(shù)據(jù)進行處理,即便對于不容易被解析的二進制大對象,也可以通過用戶自行定制的數(shù)據(jù)庫數(shù)據(jù)處理邏輯高效地進行處理。
本發(fā)明另一個實施例提供一種數(shù)據(jù)庫數(shù)據(jù)處理方法,所述方法可以應用于如圖2所示的應用環(huán)境之中。
具體地,在所述應用環(huán)境之中的各個節(jié)點均可以配置數(shù)據(jù)庫,數(shù)據(jù)庫中以數(shù)據(jù)對象的形式組織數(shù)據(jù),每個數(shù)據(jù)對象均由鍵和值構(gòu)成。具體地,在所述數(shù)據(jù)庫中以cache表示數(shù)據(jù)庫表,以entry表示數(shù)據(jù)對象,每個entry均由key(鍵)和值(value)構(gòu)成。
在上述應用環(huán)境下,所述方法如圖4所示,具體包括:
s201.獲取客戶端發(fā)出的數(shù)據(jù)查詢請求;根據(jù)所述查詢請求得到過濾器集合。
s202.根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引。
具體地,所述過濾器包括用于根據(jù)索引進行過濾的第一過濾函數(shù)(由applyindex接口實現(xiàn))和不使用索引直接進行過濾的第二過濾函數(shù)(由evaluateentry接口實現(xiàn))。
s203.由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對象對應的索引對所述鍵集合進行第一輪過濾以得到第一目標數(shù)據(jù)對象的鍵集合和第一過濾器集合。
具體地,服務端參與查詢的所有數(shù)據(jù)和所有索引作為參數(shù)調(diào)用所述過濾器集合,在步驟s203的具體執(zhí)行過程中,使用過濾器集合中每個過濾器的applyindex接口,目的是判斷過濾器是否可以利用索引進行過濾,并對執(zhí)行能夠利用索引的過濾器以得到第一目標數(shù)據(jù)對象的鍵集合;而不能利用索引執(zhí)行查詢的過濾器被歸入第一過濾器集合。
s204.判斷所述第一過濾器集合是否為空。
s205.若所述第一過濾器集合為空,則根據(jù)第一目標數(shù)據(jù)對象的鍵集合得到第一目標數(shù)據(jù)對象,向客戶端返回所述第一目標數(shù)據(jù)對象。
s206.若所述第一過濾器集合不為空,則根據(jù)所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。
在步驟s203中可以得到利用索引的過濾器的過濾結(jié)果,有另外一部分不能利用索引的過濾器還沒有執(zhí)行,只能通過第二輪過濾來執(zhí)行,而執(zhí)行過程中因為不能使用索引,因此調(diào)用的是過濾器的evaluateentry接口,并最終得到第二目標數(shù)據(jù)對象的鍵集合。
具體地,若所述過濾器集合中的過濾器之間均為與關(guān)系,則所述根據(jù)所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合包括:
由所述第一過濾器對所述第一目標數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。
具體地,若所述過濾器集合中的過濾器之間均為或關(guān)系,則第二輪過濾過程有兩種執(zhí)行方式。
如圖5所示,第一種或關(guān)系下進行第二輪過濾的方式包括:
s1.由所述第一過濾器對所述待查詢數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到中間數(shù)據(jù)對象的鍵集合。
s2.取所述中間數(shù)據(jù)對象的鍵集合與所述第一目標數(shù)據(jù)對象的鍵集合的并集,生成第二目標數(shù)據(jù)對象的鍵集合。
如圖6所示,第二種或關(guān)系下進行第二輪過濾的方式包括:
s10.根據(jù)第一目標數(shù)據(jù)對象的鍵集合生成中間過濾器。
s20.將所述中間過濾器加入所述第一過濾器集合以使得所述中間過濾器與所述第一過濾集合中的其它過濾器之間為或關(guān)系。
s30.由所述第一過濾器對所述待查詢數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。
s207.根據(jù)第二目標數(shù)據(jù)對象的鍵集合得到第二目標數(shù)據(jù)對象,向客戶端返回第二目標數(shù)據(jù)對象。
在上述數(shù)據(jù)處理方法中,雖然數(shù)據(jù)和索引都在服務端,但是通過用戶在客戶端自定義過濾器的語義和接口并將過濾器上傳至服務器,用戶也可以通自行實現(xiàn)查詢邏輯,從而最大化在數(shù)據(jù)處理過程中查詢邏輯的可定制程度。
進一步地,過濾器集合中的各個過濾器之間可以為與關(guān)系(類似sql語句中的與條件“wherea>1andb<5”),也可以為或關(guān)系(類似sql語句中的或條件wherea>1orb<5),獲取與關(guān)系和或關(guān)系兼而有之。而對于過濾器集合中各個過濾器的邏輯關(guān)系不同,相應地過濾器集合執(zhí)行過濾的方法也是不同的。
過濾器集合包括一個或多個過濾器,過濾器集合和過濾器均可由filter表示。本發(fā)明實施例中提供兩種方法來執(zhí)行基于過濾器集合的過濾過程(s202和s205):
(1)遞歸執(zhí)行過濾過程。
以過濾器集合包括三個過濾器a、b、c為例,三個過濾器關(guān)系為a&&b||c,則首先a&&b生成一個與關(guān)系過濾器,所述與關(guān)系過濾器與過濾器c又生成了或關(guān)系過濾器,在設(shè)置與關(guān)系過濾器和或關(guān)系過濾器的過濾方法的基礎(chǔ)上通過逐層遞歸即可實現(xiàn)基于過濾器集合的過濾過程。
具體地,與關(guān)系過濾器可被表述為filter1&&filter2,或關(guān)系過濾器可被表述為filter1||filter2。
(2)將過濾器集合中各個過濾器的關(guān)系均轉(zhuǎn)化為與關(guān)系或者或關(guān)系,按照預設(shè)順序逐個過濾器進行過濾,最終得到基于過濾器集合的過濾結(jié)果。
具體地,為了更清晰描述本發(fā)明實施例中所述的數(shù)據(jù)處理方法,本發(fā)明實施例給出與過濾器相關(guān)的數(shù)據(jù)結(jié)構(gòu)以及相關(guān)語義的描述:
(1)過濾器可以由用戶自行定義,過濾器通過邏輯關(guān)系相互組織在一起還可以構(gòu)成過濾器集合。具體地,通過實現(xiàn)filter的接口evaluateentry和applyindex來定制過濾器。
filter接口的定義如下:
publicinterfacefilter{
publicbooleanevaluateentry(java.util.map.entryentry);
publicfilterapplyindex(mapindexmap,setkeyset);
}
通過實現(xiàn)filter接口來定義自己的查詢邏輯:
publicstaticclassmyfilterimplementsfilter{
publicmyfilter(){
}
@override//用戶通過重寫實現(xiàn)evaluateentry的自定義
publicbooleanevaluateentry(java.util.map.entryentry){
......
}
@override//用戶通過重寫實現(xiàn)applyindex的自定義
publicfilterapplyindex(mapindexmap,setkeyset){
......
}
}
其中,evaluateentry接口的參數(shù)是每個entry對象(包含key和value的數(shù)據(jù)對象),evaluateentry返回true表示此entry對象符合filter的查詢條件,返回false表示不符合filter查詢條件。用戶可以在此函數(shù)中定制自己的查詢邏輯。
applyindex接口的第一個參數(shù)indexmap是索引數(shù)據(jù),第二個參數(shù)keyset是filter需要過濾的鍵集合。返回值表示本filter經(jīng)過所有索引過濾后還剩下的不能利用索引的部分filter。比如一個過濾器集合(包含多個過濾器),只有部分過濾器的查詢條件可以利用索引,那返回值為其余部分的過濾器構(gòu)成的過濾器集合。如果返回null,表示本filter包含的所有查詢條件使用索引就可以完成數(shù)據(jù)篩選,如果返回非null,表示本filter存在不能利用索引的過濾器集合。
(2)在客戶發(fā)布數(shù)據(jù)查詢請求時,可以在所述數(shù)據(jù)查詢請求中附帶其自定義的過濾器集合filter。客戶端把filter對應的對象傳遞到服務端后,服務端就會在相應的時機調(diào)用其接口,從而實現(xiàn)數(shù)據(jù)的定制查詢。
(3)服務器還可以向用戶提供與常用的sql中的查詢條件對應的簡單filter,便于用戶直接調(diào)用。比如類似“wherenum>3”條件的greaterfilter:
greaterfilterf=newgreaterfilter(newreflectionextractor("getnum"),3);
對于提供的filter用戶只需要直接使用即可。類似的filter還有allfilter、andfilter、betweenfilter、equalsfilter、lessfilter、likefilter、limitfilter等。
在對于filter語義和數(shù)據(jù)結(jié)構(gòu)進行解釋的基礎(chǔ)上,如圖7所示,本發(fā)明實施例提供一種與關(guān)系過濾器(過濾器集合,可被表述為filter1&&filter2,其中filter1、filter2也可以為過濾器集合)的過濾方法,所述方法包括:
s100.獲取執(zhí)行過濾的待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引。
s200.使用所述待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引作為參數(shù)調(diào)用當前的與關(guān)系過濾器(filter1&&filter2)的applyindex接口。
具體地,在執(zhí)行filter1&&filter2的applyindex接口的過程中,首先取filter1,判斷其applyindex能夠執(zhí)行,若不能,則將filter1加入中間過濾集合restfilter,若能,則執(zhí)行filter1的applyindex,得到滿足filter1過濾條件的數(shù)據(jù)對應的鍵,將其加入中間鍵集合filterkeyset,所述中間鍵集合filterkeyset為滿足filter1&&filter2中某一部分過濾條件的數(shù)據(jù)的鍵對應的集合;
然后執(zhí)行filter2,判斷其applyindex能夠執(zhí)行,若不能,則將filter2加入中間過濾集合restfilter,若能,則由中間鍵集合filterkeyset作為參數(shù)調(diào)用filter2的applyindex,得到滿足filter2過濾條件的數(shù)據(jù)對應的鍵,將其加入中間鍵集合filterkeyset。
s300.判斷所述當前的與關(guān)系過濾器的applyindex接口是否能夠完成查詢。
具體地,獲取filter1&&filter2的applyindex接口的返回值,判斷其是否為null,若是,則說明filter1&&filter2包含的所有查詢條件使用索引就可以完成數(shù)據(jù)篩選,因此根據(jù)得到的過濾結(jié)果(中間鍵集合filterkeyset)即可直接生成查詢結(jié)果集。若非null,則還需進行后續(xù)處理。
s400.若能夠完成查詢,則得到過濾后的鍵集合。
具體地,步驟s200中的到的中間鍵集合filterkeyset即為過濾后的鍵集合。
s500.根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
s600.若不能夠完成查詢,則得到過濾后的中間鍵集合和中間過濾集合。
由于filter1&&filter2為與關(guān)系過濾器,因此,只需在中間鍵集合filterkeyset中獲取滿足restfilter要求的數(shù)據(jù)即可得到最終的結(jié)果。
s700.以所述中間鍵集合對應的中間數(shù)據(jù)對象集合作為參數(shù),調(diào)用所述中間過濾集合中的過濾器的evaluateentry接口。
由于restfilter不能使用索引,因此需要使用evaluateentry接口,而evaluateentry的參數(shù)為數(shù)據(jù)對象(entry),因此,本步驟中首先將filterkeyset轉(zhuǎn)化為其對應的數(shù)據(jù)對象,得到中間數(shù)據(jù)對象集合filterentryset,然后方可使用evaluateentry。具體執(zhí)行過程如下:
通過遍歷filterentryset,其中的每個entry作為參數(shù)調(diào)用restfilter的evaluateentry接口,如果返回值為true,則將entry加入過濾后的鍵集合,如果返回false,則不加入過濾后的鍵集合。
s800.得到過濾后的鍵集合,根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
在對于filter語義和數(shù)據(jù)結(jié)構(gòu)進行解釋的基礎(chǔ)上,如圖8所示,本發(fā)明實施例提供一種或關(guān)系過濾器(過濾器集合,可被表述為filter1||filter2,其中filter1、filter2也可以為過濾器集合)的過濾方法,所述方法包括:
p100.獲取執(zhí)行過濾的待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引。
p200.使用所述待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引作為參數(shù)調(diào)用當前的或關(guān)系過濾器的applyindex接口。
本方法執(zhí)行伊始,當前的或關(guān)系過濾器為filter1||filter2。
以當前的或關(guān)系過濾器為filter1||filter2為例,在執(zhí)行filter1||filter2的applyindex接口的過程中,首先取filter1,判斷其applyindex能夠執(zhí)行,若不能,則將filter1加入中間過濾集合restfilter,若能,則執(zhí)行filter1的applyindex,得到滿足filter1過濾條件的數(shù)據(jù)對應的鍵,將其加入目標數(shù)據(jù)鍵集合matchkeyset,所述目標數(shù)據(jù)鍵集合matchkeyset為滿足filter1||filter2過濾條件的數(shù)據(jù)的鍵對應的集合;
然后執(zhí)行filter2,判斷其applyindex能夠執(zhí)行,若不能,則將filter2加入中間過濾集合restfilter,若能,則由待查詢數(shù)據(jù)對象的鍵集合減去目標數(shù)據(jù)鍵集合matchkeyset作為參數(shù)調(diào)用filter2的applyindex,得到滿足filter2過濾條件的數(shù)據(jù)對應的鍵,將其加入目標數(shù)據(jù)鍵集合matchkeyset。
p300.判斷所述當前的或關(guān)系過濾器的applyindex接口是否能夠完成查詢。
本方法執(zhí)行伊始,當前的或關(guān)系過濾器為filter1||filter2。
以當前的或關(guān)系過濾器為filter1||filter2為例,獲取filter1||filter2的applyindex接口的返回值,判斷其是否為null(中間過濾集合restfilter為空的情況),若是,則說明filter1||filter2包含的所有查詢條件使用索引就可以完成數(shù)據(jù)篩選,因此根據(jù)得到的過濾結(jié)果(目標數(shù)據(jù)鍵集合matchkeyset)即可直接生成查詢結(jié)果集。若非null(中間過濾集合restfilter不為空的情況),則還需進行后續(xù)處理。
p400.若能夠完成查詢,則得到過濾后的鍵集合。
具體地,步驟p200中的到的目標數(shù)據(jù)鍵集合matchkeyset即為過濾后的鍵集合。
p500.根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
p600.若不能夠完成查詢,則判斷目標數(shù)據(jù)鍵集合matchkeyset是否為空。
本方法執(zhí)行伊始,當前的或關(guān)系過濾器為filter1||filter2。
以當前的或關(guān)系過濾器為filter1||filter2為例,若matchkeyset不為空,則說明在步驟p200中利用索引得到了一部分滿足filter1||filter2的數(shù)據(jù)對應的鍵;若matchkeyset為空,則說明filter1||filter2均不能使用索引,或者使用索引的部分沒有得到滿足filter1||filter2的數(shù)據(jù)記錄。
p700.若目標數(shù)據(jù)鍵集合matchkeyset不為空,則根據(jù)目標數(shù)據(jù)鍵集合matchkeyset構(gòu)建一個過濾器,所述過濾器與所述中間過濾集合restfilter構(gòu)建新的或關(guān)系過濾器,將當前的或關(guān)系過濾器設(shè)置為所述新的或關(guān)系過濾器,并重復執(zhí)行步驟p100。
具體地,所述根據(jù)目標數(shù)據(jù)鍵集合matchkeyset構(gòu)建過濾器可以為filter3,filter3用于表述查詢語句wherekeyinmatchkeyset,其過濾條件為:在待查詢數(shù)據(jù)對象的鍵集合的所有鍵中位于目標數(shù)據(jù)鍵集合matchkeyset的鍵。組合出的新的或關(guān)系過濾器為filter3||restfilter。
p800.若目標數(shù)據(jù)鍵集合matchkeyset為空,則將當前的或關(guān)系過濾器設(shè)置為restfilter,并調(diào)用所述restfilter的evaluateentry接口。
由于restfilter不能使用索引,因此需要使用evaluateentry接口,而evaluateentry的參數(shù)為數(shù)據(jù)對象(entry),因此,本步驟中首先將待查詢數(shù)據(jù)對象的鍵集合轉(zhuǎn)化為其對應的數(shù)據(jù)對象,得到待查詢數(shù)據(jù)對象集合entryset,然后方可使用evaluateentry。具體執(zhí)行過程如下:
通過遍歷entryset,其中的每個entry作為參數(shù)調(diào)用restfilter的evaluateentry接口,如果返回值為true,則將entry加入過濾后的目標數(shù)據(jù)鍵集合matchkeyset,如果返回false,則不加入目標數(shù)據(jù)鍵集合matchkeyset,所述目標數(shù)據(jù)鍵集合matchkeyset即為過濾到的鍵集合。
p900.得到過濾后的鍵集合,根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
進一步地,在上一個實現(xiàn)或關(guān)系過濾器的方法的基礎(chǔ)上,本發(fā)明實施例還提供了另一種實現(xiàn)或關(guān)系過濾器的方法,如圖9所示,所述方法包括:
t100.獲取執(zhí)行過濾的待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引。
t200.使用所述待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引作為參數(shù)調(diào)用當前的或關(guān)系過濾器的applyindex接口。
以當前的或關(guān)系過濾器為filter1||filter2為例,在執(zhí)行filter1||filter2的applyindex接口的過程中,首先取filter1,判斷其applyindex能夠執(zhí)行,若不能,則將filter1加入中間過濾集合restfilter,若能,則執(zhí)行filter1的applyindex,得到滿足filter1過濾條件的數(shù)據(jù)對應的鍵,將其加入目標數(shù)據(jù)鍵集合matchkeyset,所述目標數(shù)據(jù)鍵集合matchkeyset為滿足filter1||filter2過濾條件的數(shù)據(jù)的鍵對應的集合;
然后執(zhí)行filter2,判斷其applyindex能夠執(zhí)行,若不能,則將filter2加入中間過濾集合restfilter,若能,則由待查詢數(shù)據(jù)對象的鍵集合減去目標數(shù)據(jù)鍵集合matchkeyset作為參數(shù)調(diào)用filter2的applyindex,得到滿足filter2過濾條件的數(shù)據(jù)對應的鍵,將其加入目標數(shù)據(jù)鍵集合matchkeyset。
t300.判斷所述當前的或關(guān)系過濾器的applyindex接口是否能夠完成查詢。
以當前的或關(guān)系過濾器為filter1||filter2為例,獲取filter1||filter2的applyindex接口的返回值,判斷其是否為null(中間過濾集合restfilter為空的情況),若是,則說明filter1||filter2包含的所有查詢條件使用索引就可以完成數(shù)據(jù)篩選,因此根據(jù)得到的過濾結(jié)果(目標數(shù)據(jù)鍵集合matchkeyset)即可直接生成查詢結(jié)果集。若非null(中間過濾集合restfilter不為空的情況),則還需進行后續(xù)處理。
t400.若能夠完成查詢,則得到過濾后的鍵集合。
具體地,步驟t200中的到的目標數(shù)據(jù)鍵集合matchkeyset即為過濾后的鍵集合。
t500.根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
t600.若不能夠完成查詢,則判斷目標數(shù)據(jù)鍵集合matchkeyset是否為空。
t700.若目標數(shù)據(jù)鍵集合matchkeyset不為空,則根據(jù)中間過濾集合restfilter繼續(xù)進行過濾,得到的過濾結(jié)果與所述matchkeyset取并集得到過濾后的集合。
t800.若目標數(shù)據(jù)鍵集合matchkeyset為空,則將當前的或關(guān)系過濾器設(shè)置為restfilter,并調(diào)用所述restfilter的evaluateentry接口以得到過濾后的集合。
具體地,restfilter的執(zhí)行過程可以參見上一個或關(guān)系過濾器的過濾過程。
t900.得到過濾后的鍵集合,根據(jù)所述鍵集合得到其對應的數(shù)據(jù)對象集合,并根據(jù)數(shù)據(jù)對象集合生成查詢結(jié)果集并將所述查詢結(jié)果集反饋至客戶端。
進一步地,為提升用戶對于服務器端數(shù)據(jù)庫的定制化操作,本發(fā)明實施例還提供了除去數(shù)據(jù)查詢外的其它數(shù)據(jù)處理邏輯,所述數(shù)據(jù)處理邏輯還包括數(shù)據(jù)對象管理表創(chuàng)建邏輯、索引創(chuàng)建邏輯和/或數(shù)據(jù)庫中的數(shù)據(jù)對象變更邏輯,上述數(shù)據(jù)處理邏輯均可由用于在客戶端定義,然后傳輸至服務器端由服務器進行執(zhí)行。
具體地,對于上述數(shù)據(jù)處理邏輯,本發(fā)明實施例給出如下示例:
(1)數(shù)據(jù)對象管理表創(chuàng)建邏輯
flamecachecache=cachefactory.getcache(“cache_1”);//cache相當于數(shù)據(jù)庫表
(2)數(shù)據(jù)庫中的數(shù)據(jù)對象變更邏輯
以寫入數(shù)據(jù)對象為例:
valuevalue_1=newvalue();
cache.put(“key_1”,value_1);//cache為數(shù)據(jù)庫表
假設(shè)value的定義為:
publicclassvalue{
privatestringname;
privatelongtimestamp;
privatecollection<string>stringcol=newlinkedlist<string>();
publiclonggettimestamp(){
returntimestamp;
}
......
}
(3)索引創(chuàng)建邏輯:
cache.addindex(newreflectionextractor("gettimestamp"),true);
創(chuàng)建索引的字段采用reflectionextractor提取器的方式,其中的gettimestamp對應value定義里面的gettimestamp函數(shù),這樣可以針對gettimestamp字段創(chuàng)建數(shù)據(jù)庫索引。addindex的第二個參數(shù)說明需要創(chuàng)建的索引是否是排序索引,true表示建立排序索引,false表示建立非排序索引。
本發(fā)明實施例不僅提供了具體的基于過濾器的數(shù)據(jù)查詢方法,還一并提供了一種實現(xiàn)與過濾器的方法、遞歸實現(xiàn)或過濾器的方法以及非遞歸實現(xiàn)或過濾器的方法,從而在查詢方式上給用戶帶來更大的查詢定制性,用戶通過實現(xiàn)filter并將filter傳輸至服務器間接控制了數(shù)據(jù)庫的查詢過程,在上述查詢過程中甚至能夠自由操縱數(shù)據(jù)庫的數(shù)據(jù)和索引,從而使得查詢更直接更靈活,也更容易處理復雜特殊的查詢場景,即使數(shù)據(jù)庫中的數(shù)據(jù)被保存為二進制大對象或者其它不容易解析的數(shù)據(jù),也可以通過用戶自行編寫filter來解析和查詢。此外,本發(fā)明實施例還提供了其它數(shù)據(jù)處理邏輯,從而最大程度上實現(xiàn)用戶對于數(shù)據(jù)庫的定制化操作。
本發(fā)明的實施例還提供了一種存儲介質(zhì),所述存儲介質(zhì)可設(shè)置于客戶端和/或服務器之中以保存用于實現(xiàn)方法實施例中數(shù)據(jù)庫數(shù)據(jù)處理方法的程序代碼??蛇x地,在本實施例中,上述存儲介質(zhì)可以位于計算機網(wǎng)絡的多個網(wǎng)絡設(shè)備中的至少一個網(wǎng)絡設(shè)備。可選地,在本實施例中,上述存儲介質(zhì)可以包括但不限于:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
本發(fā)明還提供一種數(shù)據(jù)庫數(shù)據(jù)處理裝置,如圖10所述,所述裝置包括:
數(shù)據(jù)查詢請求獲取模塊301,用于獲取客戶端發(fā)出的數(shù)據(jù)查詢請求;根據(jù)所述查詢請求得到過濾器集合。可用于執(zhí)行方法實施例步驟s101和s201。
查詢參數(shù)獲取模塊302,用于根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對應的集合以及待查詢數(shù)據(jù)對應的索引。可用于執(zhí)行方法實施例步驟s102和s202。
第一過濾模塊303,用于由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對應的索引對所述待查詢數(shù)據(jù)對應的集合進行第一輪過濾以得到第一目標數(shù)據(jù)對應的集合和第一過濾器集合;所述第一過濾器集合為過濾器集合中無法使用所述待查詢數(shù)據(jù)對應的索引的過濾器所構(gòu)成的集合。可用于執(zhí)行方法實施例步驟s103和s203。
判斷模塊304,用于判斷所述第一過濾器集合是否為空??捎糜趫?zhí)行方法實施例步驟s104和s204。
第二過濾模塊305,用于根據(jù)所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對應的集合??捎糜趫?zhí)行方法實施例步驟s106和s206。
數(shù)據(jù)返回模塊306,用于向客戶端返回第一目標數(shù)據(jù)或第二目標數(shù)據(jù)??捎糜趫?zhí)行方法實施例步驟s105、s205和s207。
進一步地,在一個可行的實施方式中,所述查詢參數(shù)獲取模塊用于根據(jù)所述數(shù)據(jù)查詢請求獲取待查詢數(shù)據(jù)對象的鍵集合以及待查詢數(shù)據(jù)對象對應的索引;
所述第一過濾模塊用于由所述過濾器集合根據(jù)所述待查詢數(shù)據(jù)對象對應的索引對所述鍵集合進行第一輪過濾以得到第一目標數(shù)據(jù)對象的鍵集合和第一過濾器集合;
所述第二過濾模塊用于根據(jù)所述第一過濾器集合繼續(xù)進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合;向客戶端返回第二目標數(shù)據(jù)對象;
數(shù)據(jù)返回模塊,用于根據(jù)第一目標數(shù)據(jù)對象的鍵集合得到第一目標數(shù)據(jù)對象并向客戶端返回第一目標數(shù)據(jù)對象,或,根據(jù)第二目標數(shù)據(jù)對象的鍵集合得到第二目標數(shù)據(jù)對象并向客戶端返回第二目標數(shù)據(jù)對象。
具體地,請參考圖11,所述第二過濾模塊305包括:
第一過濾單元3051,用于由所述第一過濾器集合對所述第一目標數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。
第二過濾單元3052,用于由所述第一過濾器集合對所述待查詢數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到中間數(shù)據(jù)對象的鍵集合??捎糜趫?zhí)行方法實施例步驟s1。
數(shù)據(jù)結(jié)果獲取單元3053,用于取所述中間數(shù)據(jù)對象的鍵集合與所述第一目標數(shù)據(jù)對象的鍵集合的并集,生成第二目標數(shù)據(jù)對象的鍵集合??捎糜趫?zhí)行方法實施例步驟s2。
具體地,在其它的可行的實施例中,請參考圖12,所述第二過濾模塊305包括:
第一過濾單元3051,用于由所述第一過濾器集合對所述第一目標數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。
過濾器生成單元3054,用于根據(jù)第一目標數(shù)據(jù)對象的鍵集合生成中間過濾器??捎糜趫?zhí)行方法實施例步驟s10。
第一過濾器集合變更單元3055,用于將所述中間過濾器加入所述第一過濾器集合以使得所述中間過濾器與所述第一過濾集合中的其它過濾器之間為或關(guān)系。可用于執(zhí)行方法實施例步驟s20。
第三過濾單元3056,用于由所述第一過濾器對所述待查詢數(shù)據(jù)對象的鍵集合進行第二輪過濾以得到第二目標數(shù)據(jù)對象的鍵集合。可用于執(zhí)行方法實施例步驟s30。
本發(fā)明的裝置實施例中所述的裝置均與方法實施例基于同樣地發(fā)明構(gòu)思。
具體地,圖13是本發(fā)明實施例提供的一種服務器結(jié)構(gòu)示意圖,所述服務器結(jié)構(gòu)可以設(shè)置于上述裝置之中。該服務器800可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個或一個以上中央處理器(centralprocessingunits,cpu)822(例如,一個或一個以上處理器)和存儲器832,一個或一個以上存儲應用程序842或數(shù)據(jù)844的存儲介質(zhì)830(例如一個或一個以上海量存儲設(shè)備)。其中,存儲器832和存儲介質(zhì)830可以是短暫存儲或持久存儲。存儲在存儲介質(zhì)830的程序可以包括一個或一個以上模塊(圖示未示出),每個模塊可以包括對服務器中的一系列指令操作。更進一步地,中央處理器822可以設(shè)置為與存儲介質(zhì)830通信,在服務器800上執(zhí)行存儲介質(zhì)830中的一系列指令操作。服務器800還可以包括一個或一個以上電源826,一個或一個以上有線或無線網(wǎng)絡接口850,一個或一個以上輸入輸出接口858,和/或,一個或一個以上操作系統(tǒng)841,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。上述方法實施例所執(zhí)行的步驟可以基于該圖13所示的服務器結(jié)構(gòu)。
參見圖14,本發(fā)明實施例提供了一種終端,該終端可以用于實施上述實施例中提供的一種數(shù)據(jù)庫數(shù)據(jù)處理方法。具體來講:
所述終端可以包括rf(radiofrequency,射頻)電路110、包括有一個或一個以上計算機可讀存儲介質(zhì)的存儲器120、輸入單元130、顯示單元140、傳感器150、音頻電路160、wifi(wirelessfidelity,無線保真)模塊170、包括有一個或者一個以上處理核心的處理器180、以及電源190等部件。本領(lǐng)域技術(shù)人員可以理解,圖14中示出的終端結(jié)構(gòu)并不構(gòu)成對終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。其中:
rf電路110可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,交由一個或者一個以上處理器180處理;另外,將涉及上行的數(shù)據(jù)發(fā)送給基站。通常,rf電路110包括但不限于天線、至少一個放大器、調(diào)諧器、一個或多個振蕩器、用戶身份模塊(sim)卡、收發(fā)信機、耦合器、lna(lownoiseamplifier,低噪聲放大器)、雙工器等。此外,rf電路110還可以通過無線通信與網(wǎng)絡和其他設(shè)備通信。所述無線通信可以使用任一通信標準或協(xié)議,包括但不限于gsm(globalsystemofmobilecommunication,全球移動通訊系統(tǒng))、gprs(generalpacketradioservice,通用分組無線服務)、cdma(codedivisionmultipleaccess,碼分多址)、wcdma(widebandcodedivisionmultipleaccess,寬帶碼分多址)、lte(longtermevolution,長期演進)、電子郵件、sms(shortmessagingservice,短消息服務)等。
存儲器120可用于存儲軟件程序以及模塊,處理器180通過運行存儲在存儲器120的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理。存儲器120可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、功能所需的應用程序等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)所述終端的使用所創(chuàng)建的數(shù)據(jù)等。此外,存儲器120可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。相應地,存儲器120還可以包括存儲器控制器,以提供處理器180和輸入單元130對存儲器120的訪問。
輸入單元130可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤、鼠標、操作桿、光學或者軌跡球信號輸入。具體地,輸入單元130可包括觸敏表面131以及其他輸入設(shè)備132。觸敏表面131,也稱為觸摸顯示屏或者觸控板,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏表面131上或在觸敏表面131附近的操作),并根據(jù)預先設(shè)定的程式驅(qū)動相應的連接裝置。可選的,觸敏表面131可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標,再送給處理器180,并能接收處理器180發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸敏表面131。除了觸敏表面131,輸入單元130還可以包括其他輸入設(shè)備132。具體地,其他輸入設(shè)備132可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標、操作桿等中的一種或多種。
顯示單元140可用于顯示由用戶輸入的信息或提供給用戶的信息以及所述終端的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標、視頻和其任意組合來構(gòu)成。顯示單元140可包括顯示面板141,可選的,可以采用lcd(liquidcrystaldisplay,液晶顯示器)、oled(organiclight-emittingdiode,有機發(fā)光二極管)等形式來配置顯示面板141。進一步的,觸敏表面131可覆蓋顯示面板141,當觸敏表面131檢測到在其上或附近的觸摸操作后,傳送給處理器180以確定觸摸事件的類型,隨后處理器180根據(jù)觸摸事件的類型在顯示面板141上提供相應的視覺輸出。雖然在圖5中,觸敏表面131與顯示面板141是作為兩個獨立的部件來實現(xiàn)輸入和輸入功能,但是在某些實施例中,可以將觸敏表面131與顯示面板141集成而實現(xiàn)輸入和輸出功能。
所述終端還可包括至少一種傳感器150,比如光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板141的亮度,接近傳感器可在所述終端移動到耳邊時,關(guān)閉顯示面板141和/或背光。作為運動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別終端姿態(tài)的應用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準)、振動識別相關(guān)功能(比如計步器、敲擊)等;至于所述終端還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。
音頻電路160、揚聲器161,傳聲器162可提供用戶與所述終端之間的音頻接口。音頻電路160可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器161,由揚聲器161轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器162將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路160接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器180處理后,經(jīng)rf電路110以發(fā)送給比如另一終端,或者將音頻數(shù)據(jù)輸出至存儲器120以便進一步處理。音頻電路160還可能包括耳塞插孔,以提供外設(shè)耳機與所述終端的通信。
wifi屬于短距離無線傳輸技術(shù),所述終端通過wifi模塊170可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖14示出了wifi模塊170,但是可以理解的是,其并不屬于所述終端的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。
處理器180是所述終端的控制中心,利用各種接口和線路連接整個終端的各個部分,通過運行或執(zhí)行存儲在存儲器120內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器120內(nèi)的數(shù)據(jù),執(zhí)行所述終端的各種功能和處理數(shù)據(jù),從而對終端進行整體監(jiān)控??蛇x的,處理器180可包括一個或多個處理核心;優(yōu)選的,處理器180可集成應用處理器和調(diào)制解調(diào)處理器,其中,應用處理器主要處理操作系統(tǒng)、用戶界面和應用程序等,調(diào)制解調(diào)處理器主要處理無線通信。可以理解的是,上述調(diào)制解調(diào)處理器也可以不集成到處理器180中。
所述終端還包括給各個部件供電的電源190(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器180邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。電源190還可以包括一個或一個以上的直流或交流電源、再充電系統(tǒng)、電源故障檢測電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。
盡管未示出,所述終端還可以包括攝像頭、藍牙模塊等,在此不再贅述。具體在本實施例中,終端的顯示單元是觸摸屏顯示器,終端還包括有存儲器,以及一個或者一個以上的程序,其中一個或者一個以上程序存儲于存儲器中,且經(jīng)配置以由一個或者一個以上處理器執(zhí)行本發(fā)明中方法實施例中的指令。
需要說明的是:上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。