本發(fā)明涉及由包括去重功能的數(shù)據(jù)管理系統(tǒng)對(duì)存儲(chǔ)在物理存儲(chǔ)設(shè)備的多層級(jí)集合上的數(shù)據(jù)的管理。
背景技術(shù):
諸如數(shù)據(jù)庫(kù)管理系統(tǒng)(dbms)之類(lèi)的用戶(hù)可更新的數(shù)據(jù)存儲(chǔ)應(yīng)用可以在多個(gè)存儲(chǔ)設(shè)備上存儲(chǔ)數(shù)據(jù),每個(gè)存儲(chǔ)設(shè)備與一個(gè)存儲(chǔ)層級(jí)相關(guān)聯(lián)。
dbms應(yīng)用可以包括將所存儲(chǔ)的數(shù)據(jù)組織為記錄的數(shù)據(jù)庫(kù)-服務(wù)器部件。每條記錄標(biāo)識(shí)被組織為塊集合的數(shù)據(jù)。數(shù)據(jù)庫(kù)將這樣的記錄視為“邏輯”塊集合,并且每個(gè)邏輯塊指的是在物理存儲(chǔ)設(shè)備上對(duì)應(yīng)的“物理”存儲(chǔ)塊。在一個(gè)示例中,如果數(shù)據(jù)庫(kù)的第一記錄標(biāo)識(shí)第一數(shù)據(jù)合集,則對(duì)應(yīng)的數(shù)據(jù)庫(kù)服務(wù)器應(yīng)用可以將該數(shù)據(jù)組織為兩個(gè)邏輯塊l100和l200。邏輯塊l100反過(guò)來(lái)可以將物理存儲(chǔ)在硬盤(pán)上的數(shù)據(jù)標(biāo)識(shí)為物理塊p100,邏輯塊l200可以類(lèi)似地將物理存儲(chǔ)在硬盤(pán)上的數(shù)據(jù)標(biāo)識(shí)為物理塊p200。
這種將邏輯塊映射至物理塊的方法是本領(lǐng)域技術(shù)人員已知的一種提高存儲(chǔ)管理的效率、靈活性或可靠性的方式。在這樣的機(jī)制中可以改善存儲(chǔ)效率的一種方式是通過(guò)允許或促進(jìn)“去重”功能,該功能可以由數(shù)據(jù)庫(kù)管理系統(tǒng)的“去重引擎”模塊執(zhí)行。
去重是一種可以通過(guò)其消除重復(fù)的、冗余的或者以其它方式是非必要的存儲(chǔ)塊的過(guò)程。例如,如果邏輯塊l100和邏輯塊l101都標(biāo)識(shí)相同的數(shù)據(jù)值集合,則去重引擎可以確保所標(biāo)識(shí)的數(shù)據(jù)僅在物理介質(zhì)上被存儲(chǔ)一次。在這種情況下,如果數(shù)據(jù)存儲(chǔ)在物理塊p100中,則l100和l101可能都指向相同的物理塊p100。
數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)比較針對(duì)兩個(gè)邏輯塊中的每一個(gè)的內(nèi)容所計(jì)算的“散列值”來(lái)確定兩個(gè)邏輯塊指向相同的數(shù)據(jù)值集合。散列值是通過(guò)對(duì)數(shù)據(jù)元素執(zhí)行數(shù)學(xué)“散列”函數(shù)所計(jì)算的數(shù)值。散列函數(shù)通常是復(fù)雜的數(shù)學(xué)計(jì)算(諸如高階多項(xiàng)式函數(shù))并且被選擇為使得沒(méi)有兩個(gè)不同的數(shù)據(jù)元素能夠產(chǎn)生相同的散列值。相反,如果對(duì)兩個(gè)不同的數(shù)據(jù)元素執(zhí)行適當(dāng)選擇的散列函數(shù)產(chǎn)生了兩個(gè)相同的散列值,則這兩個(gè)數(shù)據(jù)元素可以被假定是相同的。
散列值在計(jì)算機(jī)科學(xué)中具有很大的價(jià)值,因?yàn)榕c計(jì)算機(jī)對(duì)這些散列值所標(biāo)識(shí)的一對(duì)可能冗長(zhǎng)的數(shù)據(jù)元素進(jìn)行比較相比,它們可以能夠更快地存儲(chǔ)、讀取和比較兩個(gè)數(shù)值。因此,本發(fā)明的實(shí)施例可以使用散列技術(shù)來(lái)有效地確定兩個(gè)邏輯塊或兩個(gè)物理塊是否包含相同的內(nèi)容。
如本領(lǐng)域技術(shù)人員已知的,數(shù)據(jù)庫(kù)管理系統(tǒng)可以基于包含存儲(chǔ)在主存儲(chǔ)(諸如計(jì)算機(jī)存儲(chǔ)器)或輔存儲(chǔ)(諸如旋轉(zhuǎn)的磁盤(pán)驅(qū)動(dòng)器或ssd固態(tài)存儲(chǔ)設(shè)備)中的元素的架構(gòu)。出于可讀性的目的,本文將把主存儲(chǔ)部件稱(chēng)為“存儲(chǔ)器駐留(memory-resident)”,并將把輔存儲(chǔ)部件稱(chēng)為“盤(pán)載(on-disk)”結(jié)構(gòu)。但是讀者并不應(yīng)當(dāng)將這些慣例解釋為暗示本發(fā)明的實(shí)施例將數(shù)據(jù)專(zhuān)門(mén)存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器和磁盤(pán)驅(qū)動(dòng)器中。
圖1圖示了如計(jì)算機(jī)化數(shù)據(jù)存儲(chǔ)領(lǐng)域的技術(shù)人員所知的數(shù)據(jù)庫(kù)管理系統(tǒng)的結(jié)構(gòu)。圖1包括附圖標(biāo)記1000-1001以及101-111。
圖1的數(shù)據(jù)庫(kù)應(yīng)用包括存儲(chǔ)器駐留模塊1000的集合,它們?cè)谡G闆r下被存儲(chǔ)在計(jì)算機(jī)的主存儲(chǔ)(諸如隨機(jī)訪問(wèn)存儲(chǔ)器或高速緩存)中;以及盤(pán)載數(shù)據(jù)結(jié)構(gòu)1001的集合,它們正常被存儲(chǔ)在輔存儲(chǔ)(諸如旋轉(zhuǎn)磁盤(pán)驅(qū)動(dòng)器、固態(tài)存儲(chǔ)設(shè)備(ssd)或可重寫(xiě)光學(xué)存儲(chǔ)器)中。
盡管數(shù)據(jù)庫(kù)管理系統(tǒng)的確切部件可以變化,典型系統(tǒng)的存儲(chǔ)器駐留模塊可以包括:
-數(shù)據(jù)庫(kù)查詢(xún)處理引擎101,其對(duì)數(shù)據(jù)庫(kù)應(yīng)用處理用戶(hù)查詢(xún)進(jìn)行管理;
-后臺(tái)樹(shù)構(gòu)建器103,該應(yīng)用在后臺(tái)運(yùn)行以確定數(shù)據(jù)庫(kù)的內(nèi)部結(jié)構(gòu)、存儲(chǔ)數(shù)據(jù)或文件系統(tǒng)應(yīng)當(dāng)如何被更新、內(nèi)部識(shí)別或者以其他方式地修正以便實(shí)施所請(qǐng)求的數(shù)據(jù)庫(kù)事務(wù);
-存儲(chǔ)器駐留記錄存儲(chǔ)105,其對(duì)最近使用的數(shù)據(jù)庫(kù)信息進(jìn)行緩存,諸如最近檢索的數(shù)據(jù)庫(kù)記錄或者在處理用戶(hù)查詢(xún)時(shí)最近所訪問(wèn)的數(shù)據(jù)庫(kù)索引;
-存儲(chǔ)器駐留日志存儲(chǔ)107,其在存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)庫(kù)事務(wù)的日志直至應(yīng)用能夠?qū)⒃撊罩緵_刷到盤(pán)載日志存儲(chǔ);和
-盤(pán)載b樹(shù)109,其包括數(shù)據(jù)庫(kù)的實(shí)際結(jié)構(gòu)化的數(shù)據(jù)。如上所述,該數(shù)據(jù)可以被組織為記錄,記錄進(jìn)而被組織為邏輯塊,每個(gè)邏輯塊各自指向物理存儲(chǔ)在對(duì)應(yīng)的物理塊中的數(shù)據(jù)。所存儲(chǔ)的數(shù)據(jù)在邏輯上被組織為“b樹(shù)”數(shù)據(jù)結(jié)構(gòu),這是二叉樹(shù)的優(yōu)化版本,其中一個(gè)節(jié)點(diǎn)可以鏈接至多于兩個(gè)的子節(jié)點(diǎn);和
-盤(pán)載日志存儲(chǔ)111,其在磁盤(pán)上存儲(chǔ)從存儲(chǔ)器駐留日志存儲(chǔ)所轉(zhuǎn)發(fā)的數(shù)據(jù)庫(kù)事務(wù)的日志。
這樣的應(yīng)用可能如何工作的一個(gè)示例包括以下步驟:
-新的用戶(hù)查詢(xún)或事務(wù)被接收并且最初由查詢(xún)或事務(wù)處理引擎101進(jìn)行處理。
-如果查詢(xún)或事務(wù)要求特定的數(shù)據(jù)庫(kù)記錄,則查詢(xún)或事務(wù)處理引擎101首先檢查存儲(chǔ)器駐留記錄存儲(chǔ)105以確定該記錄是否足夠近期被訪問(wèn)過(guò)從而仍然被存儲(chǔ)在存儲(chǔ)器駐留記錄存儲(chǔ)105之中。如果是,則查詢(xún)或事務(wù)處理引擎101從存儲(chǔ)器駐留記錄存儲(chǔ)105提取該記錄,從而避免了明顯更慢地從磁盤(pán)獲取。在執(zhí)行這些操作的期間,查詢(xún)或事務(wù)處理引擎101可以一次或多次參考盤(pán)載b樹(shù)109以便更好地標(biāo)識(shí)為了響應(yīng)用戶(hù)查詢(xún)或事務(wù)所必需的操作。
-如果該記錄未處于存儲(chǔ)器駐留記錄存儲(chǔ)105中,則查詢(xún)或事務(wù)處理引擎101從盤(pán)載數(shù)據(jù)庫(kù)109獲取該記錄并且將其保存在存儲(chǔ)器駐留記錄存儲(chǔ)105中。當(dāng)存儲(chǔ)器駐留記錄存儲(chǔ)105已滿(mǎn)時(shí),根據(jù)先入先出(fifo)程序,存儲(chǔ)105中最舊的記錄被刪除而為更近期取得的記錄騰出空間。
-查詢(xún)或事務(wù)處理引擎101還在存儲(chǔ)器駐留日志存儲(chǔ)107中保存查詢(xún)或事務(wù)所必要的任何數(shù)據(jù)庫(kù)更新的日志。這些日志記錄的更新將定期從存儲(chǔ)器駐留日志存儲(chǔ)107被沖刷到盤(pán)載日志存儲(chǔ)111。
-后臺(tái)樹(shù)構(gòu)建器103確定如何實(shí)施用戶(hù)查詢(xún)或事務(wù)所請(qǐng)求的數(shù)據(jù)庫(kù)更新。該確定可以包括從存儲(chǔ)器駐留日志存儲(chǔ)107或盤(pán)載日志存儲(chǔ)111讀取條目,其中該條目標(biāo)識(shí)與用戶(hù)查詢(xún)或事務(wù)相關(guān)聯(lián)的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)事務(wù)。實(shí)施該查詢(xún)或事務(wù)通常通過(guò)對(duì)盤(pán)載b樹(shù)109中的元素進(jìn)行修正來(lái)執(zhí)行,諸如更新存儲(chǔ)在記錄中的數(shù)據(jù)、更新指針、索引或鍵值的數(shù)值、向數(shù)據(jù)庫(kù)添加新的記錄、移動(dòng)記錄或者從數(shù)據(jù)庫(kù)刪除已有記錄。
-在后臺(tái)樹(shù)構(gòu)建器103從存儲(chǔ)器駐留日志存儲(chǔ)107或盤(pán)載日志存儲(chǔ)111讀取條目讀取日志條目之后,該條目就不再被需要并且從其存儲(chǔ)107或111中刪除。
-一旦后臺(tái)樹(shù)構(gòu)建器103已經(jīng)確定在存儲(chǔ)器中盤(pán)載b樹(shù)109應(yīng)當(dāng)如何響應(yīng)于用戶(hù)查詢(xún)或事務(wù)被改變,則對(duì)盤(pán)載b樹(shù)109實(shí)際執(zhí)行那些改變。
在這樣的操作的過(guò)程期間,如在兩個(gè)或更多邏輯塊被發(fā)現(xiàn)各自標(biāo)識(shí)與相同散列值相關(guān)聯(lián)的數(shù)據(jù)時(shí)所指示的,盤(pán)載b樹(shù)109的兩個(gè)或更多邏輯塊可以標(biāo)識(shí)相同的數(shù)據(jù)??梢酝ㄟ^(guò)消除這樣的冗余而使得數(shù)據(jù)庫(kù)的存儲(chǔ)和管理更為高效。如本領(lǐng)域技術(shù)人員所知的,一種這樣做的方式是將該兩個(gè)或更多邏輯塊中的每一個(gè)與相同的物理存儲(chǔ)塊相關(guān)聯(lián),而不是為每個(gè)邏輯塊分配不同的重復(fù)物理塊。
以這種方式消除冗余的物理存儲(chǔ)可以由被稱(chēng)作去重引擎的軟件應(yīng)用來(lái)執(zhí)行。這樣的引擎可以檢測(cè)所存儲(chǔ)數(shù)據(jù)的重復(fù)副本并且刪除除一個(gè)以外的所有相關(guān)聯(lián)的相同的物理塊。該引擎然后將每個(gè)邏輯塊指向剩余的單個(gè)物理塊。
被配置在數(shù)據(jù)庫(kù)應(yīng)用服務(wù)器和物理存儲(chǔ)設(shè)備之間的去重引擎可以檢測(cè)數(shù)據(jù)庫(kù)應(yīng)用在新的邏輯塊中存儲(chǔ)冗余數(shù)據(jù)的每次嘗試,其中該數(shù)據(jù)與已有邏輯塊中的數(shù)據(jù)相同。如果沒(méi)有去重功能存在,數(shù)據(jù)庫(kù)應(yīng)用將分配新的物理塊來(lái)存儲(chǔ)與已有物理塊中所存儲(chǔ)的相同的數(shù)據(jù)。但是在這里,去重引擎替代地通過(guò)將新的邏輯塊與已經(jīng)與已有邏輯塊相關(guān)聯(lián)的物理塊相關(guān)聯(lián)而節(jié)省了存儲(chǔ)空間。
在一個(gè)示例中,考慮包含兩條記錄r100和r200的數(shù)據(jù)庫(kù)。r100存儲(chǔ)由邏輯塊l100和l101所標(biāo)識(shí)的數(shù)據(jù),邏輯塊l100和l101相應(yīng)地在物理塊p100和p101中存儲(chǔ)數(shù)據(jù);同時(shí)r200存儲(chǔ)由邏輯塊l200和l201所標(biāo)識(shí)的數(shù)據(jù),邏輯塊l200和l201相應(yīng)地在物理塊p200和p201中存儲(chǔ)數(shù)據(jù)。
如果用戶(hù)事務(wù)更新了記錄r100而使得其邏輯塊l100被更新以標(biāo)識(shí)與記錄r200的邏輯塊l200所標(biāo)識(shí)的數(shù)據(jù)相同的數(shù)據(jù),那么就不再需要在兩個(gè)不同的物理塊中存儲(chǔ)邏輯塊l100和邏輯塊l200的內(nèi)容。通過(guò)計(jì)算并比較每個(gè)邏輯塊的散列值,去重引擎確定l100和l200的內(nèi)容是相同的,并且因此不同于向l200分配不同的物理塊,替代地對(duì)l100進(jìn)行更新以指向物理塊p200。以這種方式,邏輯塊(l100和l200)的內(nèi)容可以被存儲(chǔ)在單個(gè)物理塊中。
數(shù)據(jù)庫(kù)管理應(yīng)用可以將數(shù)據(jù)存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備上,并且這些設(shè)備可以基于諸如訪問(wèn)頻率、更新頻率、訪問(wèn)時(shí)間要求、臨界性、安全級(jí)別或數(shù)據(jù)恢復(fù)要求之類(lèi)的標(biāo)準(zhǔn)而被組織為多個(gè)層級(jí)。例如,被要求快速響應(yīng)時(shí)間的應(yīng)用所頻繁訪問(wèn)的數(shù)據(jù)可能被存儲(chǔ)在一個(gè)或多個(gè)“一層”高速固態(tài)驅(qū)動(dòng)器中。不太頻繁被訪問(wèn)或者專(zhuān)門(mén)由更能容忍更長(zhǎng)訪問(wèn)時(shí)間的應(yīng)用所訪問(wèn)的其它數(shù)據(jù)則可以另外被存儲(chǔ)在成本較低、容量更高的“二層”旋轉(zhuǎn)硬盤(pán)驅(qū)動(dòng)器上。很少訪問(wèn)、并不預(yù)期要更新或者非常舊的數(shù)據(jù)則可以被存儲(chǔ)在歸檔的“三層”存儲(chǔ)上,諸如光盤(pán)。
選擇哪一類(lèi)型的存儲(chǔ)設(shè)備與各自層級(jí)相關(guān)聯(lián)可以是依賴(lài)于實(shí)施方式的,并且在一些實(shí)施例中,數(shù)據(jù)庫(kù)系統(tǒng)可以將數(shù)據(jù)存儲(chǔ)在多于三個(gè)或少于三個(gè)的層級(jí)中。
選擇數(shù)據(jù)的物理塊被存儲(chǔ)于其中的層級(jí)具有針對(duì)去重引擎的操作的暗示。例如,考慮正常將與存儲(chǔ)在不同層級(jí)中的數(shù)據(jù)相關(guān)聯(lián)的兩個(gè)邏輯塊。如果那兩個(gè)邏輯塊標(biāo)識(shí)相同的數(shù)據(jù),則對(duì)冗余的物理存儲(chǔ)進(jìn)行去重—并且因此強(qiáng)制兩個(gè)邏輯塊標(biāo)識(shí)相同層級(jí)中的數(shù)據(jù)—這對(duì)于系統(tǒng)性能、效率或可靠性可能具有不利影響。
層級(jí)以及物理塊到具體層級(jí)的分配可以由“重定位器(relocator)”模塊進(jìn)行管理,其確定哪些物理塊應(yīng)當(dāng)被存儲(chǔ)在各自存儲(chǔ)層級(jí)中。例如,重定位器可以將標(biāo)識(shí)“熱”數(shù)據(jù)(以超過(guò)閾值的頻率被訪問(wèn)或修正的數(shù)據(jù))的物理塊存儲(chǔ)在快速ssd存儲(chǔ)設(shè)備的第一層級(jí)中,同時(shí)將其它物理塊歸于較慢存儲(chǔ)設(shè)備的第二層級(jí)。
在另一個(gè)示例中,如果重定位器模塊檢測(cè)到存儲(chǔ)在快速ssd層級(jí)中的物理塊不再被頻繁訪問(wèn),則其可以將該物理塊移至較慢層級(jí)。在一些數(shù)據(jù)庫(kù)實(shí)施方式中,數(shù)據(jù)庫(kù)管理應(yīng)用或者存儲(chǔ)管理應(yīng)用或平臺(tái)的重定位器模塊持續(xù)工作以掃描所存儲(chǔ)數(shù)據(jù)的物理塊并且在必要情況下對(duì)它們進(jìn)行重定位從而提高性能。在一些實(shí)施例中,重定位器可能在背景樹(shù)構(gòu)建器103對(duì)b樹(shù)109進(jìn)行重新組織之后確定該重新組織是否導(dǎo)致了物理塊應(yīng)當(dāng)被移動(dòng)至不同層級(jí)的存儲(chǔ)設(shè)備的條件。
在一個(gè)示例中,去重模塊可能通過(guò)類(lèi)似于以下所列出的步驟對(duì)所請(qǐng)求的數(shù)據(jù)庫(kù)事務(wù)做出響應(yīng)。這里,已有數(shù)據(jù)庫(kù)記錄r100可能在存儲(chǔ)器駐留日志存儲(chǔ)107中被標(biāo)識(shí)為包括邏輯塊l100和l101,同時(shí)該記錄的新的、經(jīng)更新的副本則將包括邏輯塊l200和l201。假設(shè)l100和l101與同l200和l201相同的存儲(chǔ)層級(jí)相關(guān)聯(lián),數(shù)據(jù)庫(kù)更新/去重程序可能包括以下步驟:
i)從存儲(chǔ)器駐留日志存儲(chǔ)107標(biāo)識(shí)當(dāng)前由盤(pán)載b樹(shù)109中的記錄r100所標(biāo)識(shí)的數(shù)據(jù)由邏輯塊l100和l101所標(biāo)識(shí)。
ii)分配未使用的塊l200和l201以存儲(chǔ)經(jīng)更新的記錄的數(shù)據(jù)。在該示例中,如以上所提到的,從與塊l100和l101相同的存儲(chǔ)層級(jí)中選擇l200和l201。
iii)讀取由已有記錄的邏輯塊l100和l101所標(biāo)識(shí)的物理塊p100和p101中所存儲(chǔ)的數(shù)據(jù)。
iv)在存儲(chǔ)器中將從p100和p101所讀取的已有數(shù)據(jù)復(fù)制到新分配的邏輯塊l200和l201。
v)將與邏輯塊l200和l201相關(guān)聯(lián)的數(shù)據(jù)沖刷到物理塊p200和p201。
vi)去重器模塊確定邏輯塊l100和l200現(xiàn)在與具有相同散列值的數(shù)據(jù)元素相關(guān)聯(lián),并且邏輯塊l101和l201現(xiàn)在與具有相同散列值的數(shù)據(jù)元素相關(guān)聯(lián)。
vii)去重器從這些散列值推斷出分別與邏輯塊l100和l200相關(guān)聯(lián)的物理塊p100和p200存儲(chǔ)相同的數(shù)據(jù),并且分別與邏輯塊l101和l201相關(guān)聯(lián)的物理塊p101和p201存儲(chǔ)相同的數(shù)據(jù)。去重器通過(guò)將邏輯塊l100和l200指向相同的p100物理塊,并且將邏輯塊l101和l201指向相同的p101物理塊而消除冗余存儲(chǔ)。物理塊p200和p201現(xiàn)在是空閑的從而可用于其它存儲(chǔ)用途。
在實(shí)踐中,該程序有效地降低了數(shù)據(jù)庫(kù)的存儲(chǔ)要求,但是也由于需要存儲(chǔ)器以及與物理存儲(chǔ)中不必要的數(shù)據(jù)傳輸而引入了低效率和開(kāi)銷(xiāo)。這樣的低效率和開(kāi)銷(xiāo)尤其可能在背景樹(shù)構(gòu)建器103響應(yīng)于所請(qǐng)求的數(shù)據(jù)庫(kù)事務(wù)而嘗試確定如何最佳地更新盤(pán)載b樹(shù)109時(shí)使得其性能出現(xiàn)退化。
在之前的過(guò)程中,例如:
-從物理存儲(chǔ)讀取數(shù)據(jù)庫(kù)記錄的邏輯塊的內(nèi)容是一項(xiàng)高延時(shí)操作,其即使作為后臺(tái)操作執(zhí)行可能也會(huì)明顯降低性能。在物理存儲(chǔ)設(shè)備是共享資源的情況下尤其如此。
-一些去重程序可以要求從盤(pán)載日志存儲(chǔ)111讀取經(jīng)更新的記錄,這又要求了另一個(gè)高開(kāi)銷(xiāo)的物理存儲(chǔ)訪問(wèn)。
-即使在存儲(chǔ)器中完成在邏輯塊之間數(shù)據(jù)復(fù)制也浪費(fèi)了處理器能力和存儲(chǔ)器容量。
-復(fù)雜的散列值計(jì)算和比較增加了開(kāi)銷(xiāo),該開(kāi)銷(xiāo)在數(shù)據(jù)庫(kù)管理應(yīng)用已經(jīng)知道新的邏輯塊(諸如上述示例中的l200)包括與它從其進(jìn)行復(fù)制的塊(諸如l100)相同的數(shù)據(jù)的情況下是不必要的。換言之,即使數(shù)據(jù)庫(kù)管理應(yīng)用已經(jīng)知道就是這樣,常規(guī)的去重過(guò)程也迫使去重模塊執(zhí)行不必要的、更高開(kāi)銷(xiāo)的操作以便確定兩個(gè)邏輯塊或兩個(gè)物理塊是否包含相同數(shù)據(jù)。
本發(fā)明的實(shí)施例通過(guò)消除對(duì)于這樣的傳輸?shù)男枰?jiǎn)化了這些程序,并且因此明顯提高了去重程序的效率。
本文描述了本發(fā)明的實(shí)施例以及相關(guān)聯(lián)的示例,其包括對(duì)可能與同相同的層級(jí)相關(guān)聯(lián)的兩個(gè)或更多邏輯塊相關(guān)聯(lián)的物理存儲(chǔ)塊進(jìn)行去重的步驟。這種簡(jiǎn)化的存在僅是為了提高可讀性而并不應(yīng)當(dāng)被解釋為將本發(fā)明的實(shí)施例限制為相同的層級(jí)內(nèi)的操作。在以其它方式與這里所描述的那些相似的實(shí)施例中,本發(fā)明的方法可以被用來(lái)增強(qiáng)對(duì)存儲(chǔ)在不同存儲(chǔ)層級(jí)中的冗余塊進(jìn)行去重的系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的第一實(shí)施例提供了一種數(shù)據(jù)庫(kù)去重優(yōu)化器,其包括一個(gè)或多個(gè)處理器,耦合至該一個(gè)或多個(gè)處理器的一個(gè)或多個(gè)存儲(chǔ)器,以及耦合至該一個(gè)或多個(gè)處理器中的一個(gè)或多個(gè)計(jì)算機(jī)可讀硬件存儲(chǔ)設(shè)備,其中該計(jì)算機(jī)可讀硬件存儲(chǔ)設(shè)備中的一個(gè)或多個(gè)包含程序代碼,其被配置為由處理器中的一個(gè)或多個(gè)經(jīng)由該存儲(chǔ)器的一個(gè)或多個(gè)來(lái)運(yùn)行從而實(shí)施一種用于優(yōu)化數(shù)據(jù)庫(kù)的去重的方法,該數(shù)據(jù)庫(kù)存儲(chǔ)在被組織為兩個(gè)或更多層級(jí)的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合上,該方法包括:
該數(shù)據(jù)庫(kù)去重優(yōu)化器從數(shù)據(jù)庫(kù)日志獲取事務(wù)請(qǐng)求,其中該時(shí)區(qū)請(qǐng)求標(biāo)識(shí):該數(shù)據(jù)庫(kù)中所存儲(chǔ)的已有記錄;要對(duì)該已有技術(shù)執(zhí)行的事務(wù)類(lèi)型;以及要被寫(xiě)入該已有記錄的經(jīng)更新數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器響應(yīng)于該獲取而標(biāo)識(shí)第一邏輯塊,其對(duì)應(yīng)于第一物理塊并且存儲(chǔ)該事務(wù)請(qǐng)求標(biāo)識(shí)的所述經(jīng)更新數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器進(jìn)一步標(biāo)識(shí)第二邏輯塊,其在該數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合中的存儲(chǔ)設(shè)備上存儲(chǔ)由該已有記錄所包括的已有數(shù)據(jù)值;以及
該數(shù)據(jù)庫(kù)去重優(yōu)化器指示去重模塊以將該第一邏輯塊和第二邏輯塊與相同的物理塊相關(guān)聯(lián)。
本發(fā)明的第二實(shí)施例提供了一種用于優(yōu)化數(shù)據(jù)庫(kù)的去重的方法,該數(shù)據(jù)庫(kù)存儲(chǔ)在被組織為兩個(gè)或更多層個(gè)級(jí)的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合上,該方法包括:
數(shù)據(jù)庫(kù)去重優(yōu)化器從數(shù)據(jù)庫(kù)日志獲取事務(wù)請(qǐng)求,其中該事物請(qǐng)求標(biāo)識(shí):存儲(chǔ)于該數(shù)據(jù)庫(kù)中所的已有記錄;對(duì)該已有記錄執(zhí)行的事務(wù)的類(lèi)型;以及被寫(xiě)入該已有記錄的經(jīng)更新的數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器響應(yīng)于該獲取而標(biāo)識(shí)第一邏輯塊,其對(duì)應(yīng)于第一物理塊并且存儲(chǔ)該由事務(wù)請(qǐng)求標(biāo)識(shí)的經(jīng)更新的數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器進(jìn)一步標(biāo)識(shí)第二邏輯塊,其在該數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合中的存儲(chǔ)設(shè)備上存儲(chǔ)由該已有記錄所包括的已有數(shù)據(jù)值;以及
該數(shù)據(jù)庫(kù)去重優(yōu)化器指示去重模塊以將該第一邏輯塊和第二邏輯塊與相同的物理塊相關(guān)聯(lián)。
本發(fā)明的第三實(shí)施例提供了一種計(jì)算機(jī)程序產(chǎn)品,其包括計(jì)算機(jī)可讀硬件設(shè)備,該計(jì)算機(jī)可讀硬件設(shè)備具有存儲(chǔ)于其中的計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可讀硬件存儲(chǔ)設(shè)備,該程序代碼被配置為由計(jì)算機(jī)系統(tǒng)的處理器所執(zhí)行以實(shí)施一種用于優(yōu)化數(shù)據(jù)庫(kù)的去重的方法,該數(shù)據(jù)庫(kù)存儲(chǔ)在被組織為兩個(gè)或更多個(gè)層級(jí)的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合上,該方法包括:
該數(shù)據(jù)庫(kù)去重優(yōu)化器從數(shù)據(jù)庫(kù)日志獲取事務(wù)請(qǐng)求,其中該事物請(qǐng)求標(biāo)識(shí):存儲(chǔ)與該數(shù)據(jù)庫(kù)中的已有記錄;對(duì)該已有記錄執(zhí)行的事務(wù)的類(lèi)型;以及被寫(xiě)入該已有記錄的經(jīng)更新的數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器響應(yīng)于該獲取而標(biāo)識(shí)第一邏輯塊,其對(duì)應(yīng)于第一物理塊并且存儲(chǔ)由該事務(wù)請(qǐng)求所標(biāo)識(shí)的經(jīng)更新的數(shù)據(jù)值;
該數(shù)據(jù)庫(kù)去重優(yōu)化器進(jìn)一步標(biāo)識(shí)第二邏輯塊,其在該數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備集合中的存儲(chǔ)設(shè)備上存儲(chǔ)由該已有記錄所包括的已有數(shù)據(jù)值;以及
該數(shù)據(jù)庫(kù)去重優(yōu)化器指引導(dǎo)去重模塊以將該第一邏輯塊和第二邏輯塊第一物理塊相關(guān)聯(lián)。
附圖說(shuō)明
現(xiàn)在將參考附圖僅以示例的方式對(duì)本發(fā)明的實(shí)施例進(jìn)行描述,其中:
圖1圖示了如計(jì)算機(jī)化數(shù)據(jù)存儲(chǔ)領(lǐng)域的技術(shù)人員所知的數(shù)據(jù)庫(kù)管理系統(tǒng)的結(jié)構(gòu)。
圖2示出了根據(jù)本發(fā)明實(shí)施例的可以被用以實(shí)施用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法的計(jì)算機(jī)化數(shù)據(jù)庫(kù)去重系統(tǒng)的結(jié)構(gòu)。
圖3是圖示根據(jù)本發(fā)明實(shí)施例的用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法的流程圖。
圖4示出了根據(jù)本發(fā)明實(shí)施例的圖3中執(zhí)行優(yōu)化去重程序的步驟的細(xì)節(jié)。
圖5示出了可以被本發(fā)明的實(shí)施例用來(lái)對(duì)數(shù)據(jù)庫(kù)或其它類(lèi)型的信息庫(kù)的去重進(jìn)行優(yōu)化的數(shù)據(jù)表的示例。
具體實(shí)施方式
本發(fā)明的實(shí)施例解決了對(duì)數(shù)據(jù)庫(kù)系統(tǒng)或其它類(lèi)型的信息庫(kù)中所存儲(chǔ)的數(shù)據(jù)進(jìn)行去重的已知方法的低效以及不必要開(kāi)銷(xiāo)的問(wèn)題。在包括以下所描述的那些的一些實(shí)施例中,這些優(yōu)勢(shì)僅在對(duì)與相同存儲(chǔ)層級(jí)相關(guān)聯(lián)的物理存儲(chǔ)塊進(jìn)行去重時(shí)獲得。然而,在其它實(shí)施例中,這些優(yōu)勢(shì)甚至可以在實(shí)施例包括對(duì)與物理存儲(chǔ)設(shè)備的不同層級(jí)相關(guān)聯(lián)的所存儲(chǔ)數(shù)據(jù)的塊進(jìn)行去重的程序時(shí)獲得。
如上所述,已知去重方法包括與不必要或冗余的物理存儲(chǔ)i/o、存儲(chǔ)器駐留數(shù)據(jù)處理、將數(shù)據(jù)從日志存儲(chǔ)復(fù)制至b樹(shù)以及邏輯或物理塊所標(biāo)識(shí)數(shù)據(jù)的散列值的計(jì)算和比較相關(guān)聯(lián)的低效率。如下圖將要描述的,本發(fā)明的實(shí)施例消除了對(duì)于這些高開(kāi)銷(xiāo)步驟中的一些或全部的需要。
特別地,本發(fā)明的實(shí)施例利用了以下事實(shí):在實(shí)施諸如以上示例中所描述的那些的某些數(shù)據(jù)庫(kù)事務(wù)時(shí),數(shù)據(jù)庫(kù)管理應(yīng)用知曉新創(chuàng)建的或分配的邏輯塊標(biāo)識(shí)與已有塊標(biāo)識(shí)的相同的數(shù)據(jù)。在這樣的情況下,不同于要求一系列散列操作、存儲(chǔ)器中的數(shù)據(jù)處理過(guò)程以及高開(kāi)銷(xiāo)的存儲(chǔ)訪問(wèn),去重器從數(shù)據(jù)庫(kù)管理應(yīng)用的其它部件接收應(yīng)當(dāng)采取去重步驟的通知。在這樣的情況下,去重模塊能夠立即進(jìn)行—甚至可能在背景樹(shù)構(gòu)造器103仍然在標(biāo)識(shí)經(jīng)修正的b樹(shù)的同時(shí)—以在不執(zhí)行不必要的磁盤(pán)i/o或散列操作的情況下消除冗余物理塊的可能創(chuàng)建。
在該方法的各種變型中,如果背景樹(shù)構(gòu)建器103在響應(yīng)于數(shù)據(jù)庫(kù)更新請(qǐng)求而修正b樹(shù)的程序期間確定兩個(gè)邏輯塊標(biāo)識(shí)相同的數(shù)據(jù),則背景樹(shù)構(gòu)建器103可以通知數(shù)據(jù)庫(kù)管理應(yīng)用的其它部件這兩個(gè)邏輯塊可能指向相同的物理存儲(chǔ)塊。這種情況下,可能無(wú)需要求標(biāo)準(zhǔn)去重模塊進(jìn)行分析。
其它的變型是可能的,其中數(shù)據(jù)庫(kù)管理系統(tǒng)的各個(gè)模塊在標(biāo)識(shí)到兩個(gè)邏輯塊標(biāo)識(shí)相同的數(shù)據(jù)時(shí)開(kāi)始導(dǎo)致兩個(gè)邏輯塊指向相同的物理塊的步驟。無(wú)論細(xì)節(jié)如何,這些實(shí)施例共享以下特征:去重過(guò)程在不要求如上所述去重模塊的散列或i/o操作的情況下進(jìn)行。
在一個(gè)簡(jiǎn)單示例中,本發(fā)明的實(shí)施例可以利用以下步驟來(lái)開(kāi)始去重過(guò)程:
i)用戶(hù)將數(shù)據(jù)庫(kù)記錄“user1”所存儲(chǔ)的數(shù)據(jù)從值“xyz”更新為值“pqr”。
ii)數(shù)據(jù)庫(kù)管理系統(tǒng)通過(guò)將數(shù)據(jù)庫(kù)事務(wù)記錄在存儲(chǔ)器駐留日志存儲(chǔ)107中而做出響應(yīng)。這樣的事務(wù)可能生成類(lèi)似于以下的事務(wù)日志條目:
<update,user1,"pqr">
iii)雖然該事務(wù)已經(jīng)被記錄在日志中,但是其還沒(méi)有被實(shí)施。數(shù)據(jù)庫(kù)109仍然在磁盤(pán)上存儲(chǔ)“已有的”值“xyz”直至數(shù)據(jù)庫(kù)管理器的背景樹(shù)構(gòu)建器103模塊將所存儲(chǔ)的磁盤(pán)值更新為“經(jīng)更新的”的值“pqr”。
iv)一旦更新發(fā)生,則兩個(gè)不同的邏輯塊集合—一個(gè)集合被日志的事務(wù)記錄所包括而另一個(gè)則被數(shù)據(jù)庫(kù)109中基于磁盤(pán)的記錄所包括—都標(biāo)識(shí)相同的數(shù)據(jù)“pqr”。每個(gè)邏輯塊集合標(biāo)識(shí)不同的物理存儲(chǔ)塊,這導(dǎo)致數(shù)據(jù)“pqr”在磁盤(pán)上被存儲(chǔ)兩次。
v)在傳統(tǒng)去重方法中,去重引擎在進(jìn)行掃描的同時(shí)將標(biāo)識(shí)該冗余并且會(huì)將兩個(gè)邏輯塊都指向單個(gè)物理塊。但是該程序要求資源密集型磁盤(pán)i/o、數(shù)據(jù)比較以及執(zhí)行復(fù)雜的散列功能。然而,本發(fā)明的實(shí)施例利用了數(shù)據(jù)庫(kù)管理系統(tǒng)的其它模塊在執(zhí)行它們的正常操作的同時(shí)已經(jīng)能夠?qū)⑷哂鄩K標(biāo)識(shí)為去重候選這一事實(shí)。本發(fā)明因此提供了這些其它模塊可以向去重引擎標(biāo)識(shí)冗余數(shù)據(jù)的機(jī)制,這允許其在沒(méi)有顯著開(kāi)銷(xiāo)的情況下消除冗余存儲(chǔ)。
以下的附圖和描述對(duì)本發(fā)明的各個(gè)實(shí)施例進(jìn)行了更為詳細(xì)的描述,上述實(shí)施例實(shí)施該方法以允許數(shù)據(jù)庫(kù)管理系統(tǒng)或其它類(lèi)型的信息庫(kù)更為有效地運(yùn)行。特別地,某些實(shí)施例進(jìn)一步合并了將這些方法擴(kuò)展至基于所存儲(chǔ)數(shù)據(jù)的使用模式和其它特性而將存儲(chǔ)介質(zhì)組織為不同層級(jí)的信息管理系統(tǒng)的步驟。
圖2示出了根據(jù)本發(fā)明實(shí)施例的可以被用來(lái)實(shí)施用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法的計(jì)算機(jī)化數(shù)據(jù)庫(kù)去重系統(tǒng)的結(jié)構(gòu)。圖2引用了對(duì)象1000、1001以及201-215。
本發(fā)明的多個(gè)方面可以采用完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、駐留軟件、微代碼等),或者將軟件和硬件方面相結(jié)合的實(shí)施例的形式,在本文中它們?nèi)慷伎梢员灰话愕胤Q(chēng)之為“電路”、“模塊”或“系統(tǒng)”。
本發(fā)明可以是系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上載有用于使處理器實(shí)現(xiàn)本發(fā)明的各個(gè)方面的計(jì)算機(jī)可讀程序指令。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是可以保持和存儲(chǔ)由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是――但不限于――電存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備、電磁存儲(chǔ)設(shè)備、半導(dǎo)體存儲(chǔ)設(shè)備或者上述的任意合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤(pán)、硬盤(pán)、隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦式可編程只讀存儲(chǔ)器(eprom或閃存)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、便攜式壓縮盤(pán)只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能盤(pán)(dvd)、記憶棒、軟盤(pán)、機(jī)械編碼設(shè)備、例如其上存儲(chǔ)有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)不被解釋為瞬時(shí)信號(hào)本身,諸如無(wú)線電波或者其他自由傳播的電磁波、通過(guò)波導(dǎo)或其他傳輸媒介傳播的電磁波(例如,通過(guò)光纖電纜的光脈沖)、或者通過(guò)電線傳輸?shù)碾娦盘?hào)。
這里所描述的計(jì)算機(jī)可讀程序指令可以從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)下載到各個(gè)計(jì)算/處理設(shè)備,或者通過(guò)網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無(wú)線網(wǎng)下載到外部計(jì)算機(jī)或外部存儲(chǔ)設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無(wú)線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計(jì)算機(jī)和/或邊緣服務(wù)器。每個(gè)計(jì)算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計(jì)算機(jī)可讀程序指令,并轉(zhuǎn)發(fā)該計(jì)算機(jī)可讀程序指令,以供存儲(chǔ)在各個(gè)計(jì)算/處理設(shè)備中的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。
用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序指令可以是匯編指令、指令集架構(gòu)(isa)指令、機(jī)器指令、機(jī)器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語(yǔ)言的任意組合編寫(xiě)的源代碼或目標(biāo)代碼,所述編程語(yǔ)言包括面向?qū)ο蟮木幊陶Z(yǔ)言—諸如smalltalk、c++等,以及常規(guī)的過(guò)程式編程語(yǔ)言—諸如“c”語(yǔ)言或類(lèi)似的編程語(yǔ)言。計(jì)算機(jī)可讀程序指令可以完全地在用戶(hù)計(jì)算機(jī)上執(zhí)行、部分地在用戶(hù)計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶(hù)計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任意種類(lèi)的網(wǎng)絡(luò)—包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)—連接到用戶(hù)計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng)連接)。在一些實(shí)施例中,通過(guò)利用計(jì)算機(jī)可讀程序指令的狀態(tài)信息來(lái)個(gè)性化定制電子電路,例如可編程邏輯電路、現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)或可編程邏輯陣列(pla),該電子電路可以執(zhí)行計(jì)算機(jī)可讀程序指令,從而實(shí)現(xiàn)本發(fā)明的各個(gè)方面。
這里參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個(gè)方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)可讀程序指令實(shí)現(xiàn)。
這些計(jì)算機(jī)可讀程序指令可以提供給通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些指令在通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。也可以把這些計(jì)算機(jī)可讀程序指令存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,這些指令使得計(jì)算機(jī)、可編程數(shù)據(jù)處理裝置和/或其他設(shè)備以特定方式工作,從而,存儲(chǔ)有指令的計(jì)算機(jī)可讀介質(zhì)則包括一個(gè)制造品,其包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的各個(gè)方面的指令。
也可以把計(jì)算機(jī)可讀程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程,從而使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專(zhuān)用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專(zhuān)用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
在圖2中,計(jì)算機(jī)系統(tǒng)201包括處理器203,其通過(guò)一個(gè)或多個(gè)i/o接口209耦合到一個(gè)或多個(gè)硬件數(shù)據(jù)存儲(chǔ)設(shè)備211和一個(gè)或多個(gè)i/o設(shè)備213和215。在本發(fā)明的實(shí)施例中,數(shù)據(jù)存儲(chǔ)設(shè)備211包括數(shù)據(jù)存儲(chǔ)設(shè)備的多層級(jí)集合。如上所述,這樣的多層級(jí)設(shè)備211可以根據(jù)存儲(chǔ)在每個(gè)這樣的設(shè)備上的數(shù)據(jù)的特性或者根據(jù)訪問(wèn)每個(gè)所存儲(chǔ)數(shù)據(jù)元素的方式的特性被組織為(多個(gè))層級(jí)。
在一個(gè)示例中,數(shù)據(jù)存儲(chǔ)設(shè)備211的多層級(jí)集合可能包括:
-包括高速存儲(chǔ)(諸如固態(tài)設(shè)備、緩沖高速旋轉(zhuǎn)磁盤(pán)或高速緩存)的“一層”設(shè)備的第一集合,用于存儲(chǔ)必須快速檢索或頻繁修正的數(shù)據(jù);
-用于不太關(guān)鍵或不太動(dòng)態(tài)的數(shù)據(jù)的“二層”設(shè)備的第二集合,其可以包括較慢的旋轉(zhuǎn)磁盤(pán)、可重寫(xiě)光學(xué)媒體,或者其它中速存儲(chǔ)設(shè)備;和
-存儲(chǔ)靜態(tài)或不頻繁訪問(wèn)的數(shù)據(jù)的“三層”設(shè)備的第三集合,諸如只讀介質(zhì)或歸檔存儲(chǔ)庫(kù)。
如以上和圖1中所描述的,在本發(fā)明的實(shí)施例中,多層級(jí)數(shù)據(jù)存儲(chǔ)設(shè)備211的集合可以存儲(chǔ)數(shù)據(jù)庫(kù)的物理副本,如圖1中被描述為包括盤(pán)載數(shù)據(jù)結(jié)構(gòu)1001。在一個(gè)或多個(gè)處理器203以及存儲(chǔ)器駐留dbms模塊1000的所包括的程序代碼的控制下的這些結(jié)構(gòu)1001可以包括數(shù)據(jù)庫(kù)的物理副本,如圖1中所描述的盤(pán)載b樹(shù)109和盤(pán)載日志存儲(chǔ)111所表示的。
因此,硬件數(shù)據(jù)存儲(chǔ)設(shè)備211可以包括但不限于磁帶驅(qū)動(dòng)器、固定或可移動(dòng)硬盤(pán)、光盤(pán)、配備存儲(chǔ)的移動(dòng)設(shè)備以及固態(tài)隨機(jī)存取或只讀存儲(chǔ)設(shè)備。i/o設(shè)備可以包括但不限于:輸入設(shè)備213(諸如鍵盤(pán)、掃描儀、手持通信設(shè)備、觸敏顯示器、平板電腦、生物標(biāo)識(shí)讀取器、操縱桿、軌跡球或計(jì)算機(jī)鼠標(biāo));以及輸出設(shè)備215,其可以包括但不限于打印機(jī)、繪圖儀、平板電腦、移動(dòng)電話、顯示器或聲音產(chǎn)生設(shè)備。數(shù)據(jù)存儲(chǔ)設(shè)備211、輸入設(shè)備213和輸出設(shè)備215可以位于本地或遠(yuǎn)程站點(diǎn),它們通過(guò)網(wǎng)絡(luò)接口從本地或遠(yuǎn)程站點(diǎn)連接至i/o接口209。
處理器203還可以連接到一個(gè)或多個(gè)存儲(chǔ)設(shè)備205,存儲(chǔ)設(shè)備205可以包括但不限于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、可編程只讀存儲(chǔ)器(prom)、現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)、安全數(shù)字存儲(chǔ)卡、sim卡或者其它類(lèi)型的存儲(chǔ)器設(shè)備。
至少一個(gè)存儲(chǔ)器設(shè)備205包含所存儲(chǔ)的包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)程序代碼。所存儲(chǔ)的計(jì)算機(jī)程序代碼包括實(shí)施根據(jù)本發(fā)明實(shí)施例的用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法,并且可以實(shí)施本說(shuō)明書(shū)中所描述的包括圖1-5所圖示的方法的其它實(shí)施例的程序。
特別地,所存儲(chǔ)的程序代碼包括圖1中描述的存儲(chǔ)器駐留模塊1000。這些模塊1000包括接收、分析以及處理用戶(hù)查詢(xún)和其他請(qǐng)求的功能以實(shí)施數(shù)據(jù)庫(kù)事務(wù)。在一些實(shí)施例中,存儲(chǔ)器駐留模塊1000還可以包括如上所述的去重模塊。
存儲(chǔ)器駐留模塊1000以及被加載到一個(gè)或多個(gè)存儲(chǔ)器設(shè)備205中的其它計(jì)算機(jī)程序代碼被配置為由處理器203經(jīng)由存儲(chǔ)器設(shè)備205來(lái)執(zhí)行。
因此,本發(fā)明公開(kāi)了一種用于支持計(jì)算機(jī)基礎(chǔ)設(shè)施,將計(jì)算機(jī)可讀代碼集成、托管、維護(hù)和部署到計(jì)算機(jī)系統(tǒng)201至中的過(guò)程,其中與計(jì)算機(jī)系統(tǒng)201相結(jié)合的代碼能夠執(zhí)行用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法。
本發(fā)明的任意部件能夠由提供促進(jìn)用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法的服務(wù)提供方創(chuàng)建、集成、托管、維護(hù)、部署、管理、服務(wù)、支持等。因此,本發(fā)明公開(kāi)了一種用于部署或集成計(jì)算基礎(chǔ)設(shè)施的過(guò)程,包括將計(jì)算機(jī)可讀代碼集成到計(jì)算機(jī)系統(tǒng)201中,其中與計(jì)算機(jī)系統(tǒng)201組合的代碼能夠執(zhí)行用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法。
一個(gè)或多個(gè)數(shù)據(jù)存儲(chǔ)單元211(或者圖2中未示出的一個(gè)或多個(gè)附加存儲(chǔ)器設(shè)備)可以被使用作為具有體現(xiàn)于其中的計(jì)算機(jī)可讀程序和/或具有其它數(shù)據(jù)的計(jì)算機(jī)可讀硬件存儲(chǔ)設(shè)備,其中該計(jì)算機(jī)可讀程序包括所存儲(chǔ)的計(jì)算機(jī)程序代碼1000。通常,計(jì)算機(jī)系統(tǒng)201的計(jì)算機(jī)程序產(chǎn)品(或可替代地,制造品)可以包括所述計(jì)算機(jī)可讀硬件存儲(chǔ)設(shè)備211。
盡管所理解的是,可以通過(guò)將程序代碼1000加載到計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(例如,計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)設(shè)備211)中以將程序代碼1000直接手動(dòng)加載到客戶(hù)端、服務(wù)器和代理計(jì)算機(jī)(未示出)中來(lái)部署用于優(yōu)化數(shù)據(jù)庫(kù)去重的程序代碼1000,程序代碼1000也可以通過(guò)將程序代碼1000發(fā)送到中央服務(wù)器(例如,計(jì)算機(jī)系統(tǒng)201)或中央服務(wù)器組而被自動(dòng)或半自動(dòng)地部署到計(jì)算機(jī)系統(tǒng)201中。然后程序代碼1000可以被下載到將執(zhí)行程序代碼1000的客戶(hù)端計(jì)算機(jī)(未示出)中。
備選地,程序代碼1000可以經(jīng)由電子郵件被直接發(fā)送至客戶(hù)端計(jì)算機(jī)。程序代碼1000然后可以被通過(guò)選擇將程序代碼1000分派到目錄中的程序的電子郵件選項(xiàng)而被分派至客戶(hù)端計(jì)算機(jī)上的目錄或者被加載到客戶(hù)端計(jì)算機(jī)上的目錄。
另一種備選是將程序代碼1000直接發(fā)送至客戶(hù)端計(jì)算機(jī)硬盤(pán)驅(qū)動(dòng)器上的目錄。如果代理服務(wù)器被配置,則過(guò)程選擇代理服務(wù)器代碼,確定將代理服務(wù)器的代碼放在哪個(gè)計(jì)算機(jī)上,傳送代理服務(wù)器代碼,并且然后將代理服務(wù)器代碼安裝在代理計(jì)算機(jī)上。接著程序代碼1000被傳送至代理服務(wù)器并存儲(chǔ)在該代理服務(wù)器上。
在一個(gè)實(shí)施例中,用于優(yōu)化數(shù)據(jù)庫(kù)去重的程序代碼1000通過(guò)提供程序代碼1000以與軟件應(yīng)用(未示出)、操作系統(tǒng)(未示出)和網(wǎng)絡(luò)操作系統(tǒng)軟件(未顯示)共存,并且然后將程序代碼1000安裝在程序代碼將在其中工作的環(huán)境中的客戶(hù)端和服務(wù)器上而被集成到客戶(hù)端、服務(wù)器和網(wǎng)絡(luò)環(huán)境中。
以上所提到的集成程序代碼1000中所包括的代碼的第一步驟是標(biāo)識(shí)客戶(hù)端和服務(wù)器上的將在其中部署程序代碼1000的任何軟件(包括網(wǎng)絡(luò)操作系統(tǒng)(未示出)),該軟件是程序代碼1000所要求的或者結(jié)合程序代碼1000一起進(jìn)行工作。該被標(biāo)識(shí)的軟件包括網(wǎng)絡(luò)操作系統(tǒng),其中網(wǎng)絡(luò)操作系統(tǒng)包括通過(guò)添加網(wǎng)絡(luò)特征來(lái)增強(qiáng)基本操作系統(tǒng)的軟件。接下來(lái),標(biāo)識(shí)軟件應(yīng)用和版本號(hào)并且將其與已經(jīng)過(guò)測(cè)試以與程序代碼1000一起工作的軟件應(yīng)用和正確版本號(hào)的列表進(jìn)行比較。缺失或不匹配正確版本號(hào)的軟件應(yīng)用被升級(jí)到正確版本。
檢查從程序代碼1000向軟件應(yīng)用傳遞參數(shù)的程序指令,以確保指令的參數(shù)列表與程序代碼1000所需的參數(shù)列表相匹配。相反,對(duì)軟件應(yīng)用傳遞至程序代碼1000的參數(shù)進(jìn)行檢查以確保該參數(shù)匹配程序代碼1000所需的參數(shù)。客戶(hù)端和服務(wù)器操作系統(tǒng)(包括網(wǎng)絡(luò)操作系統(tǒng))被標(biāo)識(shí)并且與已經(jīng)過(guò)測(cè)試以與程序代碼1000一起工作的操作系統(tǒng)、版本號(hào)和網(wǎng)絡(luò)軟件程序的列表進(jìn)行比較。與經(jīng)測(cè)試的操作系統(tǒng)和版本號(hào)列表中的條目不匹配的操作系統(tǒng)、版本號(hào)或網(wǎng)絡(luò)軟件程序被升級(jí)為客戶(hù)端計(jì)算機(jī)上所列出的級(jí)別以及被升級(jí)為服務(wù)器計(jì)算機(jī)上所列出的級(jí)別。
在確保要部署程序代碼1000的軟件為已經(jīng)過(guò)測(cè)試以與程序代碼1000一起工作的正確版本級(jí)別之后,通過(guò)在客戶(hù)端和服務(wù)器上安裝程序代碼1000而完成集成。
本發(fā)明的實(shí)施例可以被實(shí)施為由計(jì)算機(jī)系統(tǒng)的處理器所執(zhí)行的方法、計(jì)算機(jī)程序產(chǎn)品、計(jì)算機(jī)系統(tǒng),或者被實(shí)施為處理器執(zhí)行的用于支持計(jì)算機(jī)基礎(chǔ)設(shè)施的過(guò)程或服務(wù)。
圖3-5圖示了根據(jù)本發(fā)明的用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法,并且論證了本發(fā)明相比已有技術(shù)的技術(shù)優(yōu)勢(shì)。
圖3是圖示根據(jù)本發(fā)明實(shí)施例的用于優(yōu)化數(shù)據(jù)庫(kù)去重的方法的流程圖。圖3包括步驟301-317。
圖4示出了根據(jù)本發(fā)明實(shí)施例的圖3中響應(yīng)于圖3的步驟317而執(zhí)行優(yōu)化去重程序的步驟的細(xì)節(jié)。圖4包括步驟401-417。
圖5示出了根據(jù)本發(fā)明實(shí)施例的可以被數(shù)據(jù)庫(kù)管理系統(tǒng)用來(lái)對(duì)數(shù)據(jù)庫(kù)去重進(jìn)行優(yōu)化的數(shù)據(jù)表的示例。圖5包括步驟5001和5002。
圖3的方法被作為數(shù)據(jù)庫(kù)管理系統(tǒng)在兩個(gè)存儲(chǔ)管理表中所存儲(chǔ)數(shù)據(jù)的函數(shù)來(lái)執(zhí)行。圖5示出了這些表格的示例,它們被標(biāo)記為表i5001和表ii5002。
在這里也被稱(chēng)作多層級(jí)信息表的表i5001標(biāo)識(shí)與數(shù)據(jù)庫(kù)管理系統(tǒng)所使用的每個(gè)邏輯塊相關(guān)聯(lián)的存儲(chǔ)層級(jí)。例如,在圖5中,表i標(biāo)識(shí)了邏輯塊l100標(biāo)識(shí)存儲(chǔ)在層級(jí)i(高速固態(tài))存儲(chǔ)設(shè)備上的數(shù)據(jù),并且邏輯塊l202標(biāo)識(shí)了存儲(chǔ)在層級(jí)ii(較低速硬盤(pán)驅(qū)動(dòng)器)存儲(chǔ)設(shè)備上的數(shù)據(jù)。
將存儲(chǔ)設(shè)備組織為多個(gè)層級(jí)以及邏輯塊與特定層級(jí)進(jìn)行關(guān)聯(lián)的標(biāo)準(zhǔn)可以是依賴(lài)于實(shí)施方式的。但是在所有情況下,數(shù)據(jù)庫(kù)管理系統(tǒng)的部件無(wú)論其何時(shí)需要確定哪個(gè)存儲(chǔ)層級(jí)與具體邏輯塊相關(guān)聯(lián)都會(huì)參考類(lèi)似于表i5001的表格。
在一些實(shí)施例中,表i可以進(jìn)一步標(biāo)識(shí)如特定實(shí)施方式所要求的每個(gè)邏輯塊的其它屬性。例如,在圖5中,表i還包括“訪問(wèn)計(jì)數(shù)”列,其標(biāo)識(shí)與每個(gè)邏輯塊相關(guān)聯(lián)的值,該值標(biāo)識(shí)塊被訪問(wèn)或更新的相對(duì)頻率。在其中多個(gè)塊根據(jù)該塊有多頻繁地被訪問(wèn)或更新而被分配至(多個(gè))層級(jí)的實(shí)施方式中,這樣的值可以與相對(duì)應(yīng)邏輯塊的存儲(chǔ)層級(jí)相關(guān)聯(lián)。特別地,在確定要被去重的塊的對(duì)是否占據(jù)相同層級(jí)時(shí),背景樹(shù)構(gòu)建器將在圖3的步驟315中參考該表格。
在這里也被稱(chēng)作去重表的表ii5002包含每個(gè)物理磁盤(pán)塊的條目,其標(biāo)識(shí)塊的特性。在圖5的示例中,去重表5002標(biāo)識(shí)每個(gè)塊是否空閑以與邏輯塊相關(guān)聯(lián)或者已經(jīng)被分配至一個(gè)或多個(gè)邏輯塊。如果已經(jīng)被分配,則表5002進(jìn)一步列出與該物理塊相關(guān)聯(lián)的邏輯塊。
在一些實(shí)施例中,去重表5002可以進(jìn)一步列出相對(duì)應(yīng)物理塊中所存儲(chǔ)數(shù)據(jù)的散列值。如上所述,散列值是唯一標(biāo)識(shí)數(shù)據(jù)值并且通過(guò)對(duì)數(shù)據(jù)值執(zhí)行復(fù)雜數(shù)學(xué)運(yùn)算所生成的數(shù)字實(shí)體。如果兩個(gè)不同物理塊的內(nèi)容生成了相同的散列值,則數(shù)據(jù)庫(kù)管理系統(tǒng)假定這兩個(gè)塊存儲(chǔ)相同的數(shù)據(jù)。在一些實(shí)施例中,表i5000和表ii5002中的任一個(gè)或其二者可以進(jìn)一步包括其它信息。
如下文將更詳細(xì)描述的,如果數(shù)據(jù)庫(kù)管理系統(tǒng)嘗試更新邏輯塊l100,則該系統(tǒng)的去重模塊或其它部件將為要被寫(xiě)入塊的經(jīng)更新的值計(jì)算散列值。如果所計(jì)算的散列值與表ii5002中已經(jīng)列舉的物理塊p100的散列值相匹配,則邏輯塊l100可以被添加至表ii針對(duì)p100的條目,并且沒(méi)有新的物理塊將與邏輯塊l100相關(guān)聯(lián)。
然而,如果去重器確定表ii中并沒(méi)有標(biāo)識(shí)與經(jīng)更新的邏輯塊l100相匹配的散列值的已有條目,則l100將被添加至表ii中針對(duì)尚未分配的物理塊的條目。在后一種情況下,系統(tǒng)然后可以將邏輯塊l100的經(jīng)更新的數(shù)據(jù)存儲(chǔ)在新分配的物理塊中。
類(lèi)似地,如果數(shù)據(jù)庫(kù)管理系統(tǒng)接收到讀取邏輯塊l101的內(nèi)容的請(qǐng)求,則系統(tǒng)將參照去重表5002以便標(biāo)識(shí)存儲(chǔ)與邏輯塊l101相關(guān)聯(lián)的數(shù)據(jù)的物理塊。系統(tǒng)然后引導(dǎo)物理存儲(chǔ)設(shè)備控制器返回相關(guān)聯(lián)的物理塊中所存儲(chǔ)的數(shù)據(jù)。
圖3的方法還參照由數(shù)據(jù)庫(kù)管理系統(tǒng)維護(hù)的兩個(gè)邏輯塊列表以對(duì)數(shù)據(jù)庫(kù)中所存儲(chǔ)的數(shù)據(jù)進(jìn)行組織、訪問(wèn)或更新:
-日志塊(logblock)列表列舉與已經(jīng)響應(yīng)于用戶(hù)請(qǐng)求或其它事務(wù)而被更新的數(shù)據(jù)庫(kù)記錄的經(jīng)更新的值相關(guān)聯(lián)的每個(gè)邏輯塊。這些所列舉的邏輯塊均與經(jīng)更新的記錄相關(guān)聯(lián),如其被存儲(chǔ)在存儲(chǔ)器駐留日志存儲(chǔ)107中那樣,直至該記錄的經(jīng)更新的值被背景樹(shù)構(gòu)建器103物理寫(xiě)入數(shù)據(jù)庫(kù)b樹(shù)109;和
-已有塊(existingblock)列表標(biāo)識(shí)將存儲(chǔ)經(jīng)更新的記錄在其被存儲(chǔ)在b樹(shù)109中時(shí)所包括的數(shù)據(jù)的邏輯塊。
圖3和圖4的示例性實(shí)施例還取決于某些依賴(lài)于實(shí)施方式的假設(shè),但是這些依賴(lài)并不應(yīng)當(dāng)被解釋為將本發(fā)明的所有實(shí)施例都限制于這樣的假設(shè)。例如,圖3和圖4的實(shí)施例假定數(shù)據(jù)庫(kù)記錄的存儲(chǔ)容量或大小決不會(huì)小于單個(gè)邏輯塊。它們還依賴(lài)于每個(gè)數(shù)據(jù)庫(kù)記錄的邊界與邏輯塊的邊界對(duì)齊的假設(shè)—也就是說(shuō),每個(gè)數(shù)據(jù)庫(kù)記錄包括一個(gè)或多個(gè)完整的邏輯塊。
在其它變型中,實(shí)施例可以包括包含多于一個(gè)完整邏輯塊的數(shù)據(jù)庫(kù)記錄;或者,如果實(shí)施例允許記錄包括部分邏輯塊,則在與圖3或圖4相似的方法中可以需要附加步驟以便確保記錄、邏輯塊和物理塊被適當(dāng)對(duì)齊從而實(shí)現(xiàn)本發(fā)明的目標(biāo)。
圖3的方法在步驟301以數(shù)據(jù)庫(kù)管理系統(tǒng)的部件讀取存儲(chǔ)器駐留日志存儲(chǔ)107的條目開(kāi)始。每個(gè)條目標(biāo)識(shí)數(shù)據(jù)庫(kù)事務(wù)(諸如更新數(shù)據(jù)庫(kù)記錄的值的請(qǐng)求、或者添加、刪除或復(fù)制記錄的請(qǐng)求)。在本文所描述的示例中,系統(tǒng)讀取標(biāo)識(shí)數(shù)據(jù)庫(kù)記錄r100的經(jīng)更新的值的日志條目。
在一些實(shí)施例中,系統(tǒng)可以替代地從盤(pán)載日志存儲(chǔ)111讀取條目,或者可以從日志存儲(chǔ)107和111二者讀取條目。
步驟303開(kāi)始步驟303-317的迭代過(guò)程,其針對(duì)由步驟301中所讀取的日志條目更新的每條記錄重復(fù)一次。出于教導(dǎo)的目的,我們將正在被迭代程序的當(dāng)前迭代所處理的記錄稱(chēng)為記錄“r100”,但是這并不應(yīng)當(dāng)被解釋為暗示不同的記錄r100被處理多于一次。例如,如果三條記錄被步驟301中讀取的日志條目所更新,則步驟303-317的迭代程序?qū)⑨槍?duì)那三條記錄中的每一條執(zhí)行一次。
在步驟305,在經(jīng)更新的值在日志存儲(chǔ)107(或111)中被表示時(shí),系統(tǒng)標(biāo)識(shí)當(dāng)前記錄r100的經(jīng)更新的值所包括的那些邏輯塊。該邏輯塊列表可以從以上所描述的由數(shù)據(jù)庫(kù)管理系統(tǒng)所保存的日志塊列表讀取。
在一些實(shí)施例中,數(shù)據(jù)庫(kù)管理系統(tǒng)在該步驟中還將確保經(jīng)更新的記錄r100的邊界與從日志塊列表讀取的邏輯塊的邊界適當(dāng)對(duì)齊。例如,如果邏輯塊集合包括2048kb的數(shù)據(jù),但是記錄r100的大小無(wú)法超過(guò)1024個(gè)kb,則系統(tǒng)可能在該步驟返回錯(cuò)誤并且停止圖3的方法或者步驟303-317的當(dāng)前迭代的進(jìn)一步處理。
在步驟307,系統(tǒng)獲取并評(píng)估與存儲(chǔ)在盤(pán)載b樹(shù)數(shù)據(jù)庫(kù)109中的記錄r100的已有版本相關(guān)聯(lián)的“已有”邏輯塊的列表。在一些實(shí)施例中,該已有邏輯塊的列表可以從以上所描述的已有塊列表讀取。由于已有塊列表存儲(chǔ)在存儲(chǔ)器中,所以步驟307的該部件可以在沒(méi)有要求訪問(wèn)輔存儲(chǔ)的方法的開(kāi)銷(xiāo)的情況下被執(zhí)行。
然而,在包括該圖中所描述的那些的其它實(shí)施例中,該已有塊的列表替代地從盤(pán)載b樹(shù)109的文件系統(tǒng)、索引或其它數(shù)據(jù)結(jié)構(gòu)的表格讀取。因?yàn)檫@些邏輯塊列表可能被頻繁訪問(wèn),所以在許多實(shí)施方式中,它們被存儲(chǔ)在諸如磁盤(pán)高速緩存或固態(tài)存儲(chǔ)設(shè)備的高速介質(zhì)中。因此,即使實(shí)施例為了完成該步驟而必須執(zhí)行磁盤(pán)i/o操作,該i/o操作也可以不會(huì)造成數(shù)量無(wú)法接受的開(kāi)銷(xiāo)。
如果這些已有邏輯塊—之前已經(jīng)被分配給b樹(shù)數(shù)據(jù)庫(kù)109中所存儲(chǔ)的記錄r100的已有的、預(yù)先更新版本的那些塊—能夠被背景樹(shù)構(gòu)建器103在更新b樹(shù)109中的記錄r100時(shí)重用,則圖3的方法以步驟309-317繼續(xù)進(jìn)行。如果邏輯塊不能以這種方式重用,則圖3的方法替代地以步驟311繼續(xù)進(jìn)行,其執(zhí)行常規(guī)的、更高開(kāi)銷(xiāo)的記錄更新過(guò)程。
數(shù)據(jù)庫(kù)管理系統(tǒng)在步驟307通過(guò)將那些邏輯塊(在該步驟中從盤(pán)載b樹(shù)109或者存儲(chǔ)器駐留已有塊列表所獲取)同與記錄r100經(jīng)更新的版本相關(guān)聯(lián)的邏輯塊(在步驟305中從存儲(chǔ)器駐留日志塊列表所獲取)進(jìn)行比較以確定已有邏輯塊是否可以被重用。如果已有塊的大小或存儲(chǔ)容量未至少等于經(jīng)更新的塊的大小或存儲(chǔ)容量,則日志存儲(chǔ)107(或111)所標(biāo)識(shí)的記錄r100的經(jīng)更新的數(shù)據(jù)不能被存儲(chǔ)在已有塊中,并且步驟303-317的本次迭代以步驟311中常規(guī)的更高開(kāi)銷(xiāo)的記錄更新程序結(jié)束。
如果系統(tǒng)在步驟307確定塊足夠大以存儲(chǔ)經(jīng)更新的記錄r100的數(shù)據(jù),并且滿(mǎn)足重用的任何其它實(shí)施方式相關(guān)的條件,則該系統(tǒng)繼續(xù)進(jìn)行到步驟309。
在步驟309,該系統(tǒng)將步驟307中所標(biāo)識(shí)的已有邏輯塊的列表添加至已有塊列表的條目。該條目(在其尚未這樣做的情況下)現(xiàn)在標(biāo)識(shí)當(dāng)前被用來(lái)在b樹(shù)數(shù)據(jù)庫(kù)109中存儲(chǔ)記錄r100的邏輯塊。
在步驟313,數(shù)據(jù)庫(kù)管理系統(tǒng)將多層級(jí)信息表5000中的條目進(jìn)行比較以確定記錄r100的經(jīng)更新的值的每個(gè)邏輯塊(現(xiàn)在在日志塊列表中列出)是否駐留在與記錄r100的已有版本的對(duì)應(yīng)的邏輯塊(在步驟309中被添加至已有塊列表)相同的存儲(chǔ)層級(jí)中。
如果該比較顯示對(duì)應(yīng)的更新日志塊邏輯塊和已有的已有塊邏輯塊的相對(duì)應(yīng)的對(duì)占據(jù)相同的存儲(chǔ)層級(jí),則日志塊邏輯塊被更新,并且考慮利用步驟315以及圖4的方法進(jìn)行去重。
然而,如果該比較揭露對(duì)應(yīng)的經(jīng)更新的和已有邏輯塊的對(duì)占據(jù)不同的存儲(chǔ)層級(jí),則該邏輯塊被更新,并且可能在稍后考慮在步驟317中通過(guò)常規(guī)手段進(jìn)行去重。
在實(shí)施例中,步驟313-317順序地對(duì)邏輯塊的每個(gè)經(jīng)更新的/已有的對(duì)進(jìn)行評(píng)估。在這樣的情況下,記錄r100的一些邏輯塊可以被更新,并且可能利用步驟315以及圖4的方法進(jìn)行去重,而其它邏輯塊則可以被更新并且可能利用如以上所描述以及如步驟317所執(zhí)行的常規(guī)手段進(jìn)行去重。
在其它實(shí)施方式中,r100的所有邏輯塊按照定義都可以被存儲(chǔ)在相同層級(jí)中,這是因?yàn)閷?duì)邏輯塊的存儲(chǔ)層級(jí)的選擇可能是整個(gè)記錄的特性的函數(shù)。也就是說(shuō),在這樣的實(shí)施方式中,在確定邏輯塊的存儲(chǔ)層級(jí)時(shí)可能無(wú)法超出記錄級(jí)別的粒度。
在這樣的情況下,步驟313的確定將針對(duì)記錄100的整體執(zhí)行一次,并且該記錄的所有邏輯塊將通過(guò)相同的程序被更新。如上所述,該程序可以包括步驟314以及圖4的方法,或者可以包括步驟317的常規(guī)程序。
在步驟315,在確定了與記錄r100相關(guān)聯(lián)的對(duì)應(yīng)的經(jīng)更新的和已有邏輯塊的對(duì)能夠通過(guò)本發(fā)明的方法進(jìn)行去重的情況下,數(shù)據(jù)庫(kù)管理系統(tǒng)向去重器模塊標(biāo)識(shí)該邏輯塊對(duì)以利用圖4的方法進(jìn)行處理。
在一些實(shí)施例中,所有對(duì)應(yīng)的邏輯塊對(duì)在步驟315作為形式為<日志塊[],已有塊[]>的有序?qū)Φ牧斜肀晦D(zhuǎn)發(fā)至去重器,其中每個(gè)有序?qū)?biāo)識(shí)在步驟305從日志存儲(chǔ)所挑選的經(jīng)更新的記錄r100的邏輯塊以及在步驟307中所標(biāo)識(shí)的b樹(shù)109中的r100的對(duì)應(yīng)的已有塊。在這樣的情況下,去重器將在圖4的步驟401接收到這樣的經(jīng)更新的塊/已有塊的對(duì)的列表。
邏輯塊的經(jīng)更新的/已有的對(duì)應(yīng)當(dāng)被轉(zhuǎn)發(fā)至去重器的確定可以是依賴(lài)于實(shí)施方式的因素的函數(shù)。這些因素可以包括但并不限制于:
-已有塊具有充分存儲(chǔ)容量來(lái)存儲(chǔ)步驟301中讀取的日志條目所標(biāo)識(shí)的經(jīng)更新的數(shù)據(jù)元素的確定;
-由與記錄r100相關(guān)聯(lián)的已有塊列表的多個(gè)條目整體上標(biāo)識(shí)的所有已有塊具有足夠的存儲(chǔ)容量來(lái)存儲(chǔ)步驟301中讀取的日志條目所標(biāo)識(shí)的經(jīng)更新的r100的數(shù)據(jù)的確定;或者
-r100邏輯塊的經(jīng)更新的/已有的對(duì)的兩個(gè)邏輯塊與相同存儲(chǔ)層級(jí)相關(guān)聯(lián)或者標(biāo)識(shí)駐留在相同存儲(chǔ)層級(jí)中的物理存儲(chǔ)塊的確定。
在圖4的步驟401,根據(jù)本發(fā)明的實(shí)施例,去重模塊接收數(shù)據(jù)庫(kù)管理系統(tǒng)在圖3的步驟315所生成的邏輯塊的一個(gè)或多個(gè)有序?qū)?。這些有序?qū)χ械拿恳粋€(gè)標(biāo)識(shí)被調(diào)度以根據(jù)存儲(chǔ)器駐留日志存儲(chǔ)107(或盤(pán)載日志111)被更新的數(shù)據(jù)庫(kù)記錄的邏輯塊以及盤(pán)載b樹(shù)數(shù)據(jù)庫(kù)109中所存儲(chǔ)的相同數(shù)據(jù)庫(kù)記錄的當(dāng)前已有版本所對(duì)應(yīng)的邏輯塊。
不同于常規(guī)的去重方法,按照本發(fā)明的方法,該有序?qū)σ呀?jīng)被數(shù)據(jù)庫(kù)管理系統(tǒng)中去重模塊以外的模塊所標(biāo)識(shí)。如上所述,該標(biāo)識(shí)在這里被完成而不需要邏輯塊之間的冗余數(shù)據(jù)復(fù)制或者不必要的輔存儲(chǔ)i/o,替代地利用了數(shù)據(jù)庫(kù)管理系統(tǒng)已經(jīng)記錄了足以確定邏輯塊的有序?qū)κ侨ブ睾蜻x的信息的事實(shí)。
步驟403開(kāi)始步驟403-407的迭代程序。該程序針對(duì)步驟401中所接收的每個(gè)有序?qū)χ貜?fù)一次。在該迭代程序的描述中,當(dāng)前被處理的有序?qū)⒈粯?biāo)識(shí)為包括經(jīng)更新的邏輯塊“日志塊”(最初由步驟305中的日志條目所標(biāo)識(shí))以及對(duì)應(yīng)的相同記錄的已有塊“已有塊”(最初在步驟307中從已有塊列表中被標(biāo)識(shí))。
在步驟405,去重模塊在表ii5002(去重表)中搜索與經(jīng)更新的塊日志塊相關(guān)聯(lián)的條目。該條目標(biāo)識(shí)存儲(chǔ)由邏輯塊標(biāo)識(shí)為將被寫(xiě)入包括邏輯塊日志塊的經(jīng)更新的數(shù)據(jù)庫(kù)記錄的數(shù)據(jù)的物理存儲(chǔ)塊。如圖5所示,這樣的記錄可能在“物理塊”字段中列出物理塊的地址,并且在“引用邏輯塊”字段中列出日志塊的地址。
在步驟407,去重模塊將已有塊的地址添加至在步驟405中所獲取的去重表5002的引用邏輯塊字段。該添加指示日志塊和已有塊現(xiàn)在都與相同的物理塊相關(guān)聯(lián)。b樹(shù)109中之前已經(jīng)與邏輯塊已有塊相關(guān)聯(lián)的物理塊現(xiàn)在與邏輯塊已有塊解除關(guān)聯(lián)并且之前相關(guān)聯(lián)的塊現(xiàn)在可以被釋放從而被用于其它用途。
在一些實(shí)施例中,可以執(zhí)行該方法的變型,其中日志塊和已有塊都與b樹(shù)109中之前已經(jīng)與邏輯塊已有塊相關(guān)聯(lián)的物理塊以外的物理塊相關(guān)聯(lián)。雖然并未提供本文所描述的其它實(shí)施例的一些技術(shù)優(yōu)勢(shì),但是這種變型在某些情形中提供了依賴(lài)于實(shí)施方式的益處。
以這種方式,去重模塊已經(jīng)執(zhí)行了允許日志塊和已有塊邏輯塊都指向單個(gè)共同物理塊的去重。此外,不同于常規(guī)的去重方法,該去重是在沒(méi)有額外的散列運(yùn)算、磁盤(pán)i/o或冗余數(shù)據(jù)復(fù)制的情況下實(shí)現(xiàn)的,這是因?yàn)樗ブ氐倪壿媺K對(duì)已經(jīng)被其它數(shù)據(jù)庫(kù)管理模塊(諸如背景樹(shù)構(gòu)建器103)作為它們的正常操作程序的一部分所標(biāo)識(shí)并量化。
在步驟403-407的迭代程序的最終迭代結(jié)束時(shí),所有的日志塊/已有塊對(duì)都已經(jīng)被去重并且圖4的方法結(jié)束。此時(shí),與記錄的數(shù)據(jù)庫(kù)事務(wù)相關(guān)的并且能夠利用去重過(guò)程被釋放的所有邏輯塊都已經(jīng)被去重。