專利名稱:并發(fā)地訪問數(shù)據(jù)的制作方法
技術領域:
本發(fā)明涉及用于并發(fā)地訪問數(shù)據(jù)庫中的數(shù)據(jù)的各種技術。
背景技術:
某些應用將元數(shù)據(jù)與文件進行關聯(lián)。這些應用或者將文件存儲在文件系統(tǒng)中并將元數(shù)據(jù)存儲在數(shù)據(jù)庫中,或者它們將文件存儲在數(shù)據(jù)庫內。將文件存儲在文件系統(tǒng)中并將元數(shù)據(jù)存儲在數(shù)據(jù)庫中一般導致管理這兩個存儲的問題。將文件連同元數(shù)據(jù)一起存儲在數(shù)據(jù)庫中一般導致基于文件的應用不能夠直接訪問文件。各應用應當能夠將文件與數(shù)據(jù)庫緊密地相關聯(lián)地存儲,通過基于文件的應用來訪問文件,并通過基于數(shù)據(jù)的應用來操縱諸如文件屬性等元數(shù)據(jù)。數(shù)據(jù)庫管理系統(tǒng)中的基于文件的組件和基于數(shù)據(jù)庫的組件(即,基于文件的應用或者程序和基于數(shù)據(jù)庫的應用或程序)兩者都訪問、讀取、文件中的數(shù)據(jù)并向該數(shù)據(jù)寫入, 以及訪問、讀取與該同一文件相關聯(lián)的元數(shù)據(jù)并向該元數(shù)據(jù)寫入。元數(shù)據(jù)一般包括與文件相關的屬性,如文件的創(chuàng)建日期、作者、大小等,而數(shù)據(jù)一般指的是文件中包含的信息,如文檔中的添加的文本。一般而言,任何文件的元數(shù)據(jù)被存儲在文件系統(tǒng)(例如,NTFS-新技術文件系統(tǒng))上的數(shù)據(jù)庫文件(例如,MDF文件-微軟數(shù)據(jù)文件)中,而該文件的數(shù)據(jù)被存儲在與該數(shù)據(jù)庫文件相同或不同的文件系統(tǒng)中的單獨文件(例如,文件系統(tǒng)文件)。在數(shù)據(jù)庫管理系統(tǒng)中的基于數(shù)據(jù)庫的組件(即,數(shù)據(jù)庫組件)訪問存儲在數(shù)據(jù)庫文件中的元數(shù)據(jù)時,該數(shù)據(jù)庫組件可以從該數(shù)據(jù)庫管理系統(tǒng)上的鎖管理器請求對應元數(shù)據(jù)上的共享鎖或獨占鎖。取決于鎖管理器發(fā)放給數(shù)據(jù)庫組件的鎖的類型,數(shù)據(jù)庫組件可以允許多個數(shù)據(jù)庫組件訪問該數(shù)據(jù)/元數(shù)據(jù)(即,共享鎖)或可以只允許單個數(shù)據(jù)庫組件訪問該數(shù)據(jù)/元數(shù)據(jù)(即,獨占鎖)。然而,在基于文件的組件(文件系統(tǒng)組件)訪問存儲在文件系統(tǒng)文件中的數(shù)據(jù)時, 文件系統(tǒng)組件一般指定對該數(shù)據(jù)的訪問模式的類型和共享模式的類型。訪問模式定義文件系統(tǒng)組件是否將對該數(shù)據(jù)執(zhí)行各種動作,如讀取該數(shù)據(jù)、向該數(shù)據(jù)寫入、或讀取該數(shù)據(jù)并向該數(shù)據(jù)寫入。共享模式定義文件系統(tǒng)組件是否將對該數(shù)據(jù)執(zhí)行訪問模式所定義的各動作, 同時允許其他文件系統(tǒng)組件并發(fā)地讀取該同一數(shù)據(jù)并向該數(shù)據(jù)寫入。在某些情況下,數(shù)據(jù)可以與元數(shù)據(jù)一起存儲在數(shù)據(jù)庫文件中。如此,文件系統(tǒng)組件訪問數(shù)據(jù)庫文件以對該數(shù)據(jù)執(zhí)行它的動作。因為數(shù)據(jù)庫組件不像文件系統(tǒng)組件那樣在訪問數(shù)據(jù)庫文件上的數(shù)據(jù)或元數(shù)據(jù)時定義所需的訪問模式和共享模式,所以在數(shù)據(jù)庫組件和文件系統(tǒng)組件兩者都請求訪問數(shù)據(jù)庫文件上的同一數(shù)據(jù)或元數(shù)據(jù)時,這兩組件之間發(fā)生沖突。
發(fā)明內容
本文描述了用于并發(fā)地訪問數(shù)據(jù)庫中的數(shù)據(jù)的各種技術的實現(xiàn)。數(shù)據(jù)庫管理系統(tǒng)中的基于文件的組件和基于數(shù)據(jù)庫的組件(即,基于文件的應用或者程序和基于數(shù)據(jù)庫的應用或程序)兩者都訪問、讀取文件中的數(shù)據(jù)并向該數(shù)據(jù)寫入,以及訪問、讀取與該同一文件相關聯(lián)的元數(shù)據(jù)并向該元數(shù)據(jù)寫入。元數(shù)據(jù)包括與文件相關的屬性,如文件的創(chuàng)建日期、 作者、大小等,而數(shù)據(jù)一般指的是文件中包含的信息,如添加到文檔中的文本。一般而言,任何文件的元數(shù)據(jù)被存儲在文件系統(tǒng)(例如,NTFS-新技術文件系統(tǒng))上的數(shù)據(jù)庫文件(例如,MDF文件-微軟數(shù)據(jù)文件)中,其中一指針指向存儲該文件(文件系統(tǒng)文件)的數(shù)據(jù)的單獨文件。該單獨文件可被存儲在與該數(shù)據(jù)庫文件相同或不同的文件系統(tǒng)中。然而,為了更好地管理對數(shù)據(jù)和元數(shù)據(jù)的訪問,該數(shù)據(jù)可與元數(shù)據(jù)一起被存儲在數(shù)據(jù)庫文件中。數(shù)據(jù)庫管理系統(tǒng)中的基于數(shù)據(jù)庫的組件(即,數(shù)據(jù)庫組件)可以管理來自數(shù)據(jù)庫應用的對執(zhí)行諸如更新、讀取存儲在數(shù)據(jù)庫文件中的元數(shù)據(jù)或向該元數(shù)據(jù)寫入等動作的請求。如此,在數(shù)據(jù)庫組件訪問存儲在數(shù)據(jù)庫文件中的元數(shù)據(jù)時,該數(shù)據(jù)庫組件可以從數(shù)據(jù)庫管理系統(tǒng)上的鎖管理器請求對應元數(shù)據(jù)上的共享鎖或獨占鎖。取決于鎖管理器發(fā)放給數(shù)據(jù)庫組件的鎖的類型,數(shù)據(jù)庫組件可以允許多個數(shù)據(jù)庫應用訪問該數(shù)據(jù)/元數(shù)據(jù)(即,共享鎖)或可以只允許單個數(shù)據(jù)庫應用訪問該數(shù)據(jù)/元數(shù)據(jù)(即,獨占鎖)。數(shù)據(jù)庫管理系統(tǒng)中的基于文件的組件(即,文件系統(tǒng)組件)可以管理來自文件系統(tǒng)應用的對執(zhí)行諸如更新、讀取存儲在數(shù)據(jù)庫文件中的數(shù)據(jù)或存儲在文件系統(tǒng)文件中的數(shù)據(jù)或向該數(shù)據(jù)寫入等動作的請求。一般而言,在文件系統(tǒng)組件訪問存儲在文件系統(tǒng)文件中的數(shù)據(jù)時,文件系統(tǒng)組件可指定對該數(shù)據(jù)的訪問模式的類型和共享模式的類型。訪問模式定義文件系統(tǒng)組件是否將對該數(shù)據(jù)執(zhí)行各種動作,如讀取該數(shù)據(jù)、向該數(shù)據(jù)寫入、或讀取該數(shù)據(jù)并向該數(shù)據(jù)寫入。共享模式定義文件系統(tǒng)組件是否將對該數(shù)據(jù)執(zhí)行訪問模式所定義的各動作,同時允許其他文件系統(tǒng)組件并發(fā)地讀取該同一數(shù)據(jù)并向該數(shù)據(jù)寫入。然而,在文件系統(tǒng)組件訪問數(shù)據(jù)庫文件中的數(shù)據(jù)時,數(shù)據(jù)庫組件和文件系統(tǒng)組件之間發(fā)生沖突,因為數(shù)據(jù)庫組件不能理解或處理文件系統(tǒng)組件所指定的模式。如此,在數(shù)據(jù)庫組件和文件系統(tǒng)組件都請求訪問數(shù)據(jù)庫文件上的同一數(shù)據(jù)或元數(shù)據(jù)時,這兩個組件之間將發(fā)生沖突。為了便于文件系統(tǒng)組件和數(shù)據(jù)庫組件對數(shù)據(jù)的并發(fā)訪問,文件系統(tǒng)組件可以首先生成文件系統(tǒng)組件的模式與數(shù)據(jù)庫組件的鎖之間的映射。在生成文件系統(tǒng)組件的模式與數(shù)據(jù)庫組件的鎖之間的映射之后,文件系統(tǒng)組件可以從文件系統(tǒng)棧接收對存儲在數(shù)據(jù)庫文件上的數(shù)據(jù)或元數(shù)據(jù)執(zhí)行某一動作的請求。在接收到該請求之后,文件系統(tǒng)組件可以基于該映射來確定對元數(shù)據(jù)所請求的動作的數(shù)據(jù)庫等效鎖。文件系統(tǒng)組件隨后向數(shù)據(jù)庫鎖管理器發(fā)送對與所請求的動作相關的數(shù)據(jù)或元數(shù)據(jù)上的數(shù)據(jù)庫等效鎖的請求。在一個實現(xiàn)中,文件系統(tǒng)組件可以請求數(shù)據(jù)/元數(shù)據(jù)上的通知鎖。如果該數(shù)據(jù)/元數(shù)據(jù)當前具有與該通知鎖相沖突的數(shù)據(jù)庫鎖,則數(shù)據(jù)庫鎖管理器可以向文件系統(tǒng)組件發(fā)送指示該沖突的錯誤。然而, 如果該數(shù)據(jù)/元數(shù)據(jù)上沒有鎖,則數(shù)據(jù)庫鎖管理器可以向文件系統(tǒng)組件發(fā)放該數(shù)據(jù)/元數(shù)據(jù)上的所請求的通知鎖。在發(fā)放了數(shù)據(jù)/元數(shù)據(jù)上的通知鎖之后,文件系統(tǒng)組件隨后可以將該數(shù)據(jù)/元數(shù)據(jù)存儲在高速緩存中,使得對該數(shù)據(jù)/元數(shù)據(jù)的將來請求可被更快地處理。 在一個實現(xiàn)中,即使不存在使用該數(shù)據(jù)/元數(shù)據(jù)的活動句柄,文件系統(tǒng)組件也可以在將該數(shù)據(jù)/元數(shù)據(jù)存儲在高速緩存中時繼續(xù)保持該數(shù)據(jù)/元數(shù)據(jù)上的通知鎖。在數(shù)據(jù)庫組件請求訪問具有文件系統(tǒng)組件所保持的通知鎖的數(shù)據(jù)/元數(shù)據(jù)時,文件系統(tǒng)組件可以從數(shù)據(jù)庫鎖管理器接收指示數(shù)據(jù)庫組件已請求該通知鎖以獲取對該數(shù)據(jù)/元數(shù)據(jù)的訪問權的通知。在從數(shù)據(jù)庫鎖管理器接收到該通知之后,文件系統(tǒng)組件可以基于活動句柄是否關閉了該數(shù)據(jù)/元數(shù)據(jù)來確定它是將釋放該數(shù)據(jù)/元數(shù)據(jù)上的通知鎖還是將繼續(xù)保持該數(shù)據(jù)/元數(shù)據(jù)上的通知鎖。如果文件系統(tǒng)組件的活動句柄關閉了該數(shù)據(jù)/元數(shù)據(jù)(即,該數(shù)據(jù)/元數(shù)據(jù)被存儲在高速緩存中),則文件系統(tǒng)組件可以釋放該數(shù)據(jù)/元數(shù)據(jù)上的通知鎖以允許數(shù)據(jù)庫組件訪問該數(shù)據(jù)/元數(shù)據(jù)。然而,如果文件系統(tǒng)組件的活動句柄當前正在訪問該數(shù)據(jù)/元數(shù)據(jù)或者是打開的,則文件系統(tǒng)組件可以繼續(xù)保持該通知鎖直至活動句柄關閉為止。在活動句柄關閉之后,文件系統(tǒng)組件可記起接收到了通知并且它隨后可釋放與該數(shù)據(jù)/元數(shù)據(jù)相關聯(lián)的通知鎖,以使得數(shù)據(jù)庫組件可以獲得對該元數(shù)據(jù)的訪問權。提供以上引用的發(fā)明內容章節(jié)以便以簡化形式介紹將在以下具體實施方式
章節(jié)中進一步描述的一些概念。本發(fā)明內容并不旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于限制所要求保護的主題的范圍。此外,所要求保護的主題不限于解決在本發(fā)明的任一部分中提及的任何或所有缺點的實現(xiàn)。
圖1示出其中可結合和實踐此處所描述的各種技術的計算系統(tǒng)的示意圖。圖2示出其中可結合和實踐此處所描述的各種技術的數(shù)據(jù)庫系統(tǒng)的示意圖。圖3示出根據(jù)此處描述的各種技術的一個或多個實現(xiàn)的用于便于對數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)的并發(fā)訪問的方法的流程圖。圖4示出其中可以結合和實踐此處所描述的各種技術的示例系統(tǒng)。
具體實施例方式一般而言,本文描述的一個或多個實現(xiàn)針對便于對數(shù)據(jù)的并發(fā)訪問。將參考圖1-4 更詳細地描述用于對數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)進行并發(fā)訪問的各種技術。此處所描述的各種技術的實現(xiàn)可以用眾多通用或專用計算系統(tǒng)環(huán)境或配置來操作。適用于此處所描述的各種技術的公知的計算系統(tǒng)、環(huán)境和/或配置的示例包括,但不限于,個人計算機、服務器計算機、手持式或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機頂盒、可編程消費電子產品、網(wǎng)絡PC、小型機、大型計算機、包括上述系統(tǒng)或設備中的任一個的分布式計算環(huán)境等。此處所描述的各種技術可以在諸如程序模塊等由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中實現(xiàn)。一般而言,程序模塊包括執(zhí)行特定的任務或實現(xiàn)特定的抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結構等。此處所描述的各種技術還可在其中任務由通過例如硬連線鏈路、無線鏈路或其組合等通信網(wǎng)絡鏈接的遠程處理設備執(zhí)行的分布式計算環(huán)境中實現(xiàn)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲器存儲設備在內的本地和遠程計算機存儲介質中。圖1示出其中可結合和實踐此處所描述的各種技術的計算系統(tǒng)100的示意圖。雖然計算系統(tǒng)100可以是如上所述的常規(guī)臺式或服務器計算機,但可以使用其他計算機系統(tǒng)配置。計算系統(tǒng)100可包括中央處理單元(CPU)21、系統(tǒng)存儲器22和將包括系統(tǒng)存儲器22在內的各種系統(tǒng)組件耦合到CPU 21的系統(tǒng)總線23。雖然圖1中只示出了一個CPU, 但應當理解,在一些實現(xiàn)中計算系統(tǒng)100可包括超過一個CPU。系統(tǒng)總線23可以是幾種類型的總線結構中的任何一種,包括存儲器總線或存儲控制器、外圍總線、以及使用各種總線體系結構中的任一種的局部總線。作為示例而非限制,這樣的體系結構包括工業(yè)標準體系結構(ISA)總線、微通道體系結構(MCA)總線、增強型ISA(EISA)總線、視頻電子標準協(xié)會 (VESA)局部總線、以及也稱為夾層(Mezzanine)總線的外圍組件互連(PCI)總線。系統(tǒng)存儲器22可包括只讀存儲器(ROM) 24和隨機存取存儲器(RAM) 25?;据斎?輸出系統(tǒng) ("BIOS") 26可以被存儲在ROM 24中,它包含有助于例如在啟動期間在計算機系統(tǒng)100內的各個元件之間傳送信息的基本例程。計算系統(tǒng)100還可包括用于對硬盤進行讀寫的硬盤驅動器27、用于對可移動磁盤 29進行讀寫的磁盤驅動器28、以及用于對諸如⑶-ROM或其他光介質等可移動光盤31進行讀寫的光盤驅動器30。硬盤驅動器27、磁盤驅動器28以及光盤驅動器30可分別通過硬盤驅動器接口 32、磁盤驅動器接口 33和光盤驅動器接口 34連接至系統(tǒng)總線23。驅動器及其關聯(lián)的計算機可讀介質可以向計算系統(tǒng)100提供對計算機可讀指令、數(shù)據(jù)結構、程序模塊和其他數(shù)據(jù)的非易失性存儲。雖然此處將計算系統(tǒng)100描述為具有硬盤、可移動磁盤四和可移動光盤31,但本領域技術人員應當理解,計算系統(tǒng)100還可以包括可由計算機訪問的其他類型的計算機可讀介質。例如,這種計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質可包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結構、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術實現(xiàn)的易失性和非易失性、以及可移動和不可移動介質。計算機存儲介質還可包括,RAM、ROM、可擦可編程只讀存儲器(EPROM)、電可擦可編程只讀存儲器(EEPROM)、閃存或其他固態(tài)存儲器技術、CD-ROM、數(shù)字多功能盤(DVD)或其他光盤存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設備、或能用于存儲所需信息且可以由計算系統(tǒng)100訪問的任何其他介質。通信介質能以諸如載波或其他傳輸機制等已調制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結構、程序模塊或其他數(shù)據(jù),并且包括任何信息傳遞介質。術語“已調制數(shù)據(jù)信號”可指的是以在信號中編碼信息的方式設定或更改其一個或多個特征的信號。作為示例而非限制, 通信介質包括有線介質,諸如有線網(wǎng)絡或直接線連接,以及無線介質,諸如聲學、射頻、紅外線和其他無線介質。上述的任意組合也可以包含在計算機可讀介質的范圍內。多個程序模塊能存儲在硬盤27、磁盤四、光盤31、ROM M或RAM 25上,包括操作系統(tǒng)35、一個或多個應用程序36、數(shù)據(jù)庫管理系統(tǒng)60、程序數(shù)據(jù)38和數(shù)據(jù)庫系統(tǒng)55。 操作系統(tǒng)35可以是能控制聯(lián)網(wǎng)的個人或服務器計算機的操作的任何合適的操作系統(tǒng),如 Windows XP、Mac 0S X、Unix變型(例如Linux 和BSD )等。數(shù)據(jù)庫管理應用60可被配置成管理不同組件對數(shù)據(jù)的并發(fā)訪問。將參考圖2-4在以下段落中更詳細地描述數(shù)據(jù)庫管理系統(tǒng)60。用戶可通過諸如鍵盤40和定點設備42等輸入設備向計算系統(tǒng)100中輸入命令和信息。其他輸入設備可以包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等等。這些和其他輸入設備可通過耦合到系統(tǒng)總線23的串行端口接口 46連接到CPU 21,但是可以通過諸如并行端口、游戲端口或通用串行總線(USB)等其他接口連接。監(jiān)視器47或其他類型的顯示設備也可經(jīng)由接口,諸如視頻適配器48,連接至系統(tǒng)總線23。除監(jiān)視器47之外,計算系統(tǒng)100還可包括其他外圍輸出設備,如揚聲器和打印機。此外,計算系統(tǒng)100可以使用到一個或多個遠程計算機49的邏輯連接在聯(lián)網(wǎng)環(huán)境中工作。邏輯連接可以是辦公室、企業(yè)范圍計算機網(wǎng)絡、內聯(lián)網(wǎng)和因特網(wǎng)中常見的任何連接,如局域網(wǎng)(LAN) 51和廣域網(wǎng)(WAN) 52。遠程計算機49可各自包括與計算機動作功能60 的應用程序相類似的應用程序36。當在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算系統(tǒng)100可通過網(wǎng)絡接口或適配器53連接到局域網(wǎng)51。當在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算系統(tǒng)100可包括調制解調器M、無線路由器或用于通過諸如因特網(wǎng)等廣域網(wǎng)52來建立通信的其他裝置?;驗閮戎没驗橥庵玫恼{制解調器M可經(jīng)由串行端口接口 46連接到系統(tǒng)總線23。在聯(lián)網(wǎng)環(huán)境中,就計算系統(tǒng)100所描繪的程序模塊或各其部分可被儲存在遠程存儲器存儲設備中。能夠理解,所示的網(wǎng)絡連接是示例性的,并且可以使用在計算機之間建立通信鏈路的其他手段。應該理解,此處描述的各種技術可以結合硬件、軟件或兩者的組合來實現(xiàn)。因此, 各種技術或其某些方面或部分,可以采用包含在諸如軟盤、CD-ROM、硬盤驅動器或任何其他機器可讀存儲介質等有形介質中的程序代碼(即,指令)的形式,其中,當程序代碼被加載至諸如計算機等機器并由其運行時,該機器成為用于實現(xiàn)該各種技術的裝置。在程序代碼在可編程計算機上執(zhí)行的情況下,計算設備可包括處理器、該處理器可讀的存儲介質(包括易失性和非易失性的存儲器和/或存儲元件)、至少一個輸入設備、以及至少一個輸出設備。可以實現(xiàn)或利用此處所描述的各種技術的一個或多個程序可以使用應用程序編程接口 (API)、可重用控件等。這樣的程序可以用高級過程語言或面向對象編程語言來實現(xiàn),以與計算機系統(tǒng)通信。然而,如果需要,程序可以用匯編語言或機器語言來實現(xiàn)。在任一情況下, 語言都可以是編譯的或解釋的語言,并與硬件實現(xiàn)相結合。圖2示出其中可結合和實踐此處所描述的各種技術的數(shù)據(jù)庫系統(tǒng)200的示意圖。 參考圖1的計算系統(tǒng)100進行數(shù)據(jù)庫系統(tǒng)200的以下描述。數(shù)據(jù)庫系統(tǒng)200包括數(shù)據(jù)庫管理系統(tǒng)60、數(shù)據(jù)庫組件210、文件系統(tǒng)組件220、鎖管理器230、文件系統(tǒng)M0、文件系統(tǒng)過濾器驅動程序250、文件系統(tǒng)棧沈0、文件系統(tǒng)文件270、數(shù)據(jù)庫文件觀0、以及數(shù)據(jù)庫棧四0。數(shù)據(jù)庫組件210可位于數(shù)據(jù)庫管理系統(tǒng)60內,并且可被描述為數(shù)據(jù)庫管理系統(tǒng) 60的包括關系數(shù)據(jù)庫的代碼部分。關系數(shù)據(jù)庫可以與數(shù)據(jù)庫文件208中的表、列、以及行進行交互。在一個實現(xiàn)中,數(shù)據(jù)庫文件280可以存儲在文件系統(tǒng)240上,然而應當注意,在其他實現(xiàn)中,數(shù)據(jù)庫文件280可以存儲在任何其他存儲器設備中。在一個實現(xiàn)中,數(shù)據(jù)庫文件280可以是微軟數(shù)據(jù)文件(即,MDF文件),并可包括可與元數(shù)據(jù)相關聯(lián)的表、列、以及行。 元數(shù)據(jù)可包括與文件相關的屬性,如文件的創(chuàng)建日期、作者、大小等。數(shù)據(jù)庫組件210可被配置成管理從數(shù)據(jù)庫應用對數(shù)據(jù)庫文件280中的元數(shù)據(jù)的訪問。數(shù)據(jù)庫應用可以在數(shù)據(jù)庫棧290上放置對元數(shù)據(jù)的訪問請求,該訪問請求隨后可被數(shù)據(jù)庫組件210接收。文件系統(tǒng)240可以是新技術文件系統(tǒng)(NTFS),等等。在一個實現(xiàn)中,文件系統(tǒng)MO 可包括文件系統(tǒng)棧260、數(shù)據(jù)庫文件觀0、以及文件系統(tǒng)文件270。文件系統(tǒng)棧260可包括來自基于文件的應用的對存儲在文件系統(tǒng)文件270上的數(shù)據(jù)、存儲在數(shù)據(jù)庫文件280上的元數(shù)據(jù)、存儲器數(shù)據(jù)庫文件280上的數(shù)據(jù)、或其組合的訪問請求。文件系統(tǒng)組件220可以位于數(shù)據(jù)庫管理系統(tǒng)60內,并且可被描述為數(shù)據(jù)庫管理系統(tǒng)60的管理來自文件系統(tǒng)240的對存儲在數(shù)據(jù)庫文件280上的數(shù)據(jù)/元數(shù)據(jù)或存儲在文件系統(tǒng)文件270上的數(shù)據(jù)的訪問請求的代碼部分。數(shù)據(jù)可包括輸入到文件中的信息。例如, 在一文檔中,輸入到文檔中的文本可被存儲為文件系統(tǒng)文件270中的數(shù)據(jù)。在一個實現(xiàn)中, 每一數(shù)據(jù)團可被存儲在單獨的文件系統(tǒng)文件270上。與數(shù)據(jù)相關聯(lián)的元數(shù)據(jù)可包括文檔作者、文檔的最后修改時間,等等。文件系統(tǒng)240可以經(jīng)由文件系統(tǒng)棧260接收來自基于文件的應用的請求?;谖募膽每砂ㄖT如微軟Office 產品、Adobe Reader 、Windows Media Player 等軟件。在一個實現(xiàn)中,基于文件的應用被存儲在文件系統(tǒng)MO中。文件系統(tǒng)棧260可包括可被配置成截取對與文件系統(tǒng)文件270相關的數(shù)據(jù)/元數(shù)據(jù)的所有訪問請求的文件系統(tǒng)過濾器驅動程序250。在截取了對數(shù)據(jù)/元數(shù)據(jù)的訪問請求之后,文件系統(tǒng)過濾器驅動程序250 可以將這些請求從文件系統(tǒng)棧260轉發(fā)到文件系統(tǒng)組件220。在從文件系統(tǒng)棧260接收到請求之后,文件系統(tǒng)組件220可以與鎖管理器230進行交互以獲取存儲在數(shù)據(jù)庫文件280上的與該請求相關聯(lián)的數(shù)據(jù)/元數(shù)據(jù)上的鎖,以訪問與文件系統(tǒng)270相關的數(shù)據(jù)/元數(shù)據(jù)。鎖管理器230所發(fā)放的鎖可以向基于文件的應用提供對與它放置在文件系統(tǒng)棧260上的請求相關聯(lián)的數(shù)據(jù)/元數(shù)據(jù)的訪問權。與文件系統(tǒng)組件220 —樣,數(shù)據(jù)庫組件210可以接收來自數(shù)據(jù)庫棧四0的數(shù)據(jù)庫應用訪問存儲在數(shù)據(jù)庫文件上的數(shù)據(jù)/元數(shù)據(jù)的請求。在一個實現(xiàn)中,數(shù)據(jù)可被存儲在文件系統(tǒng)文件270上并且元數(shù)據(jù)可被存儲在數(shù)據(jù)庫文件280上。數(shù)據(jù)庫棧290可包括來自事務SQL (TSQL)協(xié)議等的請求。數(shù)據(jù)庫組件210還可與鎖管理器230進行交互以獲取存儲在數(shù)據(jù)庫文件280上的數(shù)據(jù)/元數(shù)據(jù)上的鎖,以向數(shù)據(jù)庫應用提供對元數(shù)據(jù)的訪問權。在一個實現(xiàn)中,放置在文件系統(tǒng)棧260上的每一請求可包括與同基于文件的應用的請求相關的訪問模式和共享模式有關的信息。文件系統(tǒng)棧260上的每一請求的訪問模式和共享模式可由將該請求放置在文件系統(tǒng)棧260的基于文件的應用的句柄來指定。訪問模式可以定義該請求是否包括對數(shù)據(jù)/元數(shù)據(jù)進行讀取、寫入、讀取并寫入、或不進行讀取也不進行寫入的動作。共享模式可以定義當將請求放置在文件系統(tǒng)棧260上的句柄正在對數(shù)據(jù)/元數(shù)據(jù)執(zhí)行它的動作時其他句柄是否可以執(zhí)行其他動作。然而,數(shù)據(jù)庫組件210可能沒有接收與關于放置在數(shù)據(jù)庫棧290上的請求的訪問模式或共享模式有關的信息。相反,數(shù)據(jù)庫組件210可以基于該請求中指定的動作來經(jīng)由鎖管理器對數(shù)據(jù)庫應用所訪問的數(shù)據(jù)/元數(shù)據(jù)發(fā)放共享鎖或獨占鎖。例如,如果來自數(shù)據(jù)庫棧四0的請求訪問數(shù)據(jù)/元數(shù)據(jù)來對該數(shù)據(jù)/元數(shù)據(jù)進行讀取,則鎖管理器230可以向放置了對該數(shù)據(jù)/元數(shù)據(jù)的對應訪問請求的數(shù)據(jù)庫應用發(fā)放該數(shù)據(jù)/元數(shù)據(jù)上的共享鎖。 在請求訪問該數(shù)據(jù)/元數(shù)據(jù)的數(shù)據(jù)庫應用讀取該數(shù)據(jù)/元數(shù)據(jù)的同時,共享鎖可以允許其他數(shù)據(jù)庫應用也讀取該數(shù)據(jù)/元數(shù)據(jù)。然而,如果來自數(shù)據(jù)庫棧四0的請求包括對數(shù)據(jù)/ 元數(shù)據(jù)的寫入請求,則鎖管理器230可以向放置了對該數(shù)據(jù)/元數(shù)據(jù)的對應訪問請求的數(shù)據(jù)庫應用發(fā)放該數(shù)據(jù)/元數(shù)據(jù)上的獨占鎖。獨占鎖可以允許單個數(shù)據(jù)庫應用訪問該數(shù)據(jù)/ 元數(shù)據(jù),直至該獨占鎖被釋放為止。在一個實現(xiàn)中,對數(shù)據(jù)庫文件觀0中的一行發(fā)放的共享鎖還可包括該行之上的分層結構(如,與該行相對應的頁、行集合、以及表)上的意圖共享鎖。類似地,當對數(shù)據(jù)庫中的行發(fā)放獨占鎖時,鎖管理器230可在該行之上的分層結構(如,與該行相對應的頁、行集合、以及表)上發(fā)放意圖獨占鎖。圖3示出根據(jù)此處描述的各種技術的一個或多個實現(xiàn)的用于便于對數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)的并發(fā)訪問的方法的流程圖。參考圖1的計算系統(tǒng)100和圖2的數(shù)據(jù)庫系統(tǒng)200 來進行對方法300的以下描述。應當理解,盡管方法300指示了操作執(zhí)行的特定次序,但在某些實現(xiàn)中這些操作的特定部分可按照不同的次序執(zhí)行。在一個實現(xiàn)中,用于便于對數(shù)據(jù)的并發(fā)訪問的方法可由文件系統(tǒng)組件220來執(zhí)行。在步驟305,文件系統(tǒng)組件220可以生成文件系統(tǒng)語義與數(shù)據(jù)庫語義之間的映射。 文件系統(tǒng)語義可包括來自基于文件的應用的句柄可以在它請求訪問數(shù)據(jù)庫文件觀0中的數(shù)據(jù)/元數(shù)據(jù)時指定的各模式(即,訪問模式和共享模式)。數(shù)據(jù)庫語義可包括鎖管理器 230基于請求訪問數(shù)據(jù)/元數(shù)據(jù)的數(shù)據(jù)庫應用可如何使用該數(shù)據(jù)/元數(shù)據(jù)來對該數(shù)據(jù)/元數(shù)據(jù)發(fā)放的鎖(即,共享鎖和獨占鎖)。在一個實現(xiàn)中,在來自基于文件的應用的句柄在文件系統(tǒng)棧260上放置對文件系統(tǒng)文件270中的或數(shù)據(jù)庫文件觀0中的數(shù)據(jù)/元數(shù)據(jù)的訪問請求時,該句柄可以指定與該請求相關聯(lián)的訪問模式參數(shù)和共享模式參數(shù)。如上所述,訪問模式參數(shù)可以指定該句柄是旨在對文件系統(tǒng)文件270中的數(shù)據(jù)/元數(shù)據(jù)或數(shù)據(jù)庫文件280中的數(shù)據(jù)/元數(shù)據(jù)進行讀取、 寫入、讀取并寫入,還是對這兩者既不進行讀取也不進行寫入。共享模式參數(shù)可以指定該句柄是否允許其他句柄共享對數(shù)據(jù)/元數(shù)據(jù)的訪問來進行讀取、寫入、讀取和寫入、或既不讀取也不寫入。如此,一旦一句柄獲得了對該數(shù)據(jù)或元數(shù)據(jù)的訪問權,則共享模式參數(shù)可以影響其他句柄隨后如何訪問該數(shù)據(jù)或元數(shù)據(jù)。在一個實現(xiàn)中,兩個或更多個句柄對文件系統(tǒng)文件270中的數(shù)據(jù)的并發(fā)訪問由文件系統(tǒng)組件220基于訪問該數(shù)據(jù)的句柄所指定的訪問模式參數(shù)和共享模式參數(shù)來控制。然而,在步驟305生成的映射可被用來便于基于文件的應用和數(shù)據(jù)庫應用對存儲在數(shù)據(jù)庫文件觀0中的數(shù)據(jù)/元數(shù)據(jù)的并發(fā)訪問。為了便于對數(shù)據(jù)/元數(shù)據(jù)的這一并發(fā)訪問,在步驟 305生成的映射可以標識與該句柄所指定的模式相對應的數(shù)據(jù)庫鎖。鎖管理器230隨后可以使用所標識的鎖來控制對數(shù)據(jù)/元數(shù)據(jù)的并發(fā)訪問。因為鎖沒有指定對數(shù)據(jù)/元數(shù)據(jù)的所允許的并發(fā)訪問的類型,所以鎖不能被用來使用訪問模式參數(shù)和共享模式參數(shù)以便于對數(shù)據(jù)/元數(shù)據(jù)的并發(fā)訪問。例如,READ(讀取) 訪問模式連同F(xiàn)ILE_SHARE_WRITE(文件共享寫)共享模式不能使用鎖來以直接的方式表示。如果向基于文件的應用發(fā)放了共享鎖,則在一更新(例如,寫)試圖從鎖管理器獲取該同一數(shù)據(jù)/元數(shù)據(jù)上的獨占鎖的情況下,該共享鎖可阻止在數(shù)據(jù)/元數(shù)據(jù)上實現(xiàn)該更新。出于這一原因,在步驟305生成映射時,數(shù)據(jù)庫管理系統(tǒng)60可忽略一些共享模式。相反,文件系統(tǒng)語義與數(shù)據(jù)庫語義之間的映射可以基于操作(例如,READ或WRITE(寫))的意圖來確定,并且隨后可基于所指定的共享模式來進一步加以約束。以下提供如何將文件系統(tǒng)訪問模式和共享模式映射到鎖的一些示例。對于讀訪問的文件系統(tǒng)棧260請求可被映射到共享鎖。以此方式,在文件系統(tǒng)棧 260請求包括使用讀訪問來打開數(shù)據(jù)庫文件280上的文件或目錄的請求時,在步驟305確定的映射可以將該讀訪問請求與數(shù)據(jù)庫文件觀0中的表示被打開的文件或目錄的行上的共享鎖進行關聯(lián)。對于寫訪問的文件系統(tǒng)棧260請求可被映射到獨占鎖。以此方式,在文件系統(tǒng)棧260請求包括使用寫訪問來打開數(shù)據(jù)庫文件280上的文件或目錄的請求時,在步驟305確定的映射可以將該寫訪問與數(shù)據(jù)庫文件觀0中的表示被打開的文件或目錄的行上的獨占鎖進行關聯(lián)。包括指定讀和寫訪問的共享模式參數(shù)的文件系統(tǒng)棧260請求可基于訪問模式來分開映射。例如,具有讀訪問的共享模式可被映射到共享鎖。具有寫訪問的共享模式可被映射到獨占鎖。共享模式和訪問模式與鎖之間的映射可在下表中概括。
權利要求
1.一種用于提供對數(shù)據(jù)的訪問權的方法,包括從文件系統(tǒng)棧接收對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行一個或多個動作的請求; 標識所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式;基于所述文件系統(tǒng)訪問模式、所述文件系統(tǒng)共享模式、以及數(shù)據(jù)庫鎖之間的映射來確定與所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式相對應的數(shù)據(jù)庫鎖;以及接收所述數(shù)據(jù)上的通知鎖,其中所述通知鎖對應于所述數(shù)據(jù)庫鎖。
2.如權利要求1所述的方法,其特征在于,在來自數(shù)據(jù)庫棧的后續(xù)請求包括訪問所述數(shù)據(jù)時,所述通知鎖被配置成提示鎖管理器向計算系統(tǒng)上的組件發(fā)送通知。
3.如權利要求2所述的方法,其特征在于,所述組件是文件系統(tǒng)組件。
4.如權利要求1所述的方法,其特征在于,所述通知鎖是在沒有其他數(shù)據(jù)庫鎖與該通知鎖相沖突時接收到的。
5.如權利要求1所述的方法,其特征在于,來自所述文件系統(tǒng)棧的請求是從文件系統(tǒng)過濾器驅動程序接收到的,所述文件系統(tǒng)過濾器驅動程序被配置成截取來自所述文件系統(tǒng)棧的對所述數(shù)據(jù)的一個或多個請求。
6.如權利要求1所述的方法,其特征在于,所述文件系統(tǒng)訪問模式和所述文件系統(tǒng)共享模式由將所述請求放置在所述文件系統(tǒng)棧上的句柄來指定。
7.如權利要求1所述的方法,其特征在于,所述數(shù)據(jù)是元數(shù)據(jù)。
8.一種數(shù)據(jù)庫管理系統(tǒng),包括 具有鎖管理器的數(shù)據(jù)庫組件;文件系統(tǒng)組件,所述文件系統(tǒng)組件被配置成生成一個或多個文件系統(tǒng)訪問模式、一個或多個文件系統(tǒng)共享模式、以及一個或多個數(shù)據(jù)庫鎖之間的映射;從文件系統(tǒng)棧接收對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行一個或多個動作的請求; 標識所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式;基于所述映射來確定所述數(shù)據(jù)庫鎖中的哪一個鎖與所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式相對應;以及在沒有其他數(shù)據(jù)庫鎖與所述數(shù)據(jù)上的通知鎖相沖突時從所述鎖管理器接收所述通知鎖,其中所述通知鎖對應于所述數(shù)據(jù)庫鎖中的所述一個鎖。
9.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,來自所述文件系統(tǒng)棧的請求是從文件系統(tǒng)過濾器驅動程序接收到的,所述文件系統(tǒng)過濾器驅動程序被配置成截取來自所述文件系統(tǒng)棧的對所述數(shù)據(jù)的一個或多個請求。
10.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述文件系統(tǒng)訪問模式和所述文件系統(tǒng)共享模式由將所述請求放置在所述文件系統(tǒng)棧上的句柄來指定。
11.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述鎖管理器被配置成 從所述文件系統(tǒng)組件接收對所述通知鎖的請求;以及在沒有其他數(shù)據(jù)庫鎖與所述數(shù)據(jù)上的通知鎖相沖突時將所述通知鎖發(fā)送到所述文件系統(tǒng)組件。
12.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述鎖管理器被配置成在一個或多個其他數(shù)據(jù)庫鎖與所述通知鎖相沖突時向所述文件系統(tǒng)組件發(fā)送出錯消息。
13.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述文件系統(tǒng)組件還被配置成接收指示所述數(shù)據(jù)庫組件已經(jīng)請求了所述通知鎖的通知;以及在所述數(shù)據(jù)已被一個或多個句柄關閉時釋放所述通知鎖。
14.如權利要求8所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述文件系統(tǒng)組件還被配置成接收指示所述數(shù)據(jù)庫組件已經(jīng)請求了所述通知鎖的通知;以及在所述數(shù)據(jù)正被一個或多個句柄訪問時保持所述通知鎖。
15.如權利要求14所述的數(shù)據(jù)庫管理系統(tǒng),其特征在于,所述文件系統(tǒng)組件還被配置成在關閉了所述一個或多個句柄之后釋放所述通知鎖。
16.一種其上存儲有計算機可執(zhí)行指令的計算機可讀存儲介質,所述計算機可執(zhí)行指令在由計算機執(zhí)行時使得所述計算機生成一個或多個文件系統(tǒng)訪問模式、一個或多個文件系統(tǒng)共享模式、以及一個或多個數(shù)據(jù)庫鎖之間的映射;從文件系統(tǒng)棧接收對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行一個或多個動作的請求; 標識所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式;基于所述映射來確定所述數(shù)據(jù)庫鎖中的哪一個鎖與所述請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式相對應;在沒有其他數(shù)據(jù)庫鎖與所述數(shù)據(jù)上的通知鎖相沖突時從鎖管理器接收所述通知鎖,其中所述通知鎖對應于所述數(shù)據(jù)庫鎖中的所述一個鎖;以及在一個或多個其他數(shù)據(jù)庫鎖與所述通知鎖相沖突時接收出錯消息。
17.如權利要求16所述的計算機可讀存儲介質,其特征在于,所述鎖管理器被配置成 接收對所述通知鎖的請求;以及在沒有其他數(shù)據(jù)庫鎖與所述數(shù)據(jù)上的通知鎖相沖突時發(fā)送所述通知鎖。
18.如權利要求16所述的計算機可讀存儲介質,其特征在于,所述鎖管理器被配置成在一個或多個其他數(shù)據(jù)庫鎖與所述通知鎖相沖突時發(fā)送出錯消息。
19.如權利要求16所述的計算機可讀存儲介質,其特征在于,所述計算機可執(zhí)行指令在由計算機執(zhí)行時還使得所述計算機接收指示數(shù)據(jù)庫組件已經(jīng)請求了所述通知鎖的通知;以及在所述數(shù)據(jù)未被一個或多個打開句柄訪問時釋放所述通知鎖。
20.如權利要求16所述的計算機可讀存儲介質,其特征在于,所述計算機可執(zhí)行指令在由計算機執(zhí)行時還使得所述計算機接收指示數(shù)據(jù)庫組件已經(jīng)請求了所述通知鎖的通知;以及在所述數(shù)據(jù)正被一個或多個句柄訪問時保持所述通知鎖。
全文摘要
一種具有包括鎖管理器的數(shù)據(jù)庫組件和文件系統(tǒng)組件的數(shù)據(jù)庫管理系統(tǒng)。文件系統(tǒng)組件被配置成生成一個或多個文件系統(tǒng)訪問模式、一個或多個文件系統(tǒng)共享模式與一個或多個數(shù)據(jù)庫鎖之間的映射,從文件系統(tǒng)棧接收對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行一個或多個動作的請求,標識請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式,基于該映射來確定數(shù)據(jù)庫鎖中的哪一個鎖與該請求的文件系統(tǒng)訪問模式和文件系統(tǒng)共享模式相對應,以及在沒有其他數(shù)據(jù)庫鎖與該數(shù)據(jù)上的通知鎖相沖突的情況下從鎖管理器接收該通知鎖,其中該通知鎖對應于數(shù)據(jù)庫鎖中的那一個鎖。在接收到數(shù)據(jù)上的通知鎖后,鎖管理器被配置成在來自數(shù)據(jù)庫棧的后續(xù)請求包括訪問該數(shù)據(jù)時向文件系統(tǒng)組件發(fā)送通知。
文檔編號G06F17/30GK102243648SQ20111012889
公開日2011年11月16日 申請日期2011年5月10日 優(yōu)先權日2010年5月11日
發(fā)明者A·奧克斯, C·迪亞科努, J·方, M·普拉扎, M·沃明頓, P·麥德哈瓦拉普, S·德布納斯, S·阿查里雅, V·卡姆拉 申請人:微軟公司