識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本公開涉及數(shù)據(jù)庫領(lǐng)域,更具體地,涉及一種識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法和設(shè)備。
【背景技術(shù)】
[0002]數(shù)據(jù)庫在現(xiàn)代信息技術(shù)中發(fā)揮著重要的作用。作為數(shù)據(jù)庫的重要類型之一,關(guān)系數(shù)據(jù)庫系統(tǒng)被廣泛地應(yīng)用于存儲和檢索各類信息。然而,隨著巨量用戶數(shù)、大數(shù)據(jù)以及云計算的出現(xiàn),關(guān)系數(shù)據(jù)庫已不能很好地滿足日益更新的現(xiàn)代信息技術(shù)的需要。例如,在云計算中所采用的三級架構(gòu)以及數(shù)據(jù)庫級中的動態(tài)橫向擴(kuò)展都不適合使用關(guān)系數(shù)據(jù)庫。針對這一問題,業(yè)界提出了非關(guān)系數(shù)據(jù)庫(NoSQL)。關(guān)系數(shù)據(jù)庫中的表通常存儲格式化的數(shù)據(jù)結(jié)構(gòu),每個記錄的字段的組成相同,即使不是每個記錄都需要所有的字段,關(guān)系數(shù)據(jù)庫也會為每個記錄分配所有的字段,這樣的結(jié)構(gòu)導(dǎo)致關(guān)系數(shù)據(jù)庫的性能瓶頸。相比之下,非關(guān)系數(shù)據(jù)庫雖然也以鍵值對(key-value pair)的方式存儲數(shù)據(jù),但它的結(jié)構(gòu)不固定,不同記錄可以有不一樣的字段,每個記錄可以根據(jù)需要增加或減少一些鍵值對,這樣就不會局限于固定的結(jié)構(gòu),可以減少時間和空間的開銷。對于開發(fā)者而言,利用非關(guān)系數(shù)據(jù)庫,可以通過更靈活的數(shù)據(jù)模型來提高應(yīng)用開發(fā)效率,可以更好地動態(tài)縮放以支持更多的用戶和數(shù)據(jù),以及可以更好地滿足用戶需要高響應(yīng)速度應(yīng)用的期望。
[0003]然而,由于非關(guān)系數(shù)據(jù)庫具有靈活的數(shù)據(jù)模型(例如具有稀疏性、演化性和分層化),且不存在元數(shù)據(jù)目錄,因此目前缺少對非關(guān)系數(shù)據(jù)庫的高效元數(shù)據(jù)管理,從而非關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型的實(shí)施難以得到保證。在關(guān)系數(shù)據(jù)庫中,每一個對象類型(object type)的記錄的模式(Schema)都相同,然而,在非關(guān)系數(shù)據(jù)庫中,同一對象類型下的不同記錄的模式可以不相同。例如,對于某個非關(guān)系數(shù)據(jù)庫Drugstore中的對象類型Drug的5000條記錄,可能存在10、100或更多個模式,并且模式的個數(shù)還可能隨著記錄的增多而繼續(xù)增力口。因此,為了實(shí)施和利用非關(guān)系數(shù)據(jù)庫,需要能夠識別出記錄的模式,以便建立元數(shù)據(jù)庫(metadata repository)。目前,開發(fā)者可以人工建立和使用一個設(shè)計文件來記錄和檢查數(shù)據(jù)模型,但這種方式費(fèi)時費(fèi)力且具有較差的靈活性和擴(kuò)展性。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提出一種可以高效地識別非關(guān)系數(shù)據(jù)庫中的同構(gòu)記錄模式的方法和設(shè)備。
[0005]根據(jù)本發(fā)明的一個方面,提供了一種識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法,包括:根據(jù)記錄的結(jié)構(gòu)屬性將所述記錄分配到一模式桶;以及在所述模式桶內(nèi)識別所述記錄的記錄模式,使得能夠確定所述非關(guān)系數(shù)據(jù)庫中具有同構(gòu)記錄模式的記錄。
[0006]根據(jù)本發(fā)明的另一個方面,提供了一種識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法,包括:根據(jù)用于記錄的最低層的全局編碼表,對所述記錄的最低層的鍵進(jìn)行編碼,并對所述最低層中隸屬于不同父鍵下的鍵分別進(jìn)行排序;以及從所述最低層的上一層起直至最高層重復(fù)執(zhí)行以下步驟:根據(jù)子層的鍵的碼更新其父層中的相應(yīng)父鍵的鍵名;以及根據(jù)用于所述父層的全局編碼表,基于所述父層的經(jīng)更新的鍵名,對所述父層的鍵進(jìn)行編碼,并對所述父層中隸屬于不同父鍵下的鍵分別進(jìn)行排序,其中,所述記錄的記錄模式根據(jù)最高層的鍵經(jīng)編碼和排序后形成的碼序列所識別。
[0007]根據(jù)本發(fā)明的另一個方面,提供了一種識別非關(guān)系數(shù)據(jù)庫中的記錄模式的設(shè)備,包括:模式粗分單元,配置為根據(jù)記錄的結(jié)構(gòu)屬性將所述記錄分配到一模式桶;以及模式細(xì)分單元,配置為在所述模式桶內(nèi)識別所述記錄的記錄模式,使得能夠確定所述非關(guān)系數(shù)據(jù)庫中具有同構(gòu)記錄模式的記錄。
[0008]根據(jù)本發(fā)明的另一個方面,提供了一種識別非關(guān)系數(shù)據(jù)庫中的記錄模式的設(shè)備,包括:第一編碼排序單元,配置為根據(jù)用于記錄的最低層的全局編碼表,對所述記錄的最低層的鍵進(jìn)行編碼,并對所述最低層中隸屬于不同父鍵下的鍵分別進(jìn)行排序;鍵名更新單元,配置為根據(jù)子層的鍵的碼更新其父層中的相應(yīng)父鍵的鍵名;第二編碼排序單元,配置為根據(jù)用于所述父層的全局編碼表,基于所述父層的經(jīng)更新的鍵名,對所述父層的鍵進(jìn)行編碼,并對所述父層中隸屬于不同父鍵下的鍵分別進(jìn)行排序;以及重復(fù)處理單元,配置為控制所述鍵名更新單元和所述第二編碼排序單元從所述最低層的上一層起直至最高層依次進(jìn)行處理,其中,所述記錄的記錄模式根據(jù)最高層的鍵經(jīng)編碼和排序后形成的碼序列所識別。
[0009]根據(jù)本發(fā)明的再一個方面,提供了一種計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品包括可由計算機(jī)讀取并存儲指令的存儲介質(zhì),所述指令可由所述計算機(jī)執(zhí)行,以執(zhí)行根據(jù)本發(fā)明的以上方面提供的用于識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法的各步驟。
[0010]根據(jù)本發(fā)明可以高效地識別出非關(guān)系數(shù)據(jù)庫中的同構(gòu)記錄模式,尤其對于數(shù)據(jù)量巨大且不斷具有數(shù)據(jù)增加或更新的非關(guān)系數(shù)據(jù)庫,本發(fā)明可以大大提高建立或更新非關(guān)系數(shù)據(jù)庫的元數(shù)據(jù)庫的速度,從而提高數(shù)據(jù)庫的性能。
【附圖說明】
[0011]通過結(jié)合附圖對本公開示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯,其中,在本公開示例性實(shí)施方式中,相同的參考標(biāo)號通常代表相同部件。
[0012]圖1示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計算機(jī)系統(tǒng)/服務(wù)器12的框圖。
[0013]圖2示例性地示出了非關(guān)系數(shù)據(jù)庫中的記錄。
[0014]圖3示出了根據(jù)本公開的第一實(shí)施例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法。
[0015]圖4示出了用于說明根據(jù)本公開的第一實(shí)施例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法的示例識別過程。
[0016]圖5示出了根據(jù)本公開的第二實(shí)施例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法。
[0017]圖6示出了根據(jù)記錄的結(jié)構(gòu)屬性對記錄的模式進(jìn)行粗分的示意圖。
[0018]圖7示出了根據(jù)本公開的第二實(shí)施例的第一示例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法。
[0019]圖8示出了根據(jù)本公開的第二實(shí)施例的第二示例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法。
[0020]圖9示出了用于說明根據(jù)本公開的第二實(shí)施例的第二示例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的方法的示例識別過程。
[0021]圖10示出了利用本公開的第二實(shí)施例的第二示例的方法識別一示例非關(guān)系數(shù)據(jù)庫中的記錄模式的性能圖。
[0022]圖11示意性地示出了根據(jù)本公開的第三實(shí)施例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的設(shè)備的框圖。
[0023]圖12示意性地示出了根據(jù)本公開的第四實(shí)施例的識別非關(guān)系數(shù)據(jù)庫中的記錄模式的設(shè)備的框圖。
【具體實(shí)施方式】
[0024]下面將參照附圖更詳細(xì)地描述本公開的優(yōu)選實(shí)施方式。雖然附圖中顯示了本公開的優(yōu)選實(shí)施方式,然而應(yīng)該理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0025]圖1示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計算機(jī)系統(tǒng)/服務(wù)器12的框圖。圖1顯示的計算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個示例,不應(yīng)對本發(fā)明實(shí)施例的功能和使用范圍帶來任何限制。
[0026]如圖1所示,計算機(jī)系統(tǒng)/服務(wù)器12以通用計算設(shè)備的形式表現(xiàn)。計算機(jī)系統(tǒng)/服務(wù)器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統(tǒng)存儲器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器28和處理單元16)的總線18。
[0027]總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強(qiáng)型ISA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0028]計算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計算機(jī)系統(tǒng)/服務(wù)器12訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動的和不可移動的介質(zhì)。
[0029]系統(tǒng)存儲器28可以包括易失性存儲器形式的計算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲器(RAM) 30和/或高速緩存存儲器32。計算機(jī)系統(tǒng)/服務(wù)器12可以進(jìn)一步包括其它可移動/不可移動的、易失性/非易失性計算機(jī)系統(tǒng)存儲介質(zhì)。僅作為舉例,存儲系統(tǒng)34可以用于讀寫不可移動的、非易失性磁介質(zhì)(圖1未顯示,通常稱為“硬盤驅(qū)動器”)。盡管圖1中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動器,以及對可移動非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動器。在這些情況下,每個驅(qū)動器可以通過一個或者多個數(shù)據(jù)介質(zhì)接口與總線18相連。存儲器28可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實(shí)施例的功能。
[0030]具有一組(至少一個)程序模塊42的程序/實(shí)用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個或者多個應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施例中的功能和/或方法。
[0031]計算機(jī)系統(tǒng)/服務(wù)器12也可以與一個或多個外部設(shè)備14(例如鍵盤、指向設(shè)備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè)備通信,和/或與使得該計算機(jī)系統(tǒng)/服務(wù)器12能與一個或多個其它計算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口 22進(jìn)行。并且,計算機(jī)系統(tǒng)/服務(wù)器12還可以通過網(wǎng)絡(luò)適配器20與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過總線18與計算機(jī)系統(tǒng)/服務(wù)器12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合計算機(jī)系統(tǒng)/服務(wù)器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理單元、外部磁盤驅(qū)動陣列、RAID系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
[0032]在本公開中,非關(guān)系數(shù)據(jù)庫是指任何包括“鍵值對”結(jié)構(gòu)的數(shù)據(jù)(例如JS0N/BS0N數(shù)據(jù),Bibtex數(shù)據(jù)等等)的數(shù)據(jù)庫,例如MongoDB。非關(guān)系數(shù)據(jù)庫中的記錄也可以稱為非關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)對象實(shí)例。一個記錄是對象類型下的一個對象實(shí)例,其是一個鍵值對結(jié)構(gòu),可以包含若干鍵值對。一個鍵值對也可以稱為記錄的一個字段。各個鍵值對之間可以通過預(yù)先定義的區(qū)分符來進(jìn)行區(qū)分,例如,可以通過逗號等來將不同的鍵值對進(jìn)行區(qū)分;同時,每個鍵值對內(nèi)的“鍵”和“值”可以通過預(yù)先定義的分隔符進(jìn)行分隔,例如通過冒號來進(jìn)行分隔,因此可以根據(jù)分隔符來從一個鍵值對中確定其中的鍵。鍵值對中的“值”可以是一個真正的值,例如字符串、數(shù)值等等,也可以仍然是一個鍵值對結(jié)構(gòu),因此非關(guān)系數(shù)據(jù)庫的記錄可以是層級結(jié)構(gòu)。此外,可以利用預(yù)先定義的分組符(例如大括號)將多個鍵值對結(jié)構(gòu)進(jìn)行區(qū)分,從而不但可以識別出一個文件中的多個記錄,而且可以識別出一個記錄內(nèi)的鍵值對結(jié)構(gòu)。
[0033]圖2示例性地示出了非關(guān)系數(shù)據(jù)庫中的記錄。