專(zhuān)利名稱(chēng):通過(guò)中介文件系統(tǒng)或設(shè)備同步計(jì)算機(jī)系統(tǒng)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及同步,尤其涉及使用公用存儲(chǔ)平臺(tái)(例如,WinFS)、但通過(guò)一不同的中介文件系統(tǒng)應(yīng)用程序編程接口(API)可訪問(wèn)文件共享或其他存儲(chǔ)設(shè)備(例如,Win32文件共享或其它API可訪問(wèn)存儲(chǔ)設(shè)備)在兩臺(tái)或多臺(tái)計(jì)算機(jī)之間同步,以支持?jǐn)?shù)據(jù)共享、最終擁護(hù)漫游(包括但不限于漫游最終擁護(hù)概況及其等效物)和其它同步目的。
背景在最近十年中,單個(gè)盤(pán)的容量每年增長(zhǎng)約百分之70(70%)。摩爾(Moore)法則精確地預(yù)測(cè)了在過(guò)去數(shù)年中中央處理單元(CPU)能力的驚人的增長(zhǎng)。有線和無(wú)線技術(shù)已經(jīng)提供了數(shù)量上巨大的連接和帶寬。假設(shè)當(dāng)前趨勢(shì)持續(xù),在數(shù)年內(nèi)一般的膝上計(jì)算機(jī)將具有約萬(wàn)億字節(jié)(TB)的存儲(chǔ)并包含數(shù)百萬(wàn)個(gè)文件,而5千億字節(jié)(500GB)的驅(qū)動(dòng)器成為常見(jiàn)的。
消費(fèi)者使用他們的計(jì)算機(jī)主要用于通信和組織個(gè)人信息,不論它們是傳統(tǒng)的個(gè)人信息管理器(PIM)風(fēng)格的數(shù)據(jù)或如數(shù)字音樂(lè)或照片那樣的媒體。數(shù)字內(nèi)容的量和存儲(chǔ)原始字節(jié)的能力已經(jīng)大量地增長(zhǎng);然而消費(fèi)者可用于組織和統(tǒng)一此數(shù)據(jù)的方法卻跟不上步伐。知識(shí)工人花費(fèi)大量時(shí)間來(lái)管理和共享信息,某些研究估計(jì),知識(shí)工人花費(fèi)15-25%的時(shí)間在與無(wú)效信息有關(guān)的活動(dòng)上。另外研究估計(jì),典型的知識(shí)工人每天約花費(fèi)2.5小時(shí)搜索信息。
開(kāi)發(fā)者與信息技術(shù)(IT)部門(mén)投資大量的時(shí)間與金錢(qián)來(lái)構(gòu)建他們自己的用于公用存儲(chǔ)抽象的數(shù)據(jù)存儲(chǔ),以呈現(xiàn)如人、地方、時(shí)間和事件等事項(xiàng)目。這不僅導(dǎo)致重復(fù)的工作,還形成公用數(shù)據(jù)的孤島,沒(méi)有共同搜索或共享那些數(shù)據(jù)的機(jī)制。僅考慮當(dāng)今在運(yùn)行Microsoft Windows操作系統(tǒng)的計(jì)算機(jī)上有多少地址簿。如電子郵件客戶(hù)端和個(gè)人財(cái)務(wù)程序那樣的許多應(yīng)用程序保留各自的地址簿,且在每個(gè)那樣的程序分別維護(hù)的地址簿應(yīng)用程序之間只有很少共享。因而,財(cái)務(wù)程序(如MicrosoftMoney)不與維護(hù)在電子郵件聯(lián)系人文件夾(如Microsoft Outlook中的聯(lián)系人文件夾)中的地址共享支付人的地址。確實(shí),許多用戶(hù)具有多個(gè)設(shè)備,在這些設(shè)備之間和包括到如MSN和AOL等商業(yè)服務(wù)的手機(jī)電話號(hào)碼的各種附加來(lái)源之間應(yīng)該在邏輯上同步它們的個(gè)人數(shù)據(jù);然而共享文檔的協(xié)作大部分是通過(guò)將文檔附到電子郵件消息來(lái)達(dá)到的—這是手動(dòng)的且低效的。
缺乏協(xié)作的一個(gè)原因是組織計(jì)算機(jī)系統(tǒng)中的信息的傳統(tǒng)方法集中在使用基于文件—文件夾—目錄的系統(tǒng)(“文件系統(tǒng)”),來(lái)基于用于存儲(chǔ)文件的存儲(chǔ)介質(zhì)的物理組織的抽象將多個(gè)文件組織到文件夾的目錄分層結(jié)構(gòu)中。在1960年代開(kāi)發(fā)的Multics操作系統(tǒng)被認(rèn)為是在操作系統(tǒng)級(jí)上使用文件、文件夾和目錄來(lái)管理可存儲(chǔ)數(shù)據(jù)單元的先驅(qū)。具體說(shuō)來(lái),Multics在文件的分層結(jié)構(gòu)中使用符號(hào)地址(從而引入文件路徑的概念),其中文件的物理地址對(duì)用戶(hù)(應(yīng)用程序和最終用戶(hù))是不透明的。此文件系統(tǒng)完全不考慮任何單個(gè)文件的文件格式,且在文件中及文件之間的關(guān)系在操作系統(tǒng)級(jí)上被認(rèn)為是無(wú)關(guān)的(即,與分層結(jié)構(gòu)中文件的位置不同)。由于Multics的出現(xiàn),在操作系統(tǒng)級(jí)上可存儲(chǔ)的數(shù)據(jù)被組織成文件、文件夾和目錄。這些文件一般包括放在由文件系統(tǒng)維護(hù)的一特定文件中的文件分層結(jié)構(gòu)本身(“目錄”)。此目錄進(jìn)而維護(hù)對(duì)應(yīng)于該目錄中所有其它文件和那些文件在分層結(jié)構(gòu)(這里指文件夾)中的節(jié)點(diǎn)位置的條目的列表。這是本領(lǐng)域中近40年的狀態(tài)。
然而,雖然提供了駐留在計(jì)算機(jī)的物理存儲(chǔ)系統(tǒng)中的信息的合理表示,但是文件系統(tǒng)是物理存儲(chǔ)系統(tǒng)的抽象,因而文件的利用需要在用戶(hù)處理什么(具有上下文、特征以及與其它單元的關(guān)系的單元)和操作系統(tǒng)提供什么(文件、文件夾和目錄)之間的間接(解釋)層。結(jié)果,用戶(hù)(應(yīng)用程序和/或最終用戶(hù))只好強(qiáng)制把信息單元放入文件系統(tǒng)結(jié)構(gòu),即使這樣做是低效的、不一致的、或不希望的。此外,現(xiàn)有的文件系統(tǒng)關(guān)于在各個(gè)文件中存儲(chǔ)的數(shù)據(jù)的結(jié)構(gòu)知之甚少,因此,大多數(shù)信息在文件中保持封閉,只能被寫(xiě)那些數(shù)據(jù)的應(yīng)用程序訪問(wèn)(和可理解)。因此,缺乏信息的模式描述和管理信息的機(jī)制,導(dǎo)致形成數(shù)據(jù)的豎井(silo),只有很少數(shù)據(jù)能在各豎井之間共享。例如,許多個(gè)人計(jì)算機(jī)(PC)用戶(hù)具有5個(gè)以上各異的存儲(chǔ),它們包含有關(guān)他們?cè)谀骋粚由辖换サ娜说男畔ⅰ鏞utlook聯(lián)系人、在線賬戶(hù)地址、Windows地址簿、Quicken受款人和即時(shí)消息(IM)伙伴列表—因?yàn)榻M織文件向這些PC用戶(hù)提出重要的挑戰(zhàn)。由于大多數(shù)現(xiàn)有的文件系統(tǒng)利用嵌套的文件夾隱喻來(lái)組織文件和文件夾,因此當(dāng)文件數(shù)量增加時(shí),為維持靈活且有效的組織模式所必需的努力變得十分驚人。在這些情況下,具有單個(gè)文件的多重分類(lèi)是非常有用的;然而使用現(xiàn)有文件系統(tǒng)中的硬和軟鏈接是麻煩且難以維護(hù)的。
過(guò)去已作了若干不成功的嘗試來(lái)克服文件系統(tǒng)的缺點(diǎn)。這些以前嘗試中的某一些已經(jīng)涉及使用內(nèi)容可定址的存儲(chǔ)器來(lái)提供可以通過(guò)內(nèi)容而不是通過(guò)物理地址來(lái)訪問(wèn)數(shù)據(jù)的機(jī)制。然而,這些努力被證明是不成功的,因而雖然內(nèi)容可定址的存儲(chǔ)器對(duì)由如高速緩存和存儲(chǔ)器管理單元等設(shè)備的小規(guī)模使用被證明是有用的,但對(duì)如物理存儲(chǔ)介質(zhì)等設(shè)備的大規(guī)模使用由于各種原因尚不可能,因此那樣的解決方案簡(jiǎn)直不存在。已作出使用面向?qū)ο蟮臄?shù)據(jù)庫(kù)(OODB)系統(tǒng)的其它嘗試,但是這些嘗試雖然帶有強(qiáng)烈的數(shù)據(jù)庫(kù)的特征,且良好的非文件表示,但在處理文件表示方面并不有效,并不能重現(xiàn)在硬件/軟件接口系統(tǒng)級(jí)上基于分層結(jié)構(gòu)的文件及文件夾的速度、效率和簡(jiǎn)單性。諸如試圖使用SmallTalk(和其它派生方法)的其它嘗試在處理文件和非文件表示方面被證明相當(dāng)有效,但缺乏有效地組織和利用在各種數(shù)據(jù)文件之間存在的關(guān)系所必需的數(shù)據(jù)庫(kù)特征,因此那種系統(tǒng)的整體有效性是不可接受的。使用BeOS(和其它那樣操作系統(tǒng)研究)的又一種嘗試盡管能夠勝任適當(dāng)?shù)乇硎疚募耐瑫r(shí)又提供某些必要的數(shù)據(jù)庫(kù)特征,在處理非文件的表示上被證明是不夠的,這是傳統(tǒng)文件系統(tǒng)同樣的核心缺點(diǎn)。
數(shù)據(jù)庫(kù)技術(shù)是存在類(lèi)似挑戰(zhàn)的另一專(zhuān)業(yè)領(lǐng)域。例如,雖然關(guān)系型數(shù)據(jù)庫(kù)模型已取得很大的商業(yè)上的成功,實(shí)際上獨(dú)立軟件分銷(xiāo)商(ISV)一般運(yùn)用了關(guān)系型數(shù)據(jù)庫(kù)軟件產(chǎn)品(如Microsoft SQL Server)中可得到的功能一小部分。相反,應(yīng)用程序與那樣產(chǎn)品的大多數(shù)交互是以簡(jiǎn)單的“gets”和“puts”的形式。對(duì)此雖然有若干容易明白的原因(如作為平臺(tái)或數(shù)據(jù)庫(kù)的不可知),一個(gè)常被忽略的關(guān)鍵的原因是數(shù)據(jù)庫(kù)沒(méi)有必要提供主要商業(yè)應(yīng)用程序分銷(xiāo)商確實(shí)需要的精確抽象。例如,雖然真是世界具有如“客戶(hù)”或“訂單”等“項(xiàng)目”的概念(以及訂單的嵌入的“行式項(xiàng)目”作為其中的項(xiàng)目和項(xiàng)目本身),而關(guān)系型數(shù)據(jù)庫(kù)只在表和行的方面來(lái)談?wù)?。結(jié)果,雖然應(yīng)用程序可能希望具有在項(xiàng)目級(jí)上的一致性、鎖定、安全和/或觸發(fā)器的方面(只列出一些),通常數(shù)據(jù)庫(kù)只在表/行級(jí)上提供這些特征。盡管若每個(gè)項(xiàng)目映射到數(shù)據(jù)庫(kù)某個(gè)表的單個(gè)行也能工作得很好,但在帶多個(gè)行式項(xiàng)目的訂單的情況下,存在一個(gè)項(xiàng)目實(shí)際上要映射到多個(gè)表的原因,且在此情況下,單個(gè)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)不能確切地提供正確的抽象。因此,應(yīng)用程序必須在數(shù)據(jù)庫(kù)的頂層構(gòu)建邏輯以提供這些基本抽象。換言之,基本關(guān)系模型不提供在其上容易開(kāi)發(fā)高級(jí)應(yīng)用程序的存儲(chǔ)數(shù)據(jù)的足夠平臺(tái),因?yàn)榛娟P(guān)系模型需要在應(yīng)用程序和存儲(chǔ)系統(tǒng)之間的間接層,其中只在某些情況的應(yīng)用程序中可以看到數(shù)據(jù)的語(yǔ)義結(jié)構(gòu)。盡管某些數(shù)據(jù)庫(kù)分銷(xiāo)商正將高級(jí)功能構(gòu)建到他們的產(chǎn)品中(如提供對(duì)象關(guān)系能力,新的組織模型等),至今尚沒(méi)有哪個(gè)提供需要的全面解決方案,其中真正的全面解決方案是為有用的域抽象(如“個(gè)人”、“位置”、“事件”等)提供有用的數(shù)據(jù)模型抽象(如“項(xiàng)目”、“擴(kuò)展”、“關(guān)系”等)的解決方案。
考慮到現(xiàn)有數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)庫(kù)技術(shù)中的上述缺點(diǎn),需要一種新的存儲(chǔ)平臺(tái),它提供了一種改進(jìn)的能力以便組織、搜索和共享計(jì)算機(jī)系統(tǒng)中的所有類(lèi)型的數(shù)據(jù)-一種存儲(chǔ)平臺(tái),它在現(xiàn)有的文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)之外擴(kuò)展和擴(kuò)大了數(shù)據(jù)平臺(tái),并且被設(shè)計(jì)為存儲(chǔ)所有類(lèi)型的數(shù)據(jù)。2003年8月21日提交的,名為“STORAGEPLATFORM FOR ORGANIZING,SEARCHING,AND SHARING DATA(用于組織、搜索和共享數(shù)據(jù)的存儲(chǔ)平臺(tái))”的美國(guó)專(zhuān)利申請(qǐng)第10/66,646號(hào)(代理案卷號(hào)MSFT-2734)中揭示的發(fā)明滿足這一需求。用于該存儲(chǔ)平臺(tái)(包括沖突分解方法)的同步服務(wù)也在由2003年10月24日提交的,名為“SYSTEMS AND METHODSFOR PROVIDING RELATIONAL AND HIERARCHICAL SYNCHRONIZATIONSERVICES FOR UNITS OF INFORMATION MANAGEABLE BY AHARDWARE/SOFTWARE INTERFACE SYSTEM(用于向可由硬件/軟件接口系統(tǒng)管理的信息單元提供關(guān)系和分層同步服務(wù)的系統(tǒng)和方法)”的美國(guó)專(zhuān)利申請(qǐng)第10/646,646(代理案卷號(hào)MSFT-2745),以及2004年6月30日提交的,名為“SYSTEMS AND METHODS FOR PROVIDING CONFLICT HANDLING FORPEER-TO-PEER SYNCHRONIZATION OF UNITS OF INFORMATIONMANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM(用于為可由硬件/軟件接口系統(tǒng)管理的信息單元的對(duì)等同步提供沖突處理的系統(tǒng)和方法)”的美國(guó)專(zhuān)利申請(qǐng)第(未分配)號(hào)(代理案卷號(hào)MSFT-2854/306955.01)所揭示的發(fā)明中提供。
當(dāng)然,最初采用這些相關(guān)專(zhuān)利申請(qǐng)中描述的新存儲(chǔ)平臺(tái),具有包括各種個(gè)別計(jì)算機(jī)系統(tǒng)的同步網(wǎng)絡(luò)的企業(yè)將具有一種混合,其中某些個(gè)別計(jì)算機(jī)系統(tǒng)將使用新存儲(chǔ)平臺(tái),而其它個(gè)別計(jì)算機(jī)系統(tǒng)將繼續(xù)使用傳統(tǒng)存儲(chǔ)平臺(tái)。因此,使用新存儲(chǔ)平臺(tái)的兩臺(tái)計(jì)算機(jī)系統(tǒng)(“客戶(hù)機(jī)”)可能有必要通過(guò)使用傳統(tǒng)平臺(tái)的計(jì)算機(jī)系統(tǒng)(“中介”)同步。例如,某些客戶(hù)機(jī)可能使用諸如漫游擁護(hù)概況(RUP)或具有客戶(hù)機(jī)方高速緩存(CSC)的文件夾重定向等軟件在傳統(tǒng)漫游服務(wù)中登記。由于用于這些傳統(tǒng)存儲(chǔ)平臺(tái)的傳統(tǒng)漫游軟件不支持用于新存儲(chǔ)平臺(tái)的漫游數(shù)據(jù),因此用于新存儲(chǔ)平臺(tái)的新漫游服務(wù)是必需的。本發(fā)明的各實(shí)施例針對(duì)用于通過(guò)中介的客戶(hù)機(jī)同步的系統(tǒng)和方法。
概述下面的概述提供了以前面通過(guò)參考所結(jié)合的相關(guān)發(fā)明(“相關(guān)發(fā)明”)為背景說(shuō)明的本發(fā)明的各個(gè)方面的總結(jié)。這個(gè)概述不旨在提供本發(fā)明的所有重要方面的無(wú)遺漏的說(shuō)明,也不是對(duì)本發(fā)明的范圍的限定。而是,這個(gè)概述旨在作為下面的詳細(xì)說(shuō)明和附圖的介紹。
相關(guān)發(fā)明共同地涉及用于組織、搜索和共享數(shù)據(jù)的存儲(chǔ)平臺(tái),所述存儲(chǔ)平臺(tái)在現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)之外擴(kuò)展和擴(kuò)大了數(shù)據(jù)存儲(chǔ)的概念。這個(gè)存儲(chǔ)平臺(tái)被設(shè)計(jì)為存儲(chǔ)所有類(lèi)型的數(shù)據(jù),包括結(jié)構(gòu)化的、非結(jié)構(gòu)化的、或半結(jié)構(gòu)化的數(shù)據(jù)。
該存儲(chǔ)平臺(tái)包括在數(shù)據(jù)庫(kù)引擎上實(shí)現(xiàn)的數(shù)據(jù)存儲(chǔ)。所述數(shù)據(jù)庫(kù)引擎包括具有對(duì)象相關(guān)擴(kuò)展的關(guān)系型數(shù)據(jù)庫(kù)引擎。所述的數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)了一種數(shù)據(jù)模型,它支持?jǐn)?shù)據(jù)的組織、搜索、共享、同步和安全。以多種模式(schema)聲明了數(shù)據(jù)的具體類(lèi)型,并且該平臺(tái)提供了一種機(jī)制,它擴(kuò)展模式的設(shè)置以便定義新的數(shù)據(jù)類(lèi)型(主要是,由所述模式提供的基本類(lèi)型的子類(lèi)型)。一種同步功能有助于在用戶(hù)或系統(tǒng)間共享數(shù)據(jù)。提供了文件系統(tǒng)類(lèi)的功能,它允許所述數(shù)據(jù)存儲(chǔ)與現(xiàn)有的文件系統(tǒng)的互操作性,而不存在這種傳統(tǒng)文件系統(tǒng)的限制。一種改變跟蹤機(jī)制提供了跟蹤數(shù)據(jù)存儲(chǔ)的改變的能力。該存儲(chǔ)平臺(tái)還包括一組應(yīng)用程序接口,它們使得應(yīng)用程序能夠訪問(wèn)所述存儲(chǔ)平臺(tái)上述的所有功能,并且能夠訪問(wèn)以模式聲明的數(shù)據(jù)。
由所述數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)的數(shù)據(jù)模型以項(xiàng)目、元素和關(guān)系定義了數(shù)據(jù)存儲(chǔ)的單元。項(xiàng)目是在數(shù)據(jù)存儲(chǔ)中可存儲(chǔ)的數(shù)據(jù)的單元,并且可以包括一個(gè)或多個(gè)元素和關(guān)系。元素是類(lèi)型的實(shí)例,包括一個(gè)或多個(gè)字段(此處也被稱(chēng)為屬性)。關(guān)系是兩個(gè)項(xiàng)目之間的連接。(如此處所使用的,這些以及其它特定的術(shù)語(yǔ)可以被大寫(xiě),以便將它們從附近所使用的其它術(shù)語(yǔ)分離,然而,并不是旨在區(qū)別對(duì)待被大寫(xiě)的術(shù)語(yǔ)例如“Item”和不被大寫(xiě)時(shí)的同一個(gè)術(shù)語(yǔ),例如“item”,并且不應(yīng)假設(shè)或暗示這種區(qū)別。)該計(jì)算機(jī)系統(tǒng)還包括多個(gè)項(xiàng)目,其中每個(gè)項(xiàng)目包括一可由硬件/軟件接口系統(tǒng)操作的離散的可存儲(chǔ)的信息單元;多個(gè)項(xiàng)目文件夾,它們構(gòu)成了所述項(xiàng)目的組織結(jié)構(gòu);以及用于操作多個(gè)項(xiàng)目的硬件/軟件接口系統(tǒng),并且其中每個(gè)項(xiàng)目屬于至少一個(gè)項(xiàng)目文件夾,并且可以屬于多于一個(gè)的項(xiàng)目文件夾。
與從持久存儲(chǔ)中導(dǎo)出相反,項(xiàng)目或某些項(xiàng)目屬性值可以被動(dòng)態(tài)地計(jì)算。換言之,所述硬件/軟件接口系統(tǒng)不需要項(xiàng)目被存儲(chǔ),并且支持某些操作,諸如枚舉項(xiàng)目的當(dāng)前設(shè)置的功能,或是給出項(xiàng)目在存儲(chǔ)平臺(tái)上的標(biāo)識(shí)符(在描述應(yīng)用編程接口或API的部分中被更完整地說(shuō)明)而檢索項(xiàng)目的能力—例如,項(xiàng)目可以是蜂窩電話的當(dāng)前位置,或從溫度傳感器讀到的溫度。所述硬件/軟件接口系統(tǒng)可以處理多個(gè)項(xiàng)目,并且還可以包括可由所述硬件/軟件接口系統(tǒng)管理的多個(gè)關(guān)系互連的項(xiàng)目。
用于該計(jì)算機(jī)系統(tǒng)的硬件/軟件接口系統(tǒng)還包括核心模式,以便定義所述硬件/軟件接口系統(tǒng)所理解,并且可以一種預(yù)先確定的和可預(yù)知的方式直接進(jìn)行處理的一組核心項(xiàng)目。為了處理多個(gè)項(xiàng)目,所述計(jì)算機(jī)系統(tǒng)將項(xiàng)目與多個(gè)關(guān)系互連,并且在硬件/軟件接口系統(tǒng)層上管理所述關(guān)系。
該存儲(chǔ)平臺(tái)的API為在存儲(chǔ)平臺(tái)模式組中定義的每個(gè)項(xiàng)目、項(xiàng)目擴(kuò)展和關(guān)系提供了數(shù)據(jù)類(lèi)。此外,應(yīng)用編程接口提供了一組框架類(lèi),它們?yōu)樗鰯?shù)據(jù)類(lèi)定義了一組公共行為,并且與數(shù)據(jù)類(lèi)一起為存儲(chǔ)平臺(tái)API提供了基本的編程模型。所述存儲(chǔ)平臺(tái)API提供了簡(jiǎn)化的查詢(xún)模型,它以將應(yīng)用程序員從底層數(shù)據(jù)庫(kù)引擎的查詢(xún)語(yǔ)言的細(xì)節(jié)隔離開(kāi)的方式,使得應(yīng)用程序員能夠形成基于數(shù)據(jù)存儲(chǔ)中的項(xiàng)目的各種屬性的查詢(xún)。存儲(chǔ)平臺(tái)API還收集由應(yīng)用程序?qū)?xiàng)目做出的改變,并且然后將它們組織到實(shí)現(xiàn)所述數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)引擎(或任何種類(lèi)的存儲(chǔ)引擎)所需的正確更新中。這使得應(yīng)用程序員能夠?qū)υ谟洃浿许?xiàng)目進(jìn)行改變,而將數(shù)據(jù)存儲(chǔ)更新的復(fù)雜細(xì)節(jié)留給API。
通過(guò)它的公共存儲(chǔ)基礎(chǔ)和被模式化的數(shù)據(jù),本發(fā)明的存儲(chǔ)平臺(tái)能夠?yàn)橄M(fèi)者、知識(shí)工作者和企業(yè)作出更有效的應(yīng)用程序開(kāi)發(fā)。它提供了豐富的并且可擴(kuò)展的應(yīng)用編程接口,該接口不僅使得它的數(shù)據(jù)模型中所固有的功能可以使用,而且還包含并擴(kuò)展了現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫(kù)的訪問(wèn)方法。
作為相互關(guān)連的發(fā)明的這種延及全部的結(jié)構(gòu)(在詳細(xì)描述的第II節(jié)中詳細(xì)描述)的一部分,某些相關(guān)發(fā)明特別地針對(duì)同步API(在詳細(xì)描述的第III節(jié)中詳細(xì)描述),它進(jìn)而描述了該存儲(chǔ)平臺(tái)的廣泛的同步能力??梢灶A(yù)期本發(fā)明的若干實(shí)施例將與這些同步能力結(jié)合,以處理在對(duì)等同步過(guò)程中引發(fā)的沖突。正確和有效地處理沖突的能力最小化了數(shù)據(jù)丟失,同時(shí)保留了較好的可用性并減少了同步過(guò)程中對(duì)用戶(hù)干預(yù)的需求。為此,詳細(xì)描述的第III節(jié)也包括相關(guān)發(fā)明的各實(shí)施例的詳細(xì)描述,這些相關(guān)發(fā)明針對(duì)用于處理包括但不限于相關(guān)發(fā)明的存儲(chǔ)平臺(tái)的同步系統(tǒng)的對(duì)等同步系統(tǒng)中的沖突的系統(tǒng)和方法。
鑒于以上內(nèi)容,本發(fā)明的各實(shí)施例針對(duì)用于同步使用公用存儲(chǔ)平臺(tái)(例如,相關(guān)發(fā)明的新存儲(chǔ)平臺(tái))的兩臺(tái)客戶(hù)機(jī),以通過(guò)不使用同一公用存儲(chǔ)平臺(tái)(例如,作為替代,使用本身不支持新存儲(chǔ)平臺(tái)的同步的傳統(tǒng)存儲(chǔ)平臺(tái))的中介來(lái)同步。總體上,本發(fā)明的各實(shí)施例采用了使用中介的現(xiàn)有能力來(lái)同步數(shù)據(jù),但是其中保存了客戶(hù)機(jī)的數(shù)據(jù)結(jié)構(gòu)的方法。各實(shí)施例使用了“適配器”使得客戶(hù)機(jī)能夠與中介交互,其中,所述適配器有效地補(bǔ)償了中介的無(wú)力,以保存客戶(hù)機(jī)的新存儲(chǔ)平臺(tái)固有的數(shù)據(jù)結(jié)構(gòu)元素。本發(fā)明的各實(shí)施例針對(duì)將數(shù)據(jù)從客戶(hù)機(jī)上傳同步(upload-sync)到中介,以及將數(shù)據(jù)從中介下載同步(download-sync)到客戶(hù)機(jī)。另外,某些實(shí)施例還針對(duì)中介上的數(shù)據(jù)的壓縮。
通過(guò)閱讀以下本發(fā)明的詳細(xì)描述和附圖,可以清楚本發(fā)明自身以及與相關(guān)發(fā)明相結(jié)合的具體特征和優(yōu)點(diǎn)。
附圖的簡(jiǎn)要說(shuō)明當(dāng)結(jié)合所附的附圖進(jìn)行閱讀時(shí),可以更好地理解上面的摘要以及下面對(duì)本發(fā)明的詳細(xì)說(shuō)明。出于說(shuō)明本發(fā)明的目的,在附圖中示出了本發(fā)明的各個(gè)方面的示例性實(shí)施例;然而,本發(fā)明不限于所公開(kāi)的具體方法和手段。在附圖中
圖1是表示本發(fā)明的方面可以被結(jié)合在其內(nèi)的計(jì)算機(jī)系統(tǒng)的方框圖;圖2是一個(gè)方框圖,示出了被分為3個(gè)組件組的計(jì)算機(jī)系統(tǒng)硬件組件、硬件/軟件系統(tǒng)接口組件和應(yīng)用程序組件;圖2A示出了用于被分組到基于文件的操作系統(tǒng)中的目錄內(nèi)的文件夾中的文件的傳統(tǒng)的基于樹(shù)的分層結(jié)構(gòu);
圖3是示出了一個(gè)存儲(chǔ)平臺(tái)的方框圖;圖4示出了項(xiàng)目、項(xiàng)目文件夾和種類(lèi)之間的結(jié)構(gòu)化的關(guān)系;圖5A是示出了項(xiàng)目的結(jié)構(gòu)的方框圖;圖5B是示出了圖5A的項(xiàng)目的復(fù)雜屬性類(lèi)型的方框圖;圖5C是示出了“Location(位置)”項(xiàng)目的方框圖,其中“位置”項(xiàng)目的復(fù)雜類(lèi)型被進(jìn)一步說(shuō)明(明確地被列出);圖6A示出了一個(gè)作為基礎(chǔ)模式中的項(xiàng)目的子類(lèi)型的項(xiàng)目;圖6B是示出了圖6A的子類(lèi)型項(xiàng)目的方框圖,其中明確地列出了它的繼承的類(lèi)型(除了它的直接屬性之外);圖7是示出了基本模式的方框圖,該基本模式包括它的兩個(gè)頂層類(lèi)類(lèi)型,項(xiàng)目和屬性基礎(chǔ),以及從其得出的附加基礎(chǔ)模式類(lèi)型;圖8A是示出了核心模式中的項(xiàng)目的方框圖;圖8B是示出了核心模式中的屬性類(lèi)型的方框圖;圖9是一個(gè)方框圖,示出了項(xiàng)目文件夾、它的成員項(xiàng)目以及項(xiàng)目文件夾和它的成員項(xiàng)目之間的互連關(guān)系;圖10是一個(gè)方框圖,示出了種類(lèi)(它本身也是一個(gè)項(xiàng)目)、它的成員項(xiàng)目以及種類(lèi)和它的成員項(xiàng)目之間的互連關(guān)系;圖11是示出了存儲(chǔ)平臺(tái)的數(shù)據(jù)模型的引用類(lèi)型層次的圖;圖12是示出了關(guān)系是如何被分類(lèi)的圖;圖13是示出了通知機(jī)制的圖;圖14是示出了一個(gè)例子的圖,其中兩個(gè)事務(wù)都向同一個(gè)B樹(shù)中插入新的記錄;圖15示出了數(shù)據(jù)改變檢測(cè)處理;圖16示出了示例性的目錄樹(shù);圖17示出了一個(gè)例子,其中現(xiàn)有的基于目錄的文件系統(tǒng)的文件夾被移動(dòng)到所述的存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中;圖18示出了容納文件夾的概念;圖19示出了存儲(chǔ)平臺(tái)API的基本體系結(jié)構(gòu);圖20示意性地表示了存儲(chǔ)平臺(tái)API棧的各個(gè)組件;圖21A是示例的聯(lián)系人項(xiàng)目模式的圖形表示;圖21B是圖21A的示例的聯(lián)系人項(xiàng)目模式的元件的圖形表示;圖22示出了存儲(chǔ)平臺(tái)API的運(yùn)行時(shí)框架;
圖23示出了“FindAll”操作的執(zhí)行;圖24示出了這樣的處理,通過(guò)該處理從存儲(chǔ)平臺(tái)模式生成存儲(chǔ)平臺(tái)API類(lèi);圖25示出了這樣的模式,文件(File)API基于該模式;圖26是示出了用于數(shù)據(jù)安全目的的訪問(wèn)掩碼格式的示意圖;圖27(部分a、b、c)給出了被從現(xiàn)有的安全區(qū)域內(nèi)劃分出來(lái)的一個(gè)新的被相同地保護(hù)的安全區(qū)域;圖28是示出了項(xiàng)目搜索視圖的概念的示意圖;圖29是示出了示例的項(xiàng)目分層的示意圖;圖30A示出了作為管道的接口“接口1”,第一和第二編碼段通過(guò)該接口通信;圖30B示出了一個(gè)接口,該接口包括接口對(duì)象I1和I2,它使得系統(tǒng)的第一和第二編碼段能夠通過(guò)介質(zhì)M通信;圖31A示出了由接口“接口1”提供的功能可以被如何劃分,以便將接口的通信轉(zhuǎn)換到多個(gè)接口“接口1A”、“接口1B”、“接口1C”;圖31B示出了由I1提供的功能可以被如何劃分到多個(gè)接口I1A、I1B、I1C;圖32A示出了一種情況,其中無(wú)意義的參數(shù)precision可以被忽略或被以任意的參數(shù)替換;圖32B示出了一種情況,其中接口被替代接口所替換,所述替代接口被指定用于忽略或向接口添加參數(shù);圖33A示出了一種情況,其中第一和第二編碼段被合并到包含它們兩者的模塊中;圖33B示出了一種情況,其中接口的一部分或全部可以被嵌入地寫(xiě)入另一個(gè)接口中,以便形成被合并的接口;圖34A示出了中間設(shè)備的一塊或多塊如何可以轉(zhuǎn)換第一接口上的通信以便使它們符合一個(gè)或多個(gè)不同的接口;圖34B示出了編碼段如何能夠與接口一起引入以便接收來(lái)自一個(gè)接口的通信并將所述功能傳輸給第二和第三接口;圖35A示出了即時(shí)編譯器(JIT)如何可以將來(lái)自一個(gè)編碼段的通信轉(zhuǎn)換到另一個(gè)編碼段;圖35B示出了用于動(dòng)態(tài)重寫(xiě)一個(gè)或多個(gè)接口的JIT方法,它可以被應(yīng)用于動(dòng)態(tài)因素或否則改變所述接口;
圖36示出了公共數(shù)據(jù)存儲(chǔ)和組件的3個(gè)例子以便使它們同步;以及圖37示出了包括相關(guān)發(fā)明的系統(tǒng),假定了不知道狀態(tài)如何被計(jì)算或其相關(guān)聯(lián)的元數(shù)據(jù)如何被交換的簡(jiǎn)單適配器;圖38A-D示出了如何使用順序改變枚舉方法來(lái)跟蹤、枚舉和同步改變,以強(qiáng)調(diào)對(duì)改變的期望和解決方案;圖39A示出了沖突處理管道;圖39B所示是圖39A所示的管道的邏輯遍歷的流程圖;以及圖40所示是其中沖突項(xiàng)目與目標(biāo)項(xiàng)目的副本一起記入日志的示例的框圖;圖41所示是其中兩臺(tái)客戶(hù)機(jī)必須通過(guò)中介同步的情形的框圖;圖42所示是客戶(hù)機(jī)通過(guò)STI適配器向中介發(fā)送改變數(shù)據(jù)(“發(fā)送同步”操作)的步驟的流程圖;圖43所示是客戶(hù)機(jī)通過(guò)STI適配器從中介接收改變數(shù)據(jù)(“接收同步”操作)的步驟的流程圖;以及圖44所示是STI適配器(即,與可進(jìn)行發(fā)送同步和接收同步兩者的客戶(hù)機(jī)相關(guān)聯(lián)的STI適配器)對(duì)中介上的共同體文件夾中的數(shù)據(jù)執(zhí)行壓縮操作(“壓縮”操作)的步驟的流程圖。
詳細(xì)描述I.引言本發(fā)明的主題用細(xì)節(jié)來(lái)描述,以滿足法定的要求。然而,該描述本身不試圖限制本專(zhuān)利的范圍。相反,本發(fā)明者設(shè)想,要求保護(hù)的主題也能以其它方式實(shí)施,以結(jié)合其它當(dāng)前和未來(lái)的技術(shù)包括類(lèi)似于本說(shuō)明描述的不同的步驟或步驟的組合。此外,雖然術(shù)語(yǔ)“步驟”在這里可用于意味著所采用的方法的不同元素,然而該術(shù)語(yǔ)不能被解釋為在這里揭示的各步驟之間隱含特定的次序,除非明確地描述了各個(gè)步驟的次序。
A.示例性計(jì)算環(huán)境本發(fā)明的許多實(shí)施例可在計(jì)算機(jī)上執(zhí)行。圖1和下面討論旨在提供其中實(shí)現(xiàn)本發(fā)明的合適計(jì)算環(huán)境的簡(jiǎn)要描述。雖然不是必需,本發(fā)明的諸方面能以諸如由如客戶(hù)工作站或服務(wù)器的計(jì)算機(jī)上執(zhí)行的程序模塊的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型。此外,本發(fā)明可用其它計(jì)算機(jī)系統(tǒng)配置實(shí)現(xiàn),包括手持設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)或可編程消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)等。本發(fā)明還能在分布式計(jì)算環(huán)境中實(shí)現(xiàn),其中任務(wù)由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備完成。在分布式計(jì)算環(huán)境中,程序模塊能位于本地或遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
如圖1所示,示例性通用計(jì)算系統(tǒng)包括傳統(tǒng)的個(gè)人計(jì)算機(jī)20等,它包括處理單元21、系統(tǒng)存儲(chǔ)器22和將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件耦合到處理單元21的系統(tǒng)總線23。系統(tǒng)總線23可以是若干種總線結(jié)構(gòu)的任一種,包括存儲(chǔ)總線或存儲(chǔ)控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)的任一種的局部總線。系統(tǒng)存儲(chǔ)器包括只讀存儲(chǔ)器(ROM)24和隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)25。基本輸入/輸出系統(tǒng)26(BIOS)包含如在啟動(dòng)時(shí)幫助在個(gè)人計(jì)算機(jī)20的諸元件之間傳輸信息的基本例程,存儲(chǔ)在ROM 24中。個(gè)人計(jì)算機(jī)20還可包括讀寫(xiě)硬盤(pán)(未示出)的硬盤(pán)驅(qū)動(dòng)器27、讀寫(xiě)可移動(dòng)磁盤(pán)29的磁盤(pán)驅(qū)動(dòng)器28、讀寫(xiě)如CDROM或其它光介質(zhì)的可移動(dòng)光盤(pán)29的光盤(pán)驅(qū)動(dòng)器30。硬盤(pán)驅(qū)動(dòng)器27、磁盤(pán)驅(qū)動(dòng)器28和光盤(pán)驅(qū)動(dòng)器30分別通過(guò)硬盤(pán)驅(qū)動(dòng)器接口32、磁盤(pán)驅(qū)動(dòng)器接口33和光盤(pán)驅(qū)動(dòng)器接口34連接系統(tǒng)總線23。驅(qū)動(dòng)器及其相關(guān)的計(jì)算機(jī)可讀介質(zhì)為個(gè)人計(jì)算機(jī)20提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失存儲(chǔ)。雖然這里描述的示例性環(huán)境采用硬盤(pán)、可移動(dòng)磁盤(pán)29和可移動(dòng)光盤(pán)31,本專(zhuān)業(yè)技術(shù)人員理解,在示例性操作環(huán)境中也能使用可存儲(chǔ)能由計(jì)算機(jī)訪問(wèn)的數(shù)據(jù)的其它類(lèi)型計(jì)算機(jī)可讀介質(zhì),如盒式磁帶、閃存卡、數(shù)字視頻盤(pán)、Bernoulli盒式磁帶、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)等。類(lèi)似地,示例環(huán)境還可包括許多類(lèi)型的監(jiān)視設(shè)備,如熱敏和安全或火警系統(tǒng),及其它信息來(lái)源。
若干程序模塊能存儲(chǔ)在硬盤(pán)、磁盤(pán)29、光盤(pán)31、ROM 24或RAM 25中,包括操作系統(tǒng)35、一個(gè)或多個(gè)應(yīng)用程序36、其它程序模塊37和程序數(shù)據(jù)38。用戶(hù)能通過(guò)如鍵盤(pán)40和定位設(shè)備42等輸入設(shè)備將命令和信息輸入到個(gè)人計(jì)算機(jī)20。其它輸入設(shè)備(未示出)可包括麥克風(fēng)、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線、掃描儀等。這里和其它輸入設(shè)備常通過(guò)耦合到系統(tǒng)總線的串行接口46連接到處理單元21,但也可通過(guò)其它接口連接,如并行口、游戲口或通用串行總線(USB)。監(jiān)視器47或其它類(lèi)型的顯示設(shè)備也通過(guò)如視頻適配器48的接口連接到系統(tǒng)總線23。除監(jiān)視器47以外,個(gè)人計(jì)算機(jī)通常包括如話筒和打印機(jī)等其它外圍輸出設(shè)備(未示出)。圖1的示例系統(tǒng)還包括主適配器55、小型計(jì)算機(jī)系統(tǒng)接口(SCSI)總線56和連接到SCSI總線的外部存儲(chǔ)設(shè)備62。
個(gè)人計(jì)算機(jī)20可使用到如遠(yuǎn)程計(jì)算機(jī)49的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏輯連接在網(wǎng)絡(luò)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)49可以是另一臺(tái)個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn),并通常包括以上對(duì)個(gè)人計(jì)算機(jī)20描述的許多或所有元件,雖然在圖1中只示出存儲(chǔ)器存儲(chǔ)設(shè)備50。圖1中畫(huà)出的邏輯連接包括局域網(wǎng)(LAN)51和廣域網(wǎng)(WAN)52。那樣的網(wǎng)絡(luò)環(huán)境常見(jiàn)于辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)。
在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),個(gè)人計(jì)算機(jī)20通過(guò)網(wǎng)絡(luò)接口或適配器53連接到LAN51。在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),個(gè)人計(jì)算機(jī)20通常包括調(diào)制解調(diào)器54或用于通過(guò)如因特網(wǎng)等廣域網(wǎng)52建立通信的其它裝置。內(nèi)置或外接的調(diào)制解調(diào)器54通過(guò)串行端口接口46連接系統(tǒng)總線23。在網(wǎng)絡(luò)環(huán)境中,相對(duì)個(gè)人計(jì)算機(jī)20畫(huà)出的程序模塊或其部分可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。可以理解,示出的網(wǎng)絡(luò)連接是示例性的,可使用在計(jì)算機(jī)之間建立通信鏈路的其它裝置。
如圖2的框圖所示,計(jì)算機(jī)系統(tǒng)200能被粗略地分成三個(gè)組件組硬件組件202、硬件/軟件接口系統(tǒng)組件204、以及應(yīng)用程序組件206(在這里某些上下文中也稱(chēng)為“用戶(hù)組件”或“軟件組件”)。
回到圖1,在計(jì)算機(jī)系統(tǒng)的各種實(shí)施例中,硬件組件202可包括中央處理單元(CPU)21、存儲(chǔ)器(ROM 24和RAM 25)、基本輸入/輸出系統(tǒng)(BIOS)26、以及各種輸入/輸出(I/O)設(shè)備,如鍵盤(pán)40、鼠標(biāo)42、監(jiān)視器47、和/或打印機(jī)(未示出)等。硬件組件202包括計(jì)算機(jī)系統(tǒng)200的基本物理基礎(chǔ)結(jié)構(gòu)。
應(yīng)用程序組件206包括各種軟件程序,包括但不限于編譯器、數(shù)據(jù)庫(kù)系統(tǒng)、文件處理程序、商業(yè)程序、視頻游戲等。應(yīng)用程序提供計(jì)算機(jī)資源用于為各種用戶(hù)(機(jī)器、其它計(jì)算機(jī)系統(tǒng)和/或最終用戶(hù))解決問(wèn)題、提供解決方案和處理數(shù)據(jù)的手段。
硬件/軟件接口系統(tǒng)組件204包括(在某些實(shí)施例中可以?xún)H包括)操作系統(tǒng),在大多數(shù)情況后者本身包括外殼和內(nèi)核。“操作系統(tǒng)”(OS)是啟動(dòng)擔(dān)當(dāng)在應(yīng)用程序和計(jì)算機(jī)硬件之間的中介的特殊程序。硬件/軟件接口系統(tǒng)組件204還可包括虛擬機(jī)管理器(VMM)、公用語(yǔ)言運(yùn)行庫(kù)(CLR)或其功能等效物、Java虛擬機(jī)(JVM)或其功能等效物、或在計(jì)算機(jī)系統(tǒng)中的操作系統(tǒng)處或操作系統(tǒng)外的其它軟件組件。硬件/軟件接口系統(tǒng)的目的是提供用戶(hù)能在其中執(zhí)行應(yīng)用程序的環(huán)境。任何硬件/軟件接口系統(tǒng)的目標(biāo)是使計(jì)算機(jī)系統(tǒng)便于使用,以及以有效的方式利用計(jì)算機(jī)硬件。
硬件/軟件接口系統(tǒng)一般在啟動(dòng)時(shí)被加載到計(jì)算機(jī)系統(tǒng),并隨后管理在計(jì)算機(jī)系統(tǒng)中所有應(yīng)用程序。應(yīng)用程序通過(guò)經(jīng)由應(yīng)用程序接口(API)請(qǐng)求服務(wù)來(lái)與硬件/軟件接口系統(tǒng)交互。某些應(yīng)用程序使最終用戶(hù)能通過(guò)如命令語(yǔ)言或圖形用戶(hù)界面(GUI)與硬件/軟件接口系統(tǒng)交互。
硬件/軟件接口系統(tǒng)傳統(tǒng)上執(zhí)行應(yīng)用程序的各種服務(wù)。在多個(gè)程序同時(shí)運(yùn)行的多任務(wù)硬件/軟件接口系統(tǒng)中,硬件/軟件接口系統(tǒng)確定哪些應(yīng)用程序以什么次序運(yùn)行,以及在切換到另一應(yīng)用程序之前以供輪流對(duì)每個(gè)應(yīng)用程允許多少時(shí)間。硬件/軟件接口系統(tǒng)還管理在多個(gè)應(yīng)用程序之間內(nèi)部存儲(chǔ)器的共享,并處理來(lái)往于如硬盤(pán)、打印機(jī)和撥號(hào)端口等附加的硬件設(shè)備的輸入和輸出。硬件/軟件接口系統(tǒng)還將有關(guān)操作狀態(tài)和可能發(fā)生的任何錯(cuò)誤的消息發(fā)送到每個(gè)應(yīng)用程序(在某些情況下到最終用戶(hù))。硬件/軟件接口系統(tǒng)也能下傳(offload)批處理作業(yè)(如打印)的管理,使得啟動(dòng)的應(yīng)用程序能擺脫此工作并重新開(kāi)始其它處理和/或操作。在能提供并行處理的計(jì)算機(jī)上,硬件/軟件接口系統(tǒng)還管理劃分程序,使得它同時(shí)在多個(gè)處理器上運(yùn)行。
硬件/軟件接口系統(tǒng)外殼(這里簡(jiǎn)稱(chēng)“外殼”)是到硬件/軟件接口系統(tǒng)的交互式最終用戶(hù)界面。(外殼也稱(chēng)為“命令解釋器”,或在一個(gè)操作系統(tǒng)中稱(chēng)為“操作系統(tǒng)外殼”)。外殼是可直接由應(yīng)用程序和/或最終用戶(hù)訪問(wèn)的硬件/軟件接口系統(tǒng)的外層。與外殼相反,內(nèi)核是直接與硬件組件交互的硬件/軟件接口系統(tǒng)的最內(nèi)層。
雖然可構(gòu)想本發(fā)明的許多實(shí)施例尤其適用于計(jì)算機(jī)化的系統(tǒng),然而在本說(shuō)明中不意味著將本發(fā)明限于那些實(shí)施例。相反,這里使用的術(shù)語(yǔ)“計(jì)算機(jī)系統(tǒng)”旨在包括能存儲(chǔ)和處理信息和/或能使用存儲(chǔ)的信息控制設(shè)備本身的行為或執(zhí)行的任何和所有設(shè)備,而不管那些設(shè)備本質(zhì)上是否為電子的、機(jī)械的、邏輯的、或虛擬的。
B.傳統(tǒng)的基于文件的存儲(chǔ)在當(dāng)今大多數(shù)計(jì)算機(jī)系統(tǒng)中,“文件”是可存儲(chǔ)信息的單元,它可包括硬件/軟件接口系統(tǒng)和應(yīng)用程序、數(shù)據(jù)集等。在所有現(xiàn)代硬件/軟件接口系統(tǒng)中(Windows,Unix,Linux,MacOS,虛擬機(jī)系統(tǒng)等),文件是能由硬件/軟件接口系統(tǒng)處理的基本的分立(可存儲(chǔ)和可檢索)信息單元。文件組通常被組織成“文件夾”。在MicrosoftWindows、Macintosh OS和其它硬件/軟件接口系統(tǒng)中,文件夾是能作為單個(gè)信息單元被檢索、移動(dòng)和處理的文件的集合。這些文件夾進(jìn)而被組織成稱(chēng)為“目錄”(在后面詳細(xì)討論)的基于樹(shù)形的分層結(jié)構(gòu)排列。在如Dos、z/OS和大多數(shù)基于Unix的操作系統(tǒng)的其它硬件/軟件接口系統(tǒng)中,術(shù)語(yǔ)“目錄”和/或“文件夾”是可交替使用的,早期的Apple計(jì)算機(jī)系統(tǒng)(如Apple IIe)使用術(shù)語(yǔ)“類(lèi)別”來(lái)代替目錄;然而在這里使用時(shí)所有這些術(shù)語(yǔ)被看成是同義語(yǔ)并可交替使用,并旨在還包括對(duì)分層信息存儲(chǔ)結(jié)構(gòu)及其文件夾和文件組件的所有其它等價(jià)術(shù)語(yǔ)的引用。
傳統(tǒng)上,目錄(又名文件夾的目錄)是基于樹(shù)形的分層結(jié)構(gòu),其中文件被組合成文件夾,文件夾進(jìn)而按包括目錄樹(shù)的相對(duì)節(jié)點(diǎn)位置排列。例如,如圖2A所示,基于DOS的文件系統(tǒng)的基本文件夾(或“根目錄”)212可包括多個(gè)文件夾214,其每一個(gè)可以還包括另外的文件夾(如特定文件夾的“子文件夾”)216,而這些的每一個(gè)又包括另外的文件夾218,直到無(wú)限。這些文件夾的每一個(gè)可具有一個(gè)或多個(gè)文件220,雖然在硬件/軟件接口系統(tǒng)級(jí)上,文件夾中的各個(gè)文件除了它們?cè)跇?shù)形分層結(jié)構(gòu)中的位置外沒(méi)有什么共同點(diǎn)。不奇怪,將文件組織到文件分層結(jié)構(gòu)的方法間接地反映了用于存儲(chǔ)這些文件的典型存儲(chǔ)介質(zhì)(如硬盤(pán)、軟盤(pán)、CD-ROM等)的物理組織。
除上述以外,每個(gè)文件夾是對(duì)其子文件夾和其目錄的容器—即,每個(gè)文件夾擁有其子文件夾和文件。例如,當(dāng)文件夾被硬件/軟件接口系統(tǒng)刪除時(shí),該文件夾的子文件夾和文件也被刪除(在每個(gè)子文件夾的情況下還遞歸地包括它自己的子文件夾和文件)。同樣,每個(gè)文件一般只由一個(gè)文件夾擁有,并且雖然文件能被拷貝且副本位于不同的文件夾,文件的副本本身是不同且獨(dú)立單元,它與原始文件無(wú)直接連接(如對(duì)原始文件的改變?cè)谟布?軟件接口系統(tǒng)級(jí)上不反映到副本文件)。因此在這方面,文件和文件夾在本質(zhì)上是“物理的”,因?yàn)槲募A類(lèi)似于物理容器來(lái)處理,而文件作為這些容器中不同且獨(dú)立的物理元素來(lái)處理。
II.用于組織、搜索和共享數(shù)據(jù)的WINFS存儲(chǔ)平臺(tái)本發(fā)明結(jié)合通過(guò)引用結(jié)合于此的發(fā)明針對(duì)用于組織、搜索和共享數(shù)據(jù)的存儲(chǔ)平臺(tái)。本發(fā)明的存儲(chǔ)平臺(tái)擴(kuò)展和拓寬了數(shù)據(jù)平臺(tái),超越上文討論的文件系統(tǒng)及數(shù)據(jù)庫(kù)系統(tǒng),并被設(shè)計(jì)成存儲(chǔ)所有類(lèi)型的數(shù)據(jù),包括稱(chēng)為項(xiàng)目的新格式的數(shù)據(jù)。
A.詞匯表在這里及在權(quán)利要求書(shū)中使用的術(shù)語(yǔ)有下列意義·“項(xiàng)目”是能存儲(chǔ)硬件/軟件接口系統(tǒng)可訪問(wèn)的信息的單元,不象簡(jiǎn)單文件,它是具有由硬件/軟件接口系統(tǒng)外殼展現(xiàn)給最終用戶(hù)的所有對(duì)象共同支持的基本屬性集的對(duì)象。項(xiàng)目還具對(duì)所有項(xiàng)目類(lèi)型共同支持的屬性和關(guān)系,包括允許引入新屬性和關(guān)系的特征(在下面詳細(xì)討論)。
·“操作系統(tǒng)”(OS)是扮作應(yīng)用程序和計(jì)算機(jī)硬件之間的中介的特殊程序。在大多數(shù)情況下,操作系統(tǒng)包括外殼和內(nèi)核。
·“硬件/軟件接口系統(tǒng)”是軟件、或硬件及軟件的組合,它起著在計(jì)算機(jī)系統(tǒng)的底層硬件組件和在計(jì)算機(jī)系統(tǒng)上執(zhí)行的應(yīng)用程序之間的接口的作用。硬件/軟件接口系統(tǒng)通常包括(在某些實(shí)施例中只包括)操作系統(tǒng)。硬件/軟件接口系統(tǒng)還能包括虛擬機(jī)管理器(VMM)、公用語(yǔ)言運(yùn)行庫(kù)(CLR)或其功能等效物,Java虛擬機(jī)(JVM)或其功能等效物、或在計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)處或除操作系統(tǒng)外的其它軟件組件。硬件/軟件接口系統(tǒng)的目的是提供用戶(hù)能執(zhí)行應(yīng)用程序的環(huán)境。任何硬件/軟件接口系統(tǒng)的目標(biāo)是使計(jì)算機(jī)系統(tǒng)便于使用,并以有效方式利用計(jì)算機(jī)硬件。
B.存儲(chǔ)平臺(tái)綜述參考圖3,存儲(chǔ)平臺(tái)300包括在數(shù)據(jù)庫(kù)引擎314上實(shí)現(xiàn)的數(shù)據(jù)存儲(chǔ)302。在一個(gè)實(shí)施例中,數(shù)據(jù)庫(kù)引擎包括帶有對(duì)象關(guān)系擴(kuò)展的關(guān)系型數(shù)據(jù)庫(kù)引擎。在一個(gè)實(shí)施例中,關(guān)系型數(shù)據(jù)庫(kù)引擎314包括Microsoft SQL Server關(guān)系型數(shù)據(jù)庫(kù)引擎。數(shù)據(jù)存儲(chǔ)302實(shí)現(xiàn)支持?jǐn)?shù)據(jù)的組織、搜索、共享、同步和安全的數(shù)據(jù)模型304。在如模式340等模式中描述特定的數(shù)據(jù)類(lèi)型,并且存儲(chǔ)平臺(tái)300提供用于采用這些模式并用于擴(kuò)展這些模式的工具346,這在后面詳述。
在數(shù)據(jù)存儲(chǔ)302中實(shí)現(xiàn)的改變跟蹤機(jī)制306提供跟蹤數(shù)據(jù)存儲(chǔ)的改變的能力。數(shù)據(jù)存儲(chǔ)302還提供安全能力308和升級(jí)/降級(jí)能力310,均在后文詳述。數(shù)據(jù)存儲(chǔ)302還提供一組應(yīng)用程序接口312,以向利用該存儲(chǔ)平臺(tái)的其它存儲(chǔ)平臺(tái)組件和應(yīng)用程序(如應(yīng)用程序350a,350b和350c)展現(xiàn)數(shù)據(jù)存儲(chǔ)302的能力。本發(fā)明的存儲(chǔ)平臺(tái)還包括應(yīng)用程序接口(API)322,使如應(yīng)用程序350a,350b,和350c等應(yīng)用程序能訪問(wèn)存儲(chǔ)平臺(tái)的所有上述功能并能訪問(wèn)在模式中描述的數(shù)據(jù)。應(yīng)用程序能結(jié)合如OLE OB API 324和Microsoft Windows Win 32 API 326等其它API來(lái)使用存儲(chǔ)平臺(tái)API 322。
本發(fā)明的存儲(chǔ)平臺(tái)300能向應(yīng)用程序提供各種服務(wù),包括便于在用戶(hù)或系統(tǒng)之間共享數(shù)據(jù)的同步服務(wù)330。例如,同步服務(wù)330允許與具有與數(shù)據(jù)存儲(chǔ)302相同格式的其它數(shù)據(jù)存儲(chǔ)340的互操作,并訪問(wèn)具有其它格式的數(shù)據(jù)存儲(chǔ)342。存儲(chǔ)平臺(tái)300還提供允許數(shù)據(jù)存儲(chǔ)302與如Windows NTFS文件系統(tǒng)318等現(xiàn)有文件系統(tǒng)的互操作的文件系統(tǒng)能力。在至少某些實(shí)施例中,存儲(chǔ)平臺(tái)320還能向應(yīng)用程序提供另外的能力,以允許對(duì)數(shù)據(jù)起作用并允許與其它系統(tǒng)的交互。這些能力可體現(xiàn)在如Info Agent服務(wù)334和通知服務(wù)332等附加服務(wù)328的形式中,以及體現(xiàn)在其它實(shí)用程序336的形式中。
在至少某些實(shí)施例中,存儲(chǔ)平臺(tái)以計(jì)算機(jī)系統(tǒng)的硬件/軟件接口系統(tǒng)來(lái)實(shí)施,或形成其完整的一部分。例如而非限制,本發(fā)明的存儲(chǔ)平臺(tái)能用操作系統(tǒng)、虛擬機(jī)管理器(VMM)、公用語(yǔ)言運(yùn)行庫(kù)(CLR)或其功能等效物、或Java虛擬機(jī)(JVM)或其功能等效物來(lái)實(shí)施,或形成其完整的一部分。通過(guò)其公用的存儲(chǔ)基礎(chǔ)和模式化的數(shù)據(jù),本發(fā)明的存儲(chǔ)平臺(tái)使消費(fèi)者、知識(shí)工人和企業(yè)作能夠更有效地進(jìn)行應(yīng)用程序的開(kāi)發(fā)。它提供了豐富和可擴(kuò)展的編程表面區(qū)域,不僅可得到內(nèi)含在其數(shù)據(jù)模型中的能力,還能包括和擴(kuò)展現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫(kù)訪問(wèn)方法。
在上述描述中及在各種附圖中,本發(fā)明的存儲(chǔ)平臺(tái)300可稱(chēng)作“WinFs”。然而使用此名字指存儲(chǔ)平臺(tái)僅是為了描述方便,并不試圖作出如此限制。
C.數(shù)據(jù)模型本發(fā)明的存儲(chǔ)平臺(tái)300的數(shù)據(jù)存儲(chǔ)302實(shí)現(xiàn)一種數(shù)據(jù)模型,它支持對(duì)駐留在數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)的組織、搜索、共享、同步和安全。在本發(fā)明的數(shù)據(jù)模型中,“項(xiàng)目”是存儲(chǔ)信息的基本單元。該數(shù)據(jù)模型提供一種機(jī)制,用于聲明項(xiàng)目和項(xiàng)目的擴(kuò)展、用于建立在項(xiàng)目之間的關(guān)系、以及用于將項(xiàng)目組織到項(xiàng)目文件夾和類(lèi)別中,下面將更充分描述。
該數(shù)據(jù)模型依賴(lài)于兩個(gè)原語(yǔ)機(jī)制類(lèi)型和關(guān)系。類(lèi)型是提供支配類(lèi)型的實(shí)例的形式的格式的結(jié)構(gòu)。格式被表達(dá)成屬性的有序組。屬性是給定類(lèi)型的值或一組值的名字。例如,USPostalAddress(美國(guó)郵政地址)類(lèi)型具有屬性Street(街道)、City(城市)、Zip(郵編)、State(州),其中Street、City和State是String類(lèi)型,而Zip是Int32類(lèi)型。Street可以是多值(即一組值),允許地址對(duì)Street屬性具有一個(gè)以上值。系統(tǒng)定義能在其它類(lèi)型構(gòu)造中使用的某些原語(yǔ)類(lèi)型,包括String、Binary、Boolean、Int16、Int32、Int64、Single、Double、Byte、DateTime、Decimal和GUID??墒褂萌魏卧Z(yǔ)類(lèi)型(帶有下面注釋的某些限制)或任何構(gòu)造的類(lèi)型來(lái)定義類(lèi)型的屬性。例如,Location(位置)類(lèi)型可定義具有屬性Coordinate(座標(biāo))和Addess(地址),其中Address屬性是上述類(lèi)型USPostalAddress。屬性也可以是必需的或可任選的。
關(guān)系可被聲明并表示兩個(gè)類(lèi)型的實(shí)例集之間的映射。例如,可以有在Person(個(gè)人)類(lèi)型和Location類(lèi)型之間聲明的關(guān)系,稱(chēng)為L(zhǎng)ivesAt(生活在),它確定什么人生活在什么位置。關(guān)系具有名和兩個(gè)端點(diǎn),即源端點(diǎn)和目標(biāo)端點(diǎn)。關(guān)系也可具有屬性的有序集。源端點(diǎn)及目標(biāo)端點(diǎn)均具有名和類(lèi)型。例如,LivesAt關(guān)系具有稱(chēng)為類(lèi)型Person的Occupant(居民)的源和稱(chēng)為類(lèi)型Location的Dwelling(住房)的目標(biāo),且此外具有屬性StartDate(起始日期)和EndDate(終止日期),表示該居民生活在該住房的時(shí)間段。注意,隨時(shí)間推移,個(gè)人能生活在多個(gè)住房,且住房可有多個(gè)居民,所以放置StartDate和EndDate信息的最可能的地方是在關(guān)系本身處。
關(guān)系定義了在由作為端點(diǎn)類(lèi)型給出的類(lèi)型約束的實(shí)例之間的映射。例如LivesAt關(guān)系不能是其中Automobile(汽車(chē))是Occupant(居民)的關(guān)系,因?yàn)锳utomobile不是Person。
數(shù)據(jù)模型允許定義類(lèi)型間的子類(lèi)型-超類(lèi)型關(guān)系。也稱(chēng)為基本類(lèi)型關(guān)系的子類(lèi)型—超類(lèi)系型關(guān)系以如下方式定義,若類(lèi)型A是類(lèi)型B的基本類(lèi)型,則必須是B的每個(gè)實(shí)例也是A的實(shí)例的情況。另一種表達(dá)的方法是符合B的每個(gè)實(shí)例必須符合A。例如,若A具有String類(lèi)型的屬性Name(名字),而B(niǎo)具有Int16類(lèi)型的屬性Age(年齡),則得出,B的任何實(shí)例必須兼有Name和Age。類(lèi)型的分層結(jié)構(gòu)可被設(shè)想成帶有在根上的單個(gè)超類(lèi)型的樹(shù)。根的分枝提供第一級(jí)子類(lèi)型,該級(jí)分枝提供第二級(jí)子類(lèi)型,如此等等,直到本身不再具有任何子類(lèi)型的葉端(leaf-most)子類(lèi)型。樹(shù)不限于統(tǒng)一深度,但不能包含任何回路。給定的類(lèi)型可具有零個(gè)或許多子類(lèi)型和零個(gè)或一個(gè)超類(lèi)型。給定實(shí)例可最多符合一個(gè)類(lèi)型以及該類(lèi)型的超類(lèi)型。換言之,對(duì)樹(shù)中任一級(jí)處給定的實(shí)例,該實(shí)例最多可符合該級(jí)上的一個(gè)子類(lèi)型。如果一類(lèi)型的實(shí)例必須也是該類(lèi)型的子類(lèi)型的實(shí)例,則該類(lèi)型可說(shuō)成是抽象。
1.項(xiàng)目項(xiàng)目是可存儲(chǔ)的信息的單元,不象簡(jiǎn)單的文件,它是具有由存儲(chǔ)平臺(tái)向最終用戶(hù)或應(yīng)用程序展現(xiàn)的所有對(duì)象共同支持的基本屬性集的對(duì)象。項(xiàng)目也具有所有項(xiàng)目類(lèi)型共同支持的屬性和關(guān)系,包括如下所述允許引入新的屬性和關(guān)系的特征。
項(xiàng)目是公用操作的對(duì)象,如拷貝、刪除、移動(dòng)、打開(kāi)、打印、備份、恢復(fù)、復(fù)制等。項(xiàng)目是能被存儲(chǔ)和檢索的單元,且由存儲(chǔ)平臺(tái)處理的可存儲(chǔ)信息的所有形式作為項(xiàng)目、項(xiàng)目的屬性、或項(xiàng)目之間的關(guān)系存在,其每個(gè)在下面更詳細(xì)討論。
項(xiàng)目旨在表示顯示的且容易理解的數(shù)據(jù)單元,如聯(lián)系人(Contacts)、人(People)、服務(wù)(Services)、位置(Locations)、(各種類(lèi)型的)文檔(Documents)等。圖5A是示出項(xiàng)目的結(jié)構(gòu)的框圖。該項(xiàng)目的不合格的名是“Location”。該項(xiàng)目的合格名是“Core.Location”,它表明,此項(xiàng)目結(jié)構(gòu)被定義成Core(核心)模式中的特定類(lèi)型的項(xiàng)目(Core模式在下面詳細(xì)討論)。
Location項(xiàng)目具有多個(gè)屬性,包括EAddress(電子郵件地址)、MetropolitanRegion(都市地區(qū))、Neighborhood(街坊)、和PostalAddress(郵政地址)。每個(gè)項(xiàng)目的特定類(lèi)型屬性緊跟屬性名地表示,并用冒號(hào)(“”)與屬性名分開(kāi)。在類(lèi)型名的右邊,對(duì)該屬性類(lèi)型允許的值的數(shù)量在方括號(hào)(“[]”)之間表示,其中冒號(hào)(“”)右邊的星號(hào)(“*”)表示未規(guī)定的和/或無(wú)限制的數(shù)量(“許多”)。冒號(hào)右邊的“1”表明最多一個(gè)值。冒號(hào)左邊的零(“0”)表明該屬性是可任選的(可以完全沒(méi)有值)。冒號(hào)左邊的“1”表明必須至少有一個(gè)值(該屬性是必須的)。Neighborhood和MetropolitanRegin均是“nvarchar”類(lèi)型(或等效類(lèi)型),它是預(yù)定義的數(shù)據(jù)類(lèi)型或“簡(jiǎn)單類(lèi)型”(這里用缺少大寫(xiě)來(lái)表示)。然而EAddress和PostalAddress分別是類(lèi)型EAddress和PostalAddress的已定義類(lèi)型或“復(fù)雜類(lèi)型”(這里用大寫(xiě)標(biāo)記)的屬性。復(fù)雜類(lèi)型是從一個(gè)或多個(gè)簡(jiǎn)單數(shù)據(jù)類(lèi)型和/或從其它復(fù)雜類(lèi)型導(dǎo)出的類(lèi)型。一個(gè)項(xiàng)目的屬性的復(fù)雜類(lèi)型還構(gòu)成”嵌套元素“,因?yàn)閺?fù)雜類(lèi)型的細(xì)節(jié)嵌套入直接項(xiàng)目中以定義其屬性,而屬于這些復(fù)雜類(lèi)型的信息用具有這些屬性的項(xiàng)目來(lái)維持(在該項(xiàng)目的邊界內(nèi),如后面討論)。類(lèi)型的這些概念是眾知的,且容易被本專(zhuān)業(yè)技術(shù)人員理解。
圖5B是示出復(fù)雜屬性類(lèi)型PostalAddress和EAddress的框圖。PostalAddress屬性類(lèi)型定義,屬性類(lèi)型PostalAddress的項(xiàng)目可期望有零個(gè)或一個(gè)City(城市)值、零個(gè)或一個(gè)Country Code(國(guó)家代碼)值、零個(gè)或一個(gè)MailStop(國(guó)家代碼)值、和任何數(shù)量(零到許多)PostalAddress類(lèi)型等等。以此方式,定義了一項(xiàng)目中的特定屬性的數(shù)據(jù)的形狀。EAddress屬性類(lèi)型如所示類(lèi)似地定義。雖然這里在本申請(qǐng)中可任選地使用,表示在Location項(xiàng)目中復(fù)雜類(lèi)型的另一方法是用其中列出的每個(gè)復(fù)雜類(lèi)型的各個(gè)屬性得出該項(xiàng)目。圖5C是示出Location項(xiàng)目的框圖,在其中進(jìn)一步描述其復(fù)雜類(lèi)型。然而應(yīng)該理解,在此圖5C中Location項(xiàng)目的另一種表示恰是對(duì)圖5A中示出的同一個(gè)項(xiàng)目。本發(fā)明的存儲(chǔ)平臺(tái)還允許子分類(lèi)(subtyping),從而一個(gè)屬性類(lèi)能是另一個(gè)的子類(lèi)型(其中一個(gè)屬性類(lèi)繼承另一個(gè)父屬性類(lèi)型的屬性)。
類(lèi)似于但不同于屬性及它們的屬性類(lèi)型,項(xiàng)目繼承性地表示其自己的Item(項(xiàng)目)類(lèi)型,它也是子分類(lèi)的主題。換言之,本發(fā)明的若干實(shí)施例中的存儲(chǔ)平臺(tái)允許一個(gè)項(xiàng)目是另一個(gè)項(xiàng)目的子類(lèi)型(從而一個(gè)項(xiàng)目繼承另一個(gè)父項(xiàng)目的屬性)。此外,對(duì)本發(fā)明的各種實(shí)施例,每個(gè)項(xiàng)目是“Item”項(xiàng)目類(lèi)型的子類(lèi)型,后者是在基礎(chǔ)模式中找到的第一和基本的項(xiàng)目類(lèi)型(基礎(chǔ)模式也在后面詳細(xì)討論)。圖6A示出一項(xiàng)目(在此實(shí)例中為L(zhǎng)ocation項(xiàng)目)為在基礎(chǔ)模式中找到的Item項(xiàng)目類(lèi)型的子類(lèi)型。在此圖中,箭頭表示Location項(xiàng)目(如所有其它項(xiàng)目)是Item項(xiàng)目類(lèi)型的子類(lèi)型。作為從中導(dǎo)出所有其它項(xiàng)目的基本項(xiàng)目的Item項(xiàng)目類(lèi)型具有若干如ItemId的重要屬性和各種時(shí)間標(biāo)記,從而定義了操作系統(tǒng)中所有項(xiàng)目的標(biāo)準(zhǔn)屬性。在本圖中,Item項(xiàng)目類(lèi)型的這些屬性被Location所繼承,并從而成為L(zhǎng)ocation的屬性。
表示從Item項(xiàng)目類(lèi)型繼承的Location項(xiàng)目中屬性的另一種方法是用來(lái)自其中列出的父項(xiàng)目的每個(gè)屬性類(lèi)型的各個(gè)屬性得出Location。圖6B是示出Location項(xiàng)目的框圖,其中除了其直接屬性外描述其繼承的類(lèi)型。應(yīng)注意和理解,此項(xiàng)目是圖5A中示出的同一項(xiàng)目,雖然在本圖中,Location用所有其屬性示出,包括直接屬性(在本圖及圖5A中示出)和繼承屬性(在本圖中示出但未在圖5A中示出)(而在圖5A中,通過(guò)用箭頭示出Location項(xiàng)目是Item項(xiàng)目類(lèi)型的子類(lèi)型來(lái)引用這些屬性)。
項(xiàng)目是獨(dú)立的對(duì)象,因而若刪除一項(xiàng)目,也刪除項(xiàng)目的所有直接和繼承的屬性。類(lèi)似地,當(dāng)檢索一項(xiàng)目時(shí),檢索的是該項(xiàng)目及其所有直接和繼承的屬性(包括屬于其復(fù)雜屬性類(lèi)型的信息)。本發(fā)明的某些實(shí)施例可使人們能在檢索特定項(xiàng)目時(shí)請(qǐng)求屬性的子集;然而對(duì)許多那樣的實(shí)施例默認(rèn)的是在檢索時(shí)向項(xiàng)目提供所有其直接和繼承的屬性。此外,項(xiàng)目的屬性也能通過(guò)添加新的屬性到該項(xiàng)目的類(lèi)型的現(xiàn)有屬性而加以擴(kuò)展。這些“擴(kuò)展”其后是該項(xiàng)目的真實(shí)屬性,且該項(xiàng)目類(lèi)型的子類(lèi)型可自動(dòng)地包括擴(kuò)展屬性。
項(xiàng)目的“邊界”由其屬性(包括復(fù)雜屬性類(lèi)型、擴(kuò)展等)來(lái)表示。項(xiàng)目的邊界也表示在項(xiàng)目上執(zhí)行的操作的限制,包括拷貝、刪除、移動(dòng)、創(chuàng)建等。例如在本發(fā)明的若干實(shí)施例中,當(dāng)拷貝一項(xiàng)目時(shí),在該項(xiàng)目邊界之內(nèi)的所有內(nèi)容也被拷貝。對(duì)每個(gè)項(xiàng)目,邊界包括下列·項(xiàng)目的項(xiàng)目類(lèi)型,且若該項(xiàng)目是另一項(xiàng)目的子類(lèi)型(如在所有項(xiàng)目從基礎(chǔ)模式的單個(gè)項(xiàng)目和項(xiàng)目類(lèi)型導(dǎo)出的本發(fā)明的若干實(shí)施例的情況下),是任何適用的子類(lèi)型信息(即屬于父項(xiàng)目類(lèi)型的信息)。若要拷貝的原始項(xiàng)目是另一項(xiàng)目的子類(lèi)型,該副本也能是該相同項(xiàng)目的子類(lèi)型。
·項(xiàng)目的復(fù)雜類(lèi)型屬性和擴(kuò)展(如果有的話)。若原始項(xiàng)目具有復(fù)雜類(lèi)型(原來(lái)的或擴(kuò)展的)的屬性,副本也能具有相同的復(fù)雜類(lèi)型。
·在“所有權(quán)關(guān)系”上的項(xiàng)目的記錄,即,本項(xiàng)目(“擁有項(xiàng)目”)擁有什么其它項(xiàng)目(“目錄項(xiàng)目”)的項(xiàng)目擁有列表。這特別關(guān)系到下面充分討論的項(xiàng)目文件夾和下面說(shuō)到的所有項(xiàng)目必須至少屬于一個(gè)項(xiàng)目文件夾的規(guī)則。此外,關(guān)于嵌入項(xiàng)目(下列更充分討論),一個(gè)嵌入項(xiàng)目被認(rèn)為是其中嵌入如拷貝、刪除等操作的項(xiàng)目的一部分。
2.項(xiàng)目標(biāo)識(shí)在全局項(xiàng)目空間中用ItemID唯一地標(biāo)識(shí)項(xiàng)目。Base.Item類(lèi)型定義了存儲(chǔ)該項(xiàng)目身份的類(lèi)型GUID的字段ItemID。一項(xiàng)目必須在數(shù)據(jù)存儲(chǔ)中準(zhǔn)確只有一個(gè)身份。
項(xiàng)目引用是包含定位和標(biāo)識(shí)項(xiàng)目的信息的數(shù)據(jù)結(jié)構(gòu)。在該數(shù)據(jù)模型中,定義名為ItemReference的抽象類(lèi)型,從中導(dǎo)出所有項(xiàng)目引用類(lèi)型。ItemReference(項(xiàng)目引用)類(lèi)型定義了名為Resolve(解析)的虛擬方法。Resolve方法解析ItemReference并返回一項(xiàng)目。此方法被ItemReference的具體子類(lèi)型所覆蓋,后者實(shí)現(xiàn)給定一引用時(shí)檢索項(xiàng)目的功能。調(diào)用Resolve方法作為存儲(chǔ)平臺(tái)API 322的一部分。
ItemIDReference(項(xiàng)目ID引用)是ItemReference的子類(lèi)型。它定義了Locator(定位器)和ItemID字段。Locator字段命名(即標(biāo)識(shí))項(xiàng)目的域。它由能將Locator的值解析到項(xiàng)目域的定位器解析方法來(lái)處理。ItemID字段是ItemID類(lèi)型。
ItemPathReference(項(xiàng)目路徑引用)是定義Locator和Path(路徑)字段的ItemReference的特殊化。Locator字段標(biāo)識(shí)一項(xiàng)目域。它由能將Locator的值解析到項(xiàng)目域的定位器解析方法來(lái)處理。Path字段包含以由Locator提供的項(xiàng)目域?yàn)楦拇鎯?chǔ)平臺(tái)名字空間中的(相對(duì))路徑。
不能在集合運(yùn)算中使用此類(lèi)引用。引用一般必須通過(guò)路徑解析過(guò)程來(lái)解析。存儲(chǔ)平臺(tái)API 322的Resolve方法提供此功能。
上面討論的引用形式通過(guò)圖11示出的引用類(lèi)型分層結(jié)構(gòu)表示。從這些類(lèi)型繼承的另外引用類(lèi)型能在模式中定義。它們能在關(guān)系聲明中用作目標(biāo)字段的類(lèi)型。
3.項(xiàng)目文件夾和類(lèi)別如下面將更充分討論的,項(xiàng)目組能組織成稱(chēng)為項(xiàng)目文件夾(不要與文件的文件夾混淆)的特殊項(xiàng)目。然而不象大多數(shù)文件系統(tǒng),一個(gè)項(xiàng)目可屬于多個(gè)項(xiàng)目文件夾,使得當(dāng)一個(gè)項(xiàng)目在一個(gè)項(xiàng)目文件夾中被訪問(wèn)和修訂時(shí),此修訂的項(xiàng)目隨后能直接從另一項(xiàng)目文件夾訪問(wèn)。實(shí)質(zhì)上,雖然對(duì)一個(gè)項(xiàng)目的訪問(wèn)可從不同的項(xiàng)目文件夾發(fā)生,事實(shí)上真正訪問(wèn)的是同一個(gè)項(xiàng)目。然而,一個(gè)項(xiàng)目文件夾不必?fù)碛衅渌谐蓡T項(xiàng)目,或簡(jiǎn)單地結(jié)合其它文件夾共同擁有項(xiàng)目,使得一個(gè)項(xiàng)目文件夾的刪除不必要導(dǎo)致項(xiàng)目的刪除。然而在本發(fā)明的若干實(shí)施例中,一個(gè)項(xiàng)目必須至少屬于一個(gè)項(xiàng)目文件夾,使得如果特定項(xiàng)目的唯一文件夾被刪除,則對(duì)某些實(shí)施例,該項(xiàng)目被自動(dòng)被刪除,或在另外實(shí)施例中,該項(xiàng)目自動(dòng)地成為默認(rèn)項(xiàng)目文件夾的成員(“TrashCan(垃圾箱)”文件夾在概念上類(lèi)似于在各種基于文件和文件夾的系統(tǒng)中使用的類(lèi)似名字文件夾。)如下面更充分討論的,項(xiàng)目也可屬于基于共同描述的特征的類(lèi)別,特征如(a)項(xiàng)目類(lèi)型(或類(lèi)型),(b)特定的直接或繼承的屬性(或?qū)傩?,或(c)對(duì)應(yīng)于項(xiàng)目屬性的特定值(或值)。例如,包括個(gè)人聯(lián)系人信息的特定屬性的項(xiàng)目可自動(dòng)屬于聯(lián)系人(Contact)類(lèi)別,具有聯(lián)系人信息屬性的任何項(xiàng)目看來(lái)也自動(dòng)屬于此類(lèi)別。同樣,具有“New York City(紐約市)”值的位置屬性的任何項(xiàng)目可自動(dòng)屬于紐約市類(lèi)別。
類(lèi)別在概念上不同于項(xiàng)目文件夾之處在于,項(xiàng)目文件夾可包括互相無(wú)關(guān)的項(xiàng)目(即無(wú)共同的描述的特征),而在類(lèi)別中的每個(gè)項(xiàng)目具有對(duì)該類(lèi)別描述的共同類(lèi)型、屬性或值(“共同性”),正是這個(gè)共同性形成對(duì)它與該類(lèi)別中其它項(xiàng)目或那些項(xiàng)目之間的關(guān)系的基礎(chǔ)。此外,雖然在特定文件夾中的項(xiàng)目的成員資格基于該項(xiàng)目的任何特定方面不是強(qiáng)制的,然而對(duì)某些實(shí)施例,具有在分類(lèi)上與一類(lèi)別相關(guān)的共同性的所有項(xiàng)目在硬件/軟件接口系統(tǒng)級(jí)上可自動(dòng)地成為該類(lèi)別的成員。概念上,類(lèi)別也能看作虛擬項(xiàng)目文件夾,其成員資格基于特定查詢(xún)(如在數(shù)據(jù)庫(kù)的上下文中)的結(jié)果,而滿足此查詢(xún)的條件(由類(lèi)別的共同性確定)的項(xiàng)目應(yīng)構(gòu)成該類(lèi)別的成員資格。
圖4示出在項(xiàng)目、項(xiàng)目文件夾和類(lèi)別之間的結(jié)構(gòu)關(guān)系。多個(gè)項(xiàng)目402、404、406、408、410、412、414、418和420是各個(gè)項(xiàng)目文件夾422、424、426、428和430的成員。某些項(xiàng)目屬于一個(gè)以上項(xiàng)目文件夾,如項(xiàng)目402屬于項(xiàng)目文件夾422和424。某些項(xiàng)目,如項(xiàng)目402、404、406、408、410和412也是一個(gè)或多個(gè)類(lèi)別432、434和436的成員,而其它項(xiàng)目,如項(xiàng)目44,416,418和420可以不屬于任何類(lèi)別(雖然這大部分不象在某些實(shí)施例中,其中具有任何屬性自動(dòng)暗示類(lèi)別中的成員資格,因此在那樣實(shí)施例中為了不是任何類(lèi)別的成員,項(xiàng)目應(yīng)完全地?zé)o特征)。與文件夾的分層結(jié)構(gòu)相反,類(lèi)別和項(xiàng)目文件夾均有更像如所示的有向圖的結(jié)構(gòu)。在任何情況下,項(xiàng)目、項(xiàng)目文件夾和類(lèi)別都是項(xiàng)目(盡管是不同的項(xiàng)目類(lèi)型)。
與文件、文件夾和目錄相反,本發(fā)明的項(xiàng)目、項(xiàng)目文件夾和類(lèi)別的特征在本質(zhì)上不是“物理的”,因?yàn)樗鼈儾痪哂形锢砣萜鞯母拍钌系牡葍r(jià)性,因而項(xiàng)目可存在于一個(gè)以上那樣的位置。項(xiàng)目存在于一個(gè)以上項(xiàng)目文件位置以及被組織成類(lèi)別的能力提供了在硬件/軟件接口級(jí)上增強(qiáng)和豐富程度的數(shù)據(jù)處理及存儲(chǔ)結(jié)構(gòu)能力,超越了在本領(lǐng)域中當(dāng)前可得到的能力。
4.模式a)基礎(chǔ)模式為了提供創(chuàng)建和使用項(xiàng)目的通用基礎(chǔ),本發(fā)明的存儲(chǔ)平臺(tái)的各實(shí)施例包括建立用于創(chuàng)建和組織項(xiàng)目及屬性的概念性框架的基礎(chǔ)(Base)模式?;A(chǔ)模式定義了某些特定類(lèi)型的項(xiàng)目和屬性,以及從中進(jìn)一步導(dǎo)出子類(lèi)型的這些特定基本類(lèi)型的特征。使用此基礎(chǔ)模式使程序員能在概念上將項(xiàng)目(及其各自的類(lèi)型)與屬性(及其各自的類(lèi)型)加以區(qū)別。此外,基礎(chǔ)模式列出所有項(xiàng)目可擁有的基本屬性集,因?yàn)樗许?xiàng)目(及其對(duì)應(yīng)的項(xiàng)目類(lèi)型)是從基礎(chǔ)模式的此基本項(xiàng)目(及其對(duì)應(yīng)的項(xiàng)目類(lèi)型)導(dǎo)出。
如圖7所示,對(duì)于本發(fā)明的若干實(shí)施例,基礎(chǔ)模式定義三個(gè)頂層類(lèi)型Item(項(xiàng)目)、Extension(擴(kuò)展)和PropertyBase(屬性基礎(chǔ))。如圖所示,通過(guò)此基本“Item”項(xiàng)目類(lèi)型的屬性定義了項(xiàng)目類(lèi)型。相反,頂層屬性類(lèi)型“PropertyBase”沒(méi)有預(yù)定義的屬性,僅是一個(gè)錨位(anchor),從中導(dǎo)出所有其它屬性,并通過(guò)它所有導(dǎo)出的屬性類(lèi)型互相聯(lián)系(共同從單個(gè)屬性類(lèi)型導(dǎo)出)。Extension類(lèi)型屬性定義該擴(kuò)展擴(kuò)展了哪個(gè)項(xiàng)目,并定義將一個(gè)擴(kuò)展與另一個(gè)項(xiàng)目相區(qū)別的標(biāo)識(shí),因?yàn)橐粋€(gè)項(xiàng)目可具有多個(gè)擴(kuò)展。
ItemFolder(項(xiàng)目文件夾)是Item項(xiàng)目類(lèi)型的子類(lèi)型,除了從Item繼承的屬性外,它表征用于建立到其成員(如果有的話)的關(guān)系,盡管Identitykey(身份關(guān)鍵字)和Property(屬性)均是PropertyBase的子類(lèi)型。CategoryRef(目錄引用)進(jìn)而是IdentityKey的子類(lèi)型。
b)核心模式本發(fā)明的存儲(chǔ)平臺(tái)的各種實(shí)施例還包括為頂層項(xiàng)目類(lèi)型結(jié)構(gòu)提供概念框架的核心(Core)模式。圖8A是示出核心模式中的項(xiàng)目的框圖,而圖8B是示出核心模式中屬性類(lèi)型的框圖。在帶不同擴(kuò)展名(*.com、*.exe、*.bat、*.sys等)的文件和在基于文件和文件夾系統(tǒng)中其它準(zhǔn)則之間作出的區(qū)分是類(lèi)似于核心模式的功能。在基于項(xiàng)目的硬件/軟件接口系統(tǒng)中,核心模式定義了一組核心項(xiàng)目類(lèi)型,它們直接(按項(xiàng)目類(lèi)型)或間接地(按項(xiàng)目子類(lèi)型)將所有項(xiàng)目特征化成基于項(xiàng)目的硬件/軟件接口系統(tǒng)理解并能以預(yù)定或可預(yù)計(jì)的方式直接處理的一個(gè)或多個(gè)核心模式項(xiàng)目類(lèi)型。預(yù)定的項(xiàng)目類(lèi)型反映了在基于項(xiàng)目的硬件/軟件接口系統(tǒng)中最常用的項(xiàng)目,且因此通過(guò)理解這些包括核心模式的預(yù)定項(xiàng)目類(lèi)型的基于項(xiàng)目的硬件/軟件接口系統(tǒng)獲取有效性級(jí)別。
在某些實(shí)施例中,核心模式是不可擴(kuò)展的,即,沒(méi)有另外的類(lèi)型可直接從基礎(chǔ)模式中的項(xiàng)目類(lèi)型子分類(lèi),除非作為核心模式的一部分的特定的預(yù)定導(dǎo)出的項(xiàng)目類(lèi)型。通過(guò)禁止對(duì)核心模式的擴(kuò)展(即,通過(guò)禁止向核心模式添加新的項(xiàng)目),存儲(chǔ)平臺(tái)托管核心模式項(xiàng)目類(lèi)型的使用,因?yàn)槊總€(gè)后續(xù)的項(xiàng)目類(lèi)型必須是核心模式項(xiàng)目類(lèi)型的子類(lèi)型。此結(jié)構(gòu)允許在保持具有一組預(yù)定的核心項(xiàng)目類(lèi)型的益處的同時(shí)在定義另外項(xiàng)目類(lèi)型時(shí)有合理程度的靈活性。
參考圖8A,對(duì)本發(fā)明的各種實(shí)施例,由核心模式支持的特定項(xiàng)目類(lèi)型可包括下列的一個(gè)或多個(gè)·Category(類(lèi)別)此項(xiàng)目類(lèi)型(及從中導(dǎo)出的子類(lèi)型)的項(xiàng)目代表在基于項(xiàng)目的硬件/軟件接口系統(tǒng)中的有效類(lèi)別。
·Commodity(物品)作為值的可標(biāo)識(shí)事物的項(xiàng)目。
·Device(設(shè)備)具有支持信息處理能力的邏輯結(jié)構(gòu)的項(xiàng)目。
·Document(文檔)具有不能由基于項(xiàng)目的硬件/軟件接口系統(tǒng)解釋而相反由對(duì)應(yīng)于文檔類(lèi)型的應(yīng)用程序解釋的內(nèi)容的項(xiàng)目。
·Event(事件)記錄環(huán)境中某些發(fā)生事件的項(xiàng)目。
·Location(位置)代表物理位置(如地理位置)的項(xiàng)目。
·Message(消息)在兩個(gè)或更多主體(下面定義)之間通信的項(xiàng)目。
·Principal(主體)具有除ItemId之外的至少一個(gè)肯定可驗(yàn)證身份(如,個(gè)人、組織、組、家庭、作者、服務(wù)等的標(biāo)識(shí))的項(xiàng)目。
·Statement(語(yǔ)句)具有關(guān)于環(huán)境的特定信息的項(xiàng)目,包括但不限于政策、預(yù)訂、憑證等。
類(lèi)似地參考圖8B,由核心模式支持的特定屬性類(lèi)型可包括下列的一個(gè)或多個(gè)
·Certificate(證書(shū))(從基礎(chǔ)模式中的基本PropertyBase類(lèi)型導(dǎo)出)·PrincipalIdentityKey(主體身份關(guān)鍵字)(從基礎(chǔ)模式中的IdentityKey類(lèi)型導(dǎo)出)·PostalAddress(郵政地址)(從基礎(chǔ)模式中Property類(lèi)型導(dǎo)出)·RichText(多信息文本)(從基礎(chǔ)模式中Property類(lèi)型導(dǎo)出)·EAddress(電子郵件地質(zhì))(從基礎(chǔ)模式中Property類(lèi)型導(dǎo)出)·IdentitySecnrityPackage(身份安全包)(從基礎(chǔ)模式中Relationship類(lèi)型導(dǎo)出)·RoleOccupancy(居民角色)(從基礎(chǔ)模式中Relationship類(lèi)型導(dǎo)出)·BasicPresence(基礎(chǔ)存在)(從基礎(chǔ)模式中Relationship類(lèi)型導(dǎo)出)這些項(xiàng)目和屬性按在圖8A和圖8B中列出的各自屬性進(jìn)一步描述。
5.關(guān)系關(guān)系是二元關(guān)系,其中一個(gè)項(xiàng)目被指定為源,另一個(gè)被指定為目標(biāo)。源項(xiàng)目和目標(biāo)項(xiàng)目通過(guò)關(guān)系相聯(lián)系。源項(xiàng)目一般控制關(guān)系的生命周期。即,當(dāng)源項(xiàng)目被刪除,項(xiàng)目之間的關(guān)系也被刪除。
關(guān)系被分類(lèi)成包含(Containment)和引用(Reference)關(guān)系。包含關(guān)系控制目標(biāo)項(xiàng)目的生命周期,而引用關(guān)系不提供任何生命周期管理語(yǔ)義。圖12示出關(guān)系分類(lèi)的方式。
包含關(guān)系又被分類(lèi)成持有(Holding)和嵌入(Embedding)關(guān)系。當(dāng)對(duì)一個(gè)項(xiàng)目的所有持有關(guān)系被移除,該項(xiàng)目被刪除。持有關(guān)系通過(guò)引用計(jì)數(shù)機(jī)制控制目標(biāo)。嵌入關(guān)系能夠?qū)?fù)合項(xiàng)目建模,并能被看作排他的持有關(guān)系。一個(gè)項(xiàng)目能是一個(gè)或多個(gè)持有關(guān)系的目標(biāo);但一個(gè)項(xiàng)目只能是一個(gè)嵌入關(guān)系的目標(biāo)。作為嵌入關(guān)系的目標(biāo)的項(xiàng)目不能是任一其它持有或嵌入關(guān)系的目標(biāo)。
引用關(guān)系不控制目標(biāo)項(xiàng)目的生命周期。它們可以是搖擺不定的—目標(biāo)項(xiàng)目可以不存在。引用關(guān)系能用于在全局項(xiàng)目名字空間的任何處(即,包括遠(yuǎn)程數(shù)據(jù)存儲(chǔ))建模對(duì)項(xiàng)目的引用。
獲得一項(xiàng)目不自動(dòng)取得某關(guān)系,應(yīng)用程序必須明確地請(qǐng)求項(xiàng)目的關(guān)系。此外,修改關(guān)系不修改源或目標(biāo)項(xiàng)目;類(lèi)似地,添加關(guān)系不影響源/目標(biāo)項(xiàng)目。
a)關(guān)系聲明顯式的關(guān)系類(lèi)型用下列元素定義;·在Name(名字)屬性中指定關(guān)系名·下列之一的關(guān)系類(lèi)型持有、嵌入、引用。這是在Type(類(lèi)型)屬性中指定的。
·源和目標(biāo)端點(diǎn)。每個(gè)端點(diǎn)指定所引用項(xiàng)目的名和類(lèi)型。
·源端點(diǎn)字段一般是ItemID(項(xiàng)目ID)類(lèi)型(未聲明),而必須引用在與關(guān)系實(shí)例同一數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。
·對(duì)持有和嵌入關(guān)系,目標(biāo)端點(diǎn)字段必須是ItemIDReference(項(xiàng)目ID引用)類(lèi)型,且它必須引用在與關(guān)系實(shí)例相同存儲(chǔ)中的項(xiàng)目。對(duì)引用關(guān)系,目標(biāo)端點(diǎn)能是任何ItemReference(項(xiàng)目引用)類(lèi)型,并能引用在其它存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。
·能可任選地聲明標(biāo)量或PropertyBase(屬性基礎(chǔ))類(lèi)型的一個(gè)或多個(gè)字段。這些字段能包含與該關(guān)系相關(guān)聯(lián)的數(shù)據(jù)。
·關(guān)系實(shí)例被存儲(chǔ)在全局關(guān)系表中。
·每個(gè)關(guān)系實(shí)例唯一地由組合(源ItemID、關(guān)系ID)標(biāo)識(shí)。對(duì)所有源自給定項(xiàng)目的關(guān)系,在給定的源ItemID中關(guān)系ID是唯一的,而不管它們的類(lèi)型。
源項(xiàng)目是關(guān)系的擁有者。而被指定為擁有者的項(xiàng)目控制關(guān)系的生命周期,關(guān)系本身和與它們相關(guān)的項(xiàng)目分開(kāi)。存儲(chǔ)平臺(tái)API322提供用于展現(xiàn)與項(xiàng)目相關(guān)聯(lián)的關(guān)系的機(jī)制。
這里是一個(gè)關(guān)系聲明的例子。
<Relationship Name=″Employment″BaseType=″Reference″>
<Source Name=″Employee″ItemType=″Contact.Person″/>
<Target Name=″Employer″ItemType=″Contact.Organization″ReferenceType=″ItemIDReference″/>
<Property Name=″StartDate″Type=″the storageplatformTypes.DateTime″/>
<Property Name=″EndDate″Type=″the storageplatformTypes.DateTime″/>
<Property Name=″Office″Type=″the storageplatformTypes.DateTime″/>
</Relationship>
這是引用關(guān)系的例子。若由源引用所引用的個(gè)人項(xiàng)目不存在,則不能創(chuàng)建該關(guān)系。而且若該個(gè)人項(xiàng)目被刪除,在個(gè)人和組織之間的關(guān)系實(shí)例也被刪除。然而若組織項(xiàng)目被刪除,關(guān)系不被刪除,而它是搖擺不定的。
b)持有關(guān)系持有關(guān)系用于基于目標(biāo)項(xiàng)目的生命周期管理來(lái)對(duì)引用計(jì)數(shù)建模。
一個(gè)項(xiàng)目可以是用于對(duì)項(xiàng)目的零個(gè)或多個(gè)關(guān)系的源端點(diǎn)。不是嵌入項(xiàng)目的項(xiàng)目可以是在一個(gè)或多個(gè)持有關(guān)系中的目標(biāo)項(xiàng)目。
目標(biāo)端點(diǎn)引用類(lèi)型必須是ItemIDReference,且它必須引用在與關(guān)系實(shí)例相同的存儲(chǔ)中的項(xiàng)目。
持有關(guān)系實(shí)施目標(biāo)端點(diǎn)的生命周期管理。持有關(guān)系實(shí)例和作為目標(biāo)的項(xiàng)目的創(chuàng)建是原子操作。可以創(chuàng)建將同一項(xiàng)目作為目標(biāo)的另外的持有關(guān)系實(shí)例。當(dāng)具有給定項(xiàng)目作為目標(biāo)端點(diǎn)的最后一個(gè)持有關(guān)系實(shí)例被刪除時(shí),該目標(biāo)項(xiàng)目也被刪除。
在關(guān)系聲明中指定的端點(diǎn)項(xiàng)目的類(lèi)型一般在創(chuàng)建該關(guān)系的實(shí)例時(shí)強(qiáng)制。在關(guān)系建立之后端點(diǎn)項(xiàng)目的類(lèi)型不能改變。
持有關(guān)系在形成項(xiàng)目的名字空間中起著關(guān)鍵作用。它們包含“Name(名字)”屬性,它定義目標(biāo)項(xiàng)目相對(duì)于源項(xiàng)目的名字。對(duì)所有源自給定項(xiàng)目的持有關(guān)系,相對(duì)名字是唯一的。從根項(xiàng)目開(kāi)始到給定項(xiàng)目的相對(duì)名字的有序類(lèi)表形成該項(xiàng)目的全名。
持有關(guān)系形成一有向非循環(huán)圖(DAG)。在創(chuàng)建持有關(guān)系時(shí),系統(tǒng)確保不產(chǎn)生回路,從而確保項(xiàng)目的名字空間形成DAG。
雖然持有關(guān)系控制目標(biāo)項(xiàng)目的生命周期,它不控制目標(biāo)端點(diǎn)項(xiàng)目的操作的一致性。目標(biāo)項(xiàng)目在操作上獨(dú)立于通過(guò)持有關(guān)系擁有它的項(xiàng)目。在作為持有關(guān)系的源的項(xiàng)目上的拷貝、移動(dòng)、備份和其它操作不影響作為同一關(guān)系的目標(biāo)的項(xiàng)目-例如,備份文件夾項(xiàng)目不自動(dòng)地備份該文件夾中所有項(xiàng)目(FolderMember(文件夾成員)關(guān)系中的目標(biāo))。
下面是持有關(guān)系的例子<Relationship Name=″FolderMembers″BaseType=″Holding”>
<Source Name=″Folder″ItemType=″Base.Folder″/>
<Target Name=″Item″ItemType=″Base.Item″ReferenceType=″ItemIDReference″/>
</Relationship>
FolderMember關(guān)系使文件夾的概念成為項(xiàng)目的類(lèi)屬集合。
e)嵌入關(guān)系嵌入關(guān)系將目標(biāo)項(xiàng)目的生命周期的排外控制的概念模型化。它們?cè)试S合成項(xiàng)目的概念。
嵌入關(guān)系實(shí)例和作為目標(biāo)的項(xiàng)目的創(chuàng)建是原子操作。一個(gè)項(xiàng)目能是零個(gè)或多個(gè)嵌入關(guān)系的源。然而一個(gè)項(xiàng)目能是一個(gè)且僅是一個(gè)嵌入關(guān)系的目標(biāo)。作為嵌入關(guān)系的目標(biāo)的項(xiàng)目不能是持有關(guān)系的目標(biāo)。
目標(biāo)端點(diǎn)引用類(lèi)型必須是ItemIDReference,且它必須引用在與關(guān)系實(shí)例相同數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。
在關(guān)系聲明中指定的端點(diǎn)項(xiàng)目的類(lèi)型一般在創(chuàng)建該關(guān)系的實(shí)例時(shí)強(qiáng)制。在關(guān)系建立之后端點(diǎn)的類(lèi)型不能改變。
嵌入關(guān)系控制該目標(biāo)端點(diǎn)的操作一致性。例如,串行化項(xiàng)目的操作可包括串行化所有源自該項(xiàng)目及所有其目標(biāo)的所有嵌入關(guān)系;拷貝一項(xiàng)目也拷貝所有它的嵌入項(xiàng)目。
下面是示例聲明<Relationship Name=″ArchiveMembers″BaseType=″Embedding”>
<Source Name=″Archive″ItemType=″Zip.Archive″/>
<Target Name=″Member″ItemType=″Base.Item″ReferenceType=″ItemIDReference″/>
<Property Name=″ZipSize″Type=″the storageplatformTypes.bigint″/>
<Property Name=″SizeReduction″Type=″the storageplatformTypes.float″/>
</Relationship>
d)引用關(guān)系引用關(guān)系不控制它引用的項(xiàng)目的生命周期。尤其是,引用關(guān)系不保證目標(biāo)的存在,也不保證目標(biāo)的類(lèi)型如關(guān)系聲明中指定的那樣。這意味著引用關(guān)系能是搖擺不定的。而且引用關(guān)系能引用在其它數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。引用關(guān)系能看作類(lèi)似于網(wǎng)頁(yè)上的鏈接的概念。
下面是引用關(guān)系說(shuō)明的例子<Relationship Name=″DocumentAuthor″BaseType=″Reference″>
<Sourc ItemType=″Document″ItemType=″Base.Document″/>
<Target ItemType=″Author″ItemType=″Base.Author″ReferenceType=″ItemIDReference″/>
<Property Type=″Role″Type=″Core.CategoryRef″/>
<Property Type=″DisplayName″Type=″the storageplatformTypes.nvarchar(256)″/>
</Relationship>
在目標(biāo)的端點(diǎn)允許任何引用類(lèi)型。參與引用關(guān)系的項(xiàng)目可以是任何項(xiàng)目類(lèi)型。
引用關(guān)系用于對(duì)項(xiàng)目之間的大多數(shù)非生命周期管理關(guān)系建模。因?yàn)椴粡?qiáng)制目標(biāo)的存在,引用關(guān)系便于對(duì)松散耦合的關(guān)系建模。引用關(guān)系能用于在其它存儲(chǔ),包括在其它計(jì)算機(jī)上的存儲(chǔ)中的目標(biāo)項(xiàng)目。
e)規(guī)則和約束下列附加規(guī)則和約束應(yīng)用于關(guān)系·一個(gè)項(xiàng)目必須是(僅一個(gè)嵌入關(guān)系)或(一個(gè)或多個(gè)持有關(guān)系)的目標(biāo)。一個(gè)例外是根項(xiàng)目。一個(gè)項(xiàng)目能是零個(gè)或多個(gè)引用關(guān)系的目標(biāo)。
·作為嵌入關(guān)系目標(biāo)的項(xiàng)目不能是持有關(guān)系的源。它能是引用關(guān)系的源。
·一個(gè)項(xiàng)目若是從文件升級(jí),則不能是持有關(guān)系的源。它能是嵌入關(guān)系和引用關(guān)系的源。
·一個(gè)從文件升級(jí)的項(xiàng)目不能是嵌入關(guān)系的目標(biāo)。
f)關(guān)系的排序在一至少個(gè)實(shí)施例中,本發(fā)明的存儲(chǔ)平臺(tái)支持關(guān)系的排序。通過(guò)在基本關(guān)系定義中名為“Order(排序)”的屬性完成排序。在Order字段中無(wú)唯一性約束。不保證帶有同一“Order”屬性值的關(guān)系的次序,然而保證,它們能排序在帶較低“Order”值的關(guān)系之后并在帶較高“Order”字段值的關(guān)系之前。
應(yīng)用程序通過(guò)在在組合(SourceItemID,RelationshipID,Order)上排序得到默認(rèn)次序的關(guān)系。源自給定項(xiàng)目的所有關(guān)系實(shí)例被排序成單個(gè)集合,而不管在集合中關(guān)系的類(lèi)型。然而這保證,給定類(lèi)型(如,F(xiàn)olderMembers(文件夾成員))的所有關(guān)系是給定項(xiàng)目的關(guān)系集合的已排序子集。
用于處理關(guān)系的數(shù)據(jù)存儲(chǔ)API312實(shí)現(xiàn)一組支持關(guān)系的排序的操作。引入下列術(shù)語(yǔ)幫助解釋那些操作
·RelFirst是有序集合中帶次序值OrdFirst的第一個(gè)關(guān)系;·RelLast是有序集合帶次序值OrdLast的最后一個(gè)關(guān)系;·RelX是集合中帶次序值OrdX的給定關(guān)系;·RelPrev是集合中最接近于RelX的帶小于OrdX的次序值OrdPrev的關(guān)系;以及·RelNext是集合中最接近于RelX的帶大于OrdX的次序值OrdNext的關(guān)系。
操作包括但不限于·InsertBeforeFirst(SourceItemID,Relationship)插入關(guān)系作為集合中的第一個(gè)關(guān)系。新關(guān)系的“Order”屬性的值可小于OrdFirst。
·InsertAfterLast(SourceItemID,Relationship)插入關(guān)系作為集合中的最后一個(gè)關(guān)系。新關(guān)系的“Order”屬性的值可大于OrdLast。
·InsertAt(SourceItemID,ord,Relationship)插入帶有對(duì)“Order”屬性指定的值的關(guān)系。
·InsertBefore(SourceItemID,ord,Relationship)在帶有給定次序值的關(guān)系之前插入該關(guān)系。新的關(guān)系可被分配“Order”值,它在OrdPrev和ord之間,但不包括這兩個(gè)值。
·InsertAfter(SourceItemID,ord,Relationship)在帶有給定次序值的關(guān)系之后插入該關(guān)系。新的關(guān)系可被分配“Order”值,它在ord和OrdNext之間,但不包括這兩個(gè)值。
·MoveBefore(SourceItemID,ord,Relationship)將帶給定關(guān)系ID的關(guān)系移動(dòng)到帶指定“Order”值的關(guān)系之前。關(guān)系可被分配新的“Order”值,它在OrdPrev和ord之間,但不包括這兩個(gè)值。
·MoveAfter(SourceItemID,ord,Relationship)將帶給定關(guān)系ID的關(guān)系移動(dòng)到帶指定“Order”值的關(guān)系之后。該關(guān)系可被分配新的次序值,它在ord和OrdNext之間,但不包括這兩個(gè)值。
如前提到,每個(gè)項(xiàng)目必須是項(xiàng)目文件夾的成員。按照關(guān)系,每個(gè)項(xiàng)目必須與一項(xiàng)目文件夾有一關(guān)系。在本發(fā)明的若干實(shí)施例中,某些關(guān)系由在諸項(xiàng)目之間存在的關(guān)系表示。
如對(duì)本發(fā)明的各實(shí)施例的實(shí)現(xiàn),關(guān)系提供一有向的二元關(guān)系,它由一個(gè)項(xiàng)目(源)延伸到另一項(xiàng)目(目標(biāo))。關(guān)系由源項(xiàng)目(延伸它的項(xiàng)目)擁有,因此若源被移除則關(guān)系被移除(如在源項(xiàng)目被刪除時(shí)關(guān)系被刪除)。此外在某些情況下,關(guān)系可共享(共同擁有的)目標(biāo)項(xiàng)目的擁有權(quán),且那樣的擁有權(quán)僅可反映在關(guān)系的IsOwned(被擁有)屬性(或其等效屬性)中(如圖7對(duì)關(guān)系屬性類(lèi)型所示)。在這些實(shí)施例中,創(chuàng)建一新的IsOwned關(guān)系自動(dòng)遞增該目標(biāo)上的引用計(jì)數(shù),而刪除那樣的關(guān)系可遞減該目標(biāo)項(xiàng)目上的引用計(jì)數(shù)。對(duì)這些特定實(shí)施例,若項(xiàng)目具有大于0的引用計(jì)數(shù),則繼續(xù)存在,若項(xiàng)目計(jì)數(shù)達(dá)到0則自動(dòng)刪除。再一次,項(xiàng)目文件夾是具有(或能具有)與其它項(xiàng)目的一組關(guān)系的項(xiàng)目,這些其它項(xiàng)目包括項(xiàng)目文件夾的成員資格。關(guān)系的其它實(shí)際實(shí)現(xiàn)是可能的,并由本發(fā)明構(gòu)想來(lái)實(shí)現(xiàn)這里描述的功能。
不管實(shí)際的實(shí)現(xiàn)如何,關(guān)系是從一個(gè)對(duì)象到另一對(duì)象的可選擇的連接。一個(gè)項(xiàng)目屬于一個(gè)以上項(xiàng)目文件夾以及一個(gè)或多個(gè)類(lèi)別,而不論這些項(xiàng)目、文件夾和類(lèi)別是公有的或私有的能力是由給予基于項(xiàng)目的結(jié)構(gòu)中的存在(或缺乏)的意義所確定的。這些邏輯關(guān)系是分配給一組關(guān)系的意義,而不論其專(zhuān)門(mén)用來(lái)實(shí)現(xiàn)這里所述功能的物理實(shí)現(xiàn)如何。邏輯關(guān)系是在項(xiàng)目及其文件夾或類(lèi)別之間建立的(或相反),因?yàn)楸举|(zhì)上項(xiàng)目文件夾和類(lèi)別的每一個(gè)都是特定類(lèi)型的項(xiàng)目。因此,能象其它項(xiàng)目一樣地對(duì)項(xiàng)目文件夾和類(lèi)別起作用(拷貝、添加到電子郵件消息中、嵌入文檔等等,而無(wú)限制),而項(xiàng)目文件夾和類(lèi)別能象其它項(xiàng)目一樣使用相同的機(jī)制串行化和解串行化(導(dǎo)入和導(dǎo)出)。(例如在XML中,所有項(xiàng)目可具有串行化的格式,且此格同等地應(yīng)用于項(xiàng)目文件夾、類(lèi)別和項(xiàng)目)。
代表項(xiàng)目及其項(xiàng)目文件夾之間的關(guān)系的上述關(guān)系在邏輯上能從項(xiàng)目延伸到項(xiàng)目文件夾、從項(xiàng)目文件夾延伸到項(xiàng)目、或兩者。邏輯上從一項(xiàng)目延伸到項(xiàng)目文件夾的關(guān)系表明該項(xiàng)目文件夾對(duì)于該項(xiàng)目是公有的,并與該項(xiàng)目共享其成員資格信息;相反,缺乏從項(xiàng)目到項(xiàng)目文件夾的邏輯關(guān)系表明該項(xiàng)目文件夾對(duì)該項(xiàng)目是私有的,且不與該項(xiàng)目共享其成員資格信息。類(lèi)似地,邏輯上從項(xiàng)目文件夾延伸到項(xiàng)目的關(guān)系表明該項(xiàng)目是公有的,并可與該項(xiàng)目文件夾共享,而缺乏從項(xiàng)目文件夾延伸到項(xiàng)目的邏輯關(guān)系表明該項(xiàng)目是私有的且不能共享。因此,當(dāng)向其它系統(tǒng)導(dǎo)出項(xiàng)目文件夾時(shí),它是“公有”的項(xiàng)目,它在新的環(huán)境中共享,且當(dāng)項(xiàng)目搜索其項(xiàng)目文件夾尋找其它可共享的項(xiàng)目時(shí),它是“公有”的項(xiàng)目文件夾,它向該項(xiàng)目提供關(guān)于屬于它的可共享項(xiàng)目的信息。
圖9是示出項(xiàng)目文件夾(它本身也是項(xiàng)目)、其成員項(xiàng)目、和項(xiàng)目文件夾及其成員項(xiàng)目之間互聯(lián)關(guān)系的框圖。項(xiàng)目文件夾900具有多個(gè)項(xiàng)目902、904和906作為其成員。項(xiàng)目文件夾900具有從它本身到項(xiàng)目902的關(guān)系912,它表明項(xiàng)目902是公有的,且能與項(xiàng)目文件夾900、其成員904和906、和任何可訪問(wèn)項(xiàng)目文件夾900的任何其它項(xiàng)目文件夾、類(lèi)別、或項(xiàng)目(未示出)共享。然而從項(xiàng)目902到項(xiàng)目文件夾項(xiàng)目900沒(méi)有關(guān)系,這表明項(xiàng)目文件夾900對(duì)項(xiàng)目902是私有的,且不與項(xiàng)目902共享其成員資格信息。另一方面,項(xiàng)目904確實(shí)具有從它本身到項(xiàng)目文件夾900的關(guān)系924,這表明項(xiàng)目文件夾900是公有的,且與項(xiàng)目904共享其成員資格信息。然而沒(méi)有從項(xiàng)目文件夾900到項(xiàng)目904的關(guān)系,這表明項(xiàng)目904是私有的,且不與項(xiàng)目文件夾900、其另外的成員902、906、及可訪問(wèn)項(xiàng)目文件夾900的任何其它項(xiàng)目文件夾、類(lèi)別、或項(xiàng)目(未示出)共享。與其到項(xiàng)目902和904的關(guān)系(或沒(méi)有這些關(guān)系)相反,項(xiàng)目文件夾900具有從其本身到項(xiàng)目906的關(guān)系916,且項(xiàng)目906具有回到項(xiàng)目文件夾900的關(guān)系926,一起表明項(xiàng)目906是公有的,且能對(duì)文件夾900、其成員902和904、和可訪問(wèn)項(xiàng)目文件夾900的任何其它項(xiàng)目文件夾、類(lèi)別、或項(xiàng)目(未示出)共享,且項(xiàng)目文件夾900是公有的,并與項(xiàng)目906共享其成員資格信息。
如前討論,在項(xiàng)目文件夾中的項(xiàng)目不需要共享共同性,因?yàn)轫?xiàng)目文件夾未被“描述”。另一方面,類(lèi)別由對(duì)所有其成員項(xiàng)目共同的共同性描述。因此,類(lèi)別的成員資格固有地限于具有所描述的共同性的項(xiàng)目,且在某些實(shí)施例中,滿足類(lèi)別的描述的所有項(xiàng)目自動(dòng)地成為該類(lèi)別的成員。因此,盡管項(xiàng)目文件夾允許由其成員資格來(lái)表示不重要的類(lèi)型結(jié)構(gòu),類(lèi)別基于定義的共同性來(lái)允許成員資格。
當(dāng)然,類(lèi)別描述本質(zhì)上是邏輯的,因而類(lèi)別可通過(guò)類(lèi)型、屬性和/或值的任何邏輯表示來(lái)描述。例如,對(duì)一類(lèi)別的邏輯表示可以是其成員資格,以包括具有兩個(gè)屬性之一或兩者的項(xiàng)目。若這些對(duì)類(lèi)別描述的屬性是“A”和“B”,則該類(lèi)別的成員資格可包括具有屬性A而沒(méi)有B的項(xiàng)目、具有屬性B而沒(méi)有A的項(xiàng)目、及兼有屬性A和B的項(xiàng)目。通過(guò)邏輯運(yùn)算符“OR(或)”來(lái)描述屬性的邏輯表示,其中由類(lèi)別描述成員組是具有屬性A OR B的項(xiàng)目。如本領(lǐng)域的技術(shù)人員所理解的,也能使用類(lèi)似的邏輯運(yùn)算符(包括但不限于單獨(dú)的“AND(和)”“XOR(異或)”和“NOT(非)”或其組合)來(lái)描述類(lèi)別。
盡管在項(xiàng)目文件夾(未描述)和類(lèi)別(已描述)之間有區(qū)別,但在本發(fā)明的許多實(shí)施例中,原則上到項(xiàng)目的類(lèi)別關(guān)系及到類(lèi)別的項(xiàng)目關(guān)系以上面對(duì)項(xiàng)目文件夾和項(xiàng)目的同樣方法揭示。
圖10是示出一類(lèi)別(其本身也是項(xiàng)目)、其成員項(xiàng)目、類(lèi)別及其成員項(xiàng)目之間的互聯(lián)關(guān)系的框圖。類(lèi)別1000具有多個(gè)項(xiàng)目1002、1004和1006作為成員,所有這些都共享由類(lèi)別1000描述的共同的屬性、值和類(lèi)型1008(共同性描述1008’)的某個(gè)組合。類(lèi)別1000具有從其本身到項(xiàng)目1002的關(guān)系,它表明項(xiàng)目1002是公有的,且能與類(lèi)別1000、其成員1004和1006、以及可訪問(wèn)類(lèi)別1000的任何其它類(lèi)別、項(xiàng)目文件夾、或項(xiàng)目(未示出)共享。然而,沒(méi)有從項(xiàng)目1002到類(lèi)別1000的關(guān)系,這表明類(lèi)別1000對(duì)項(xiàng)目1002是私有的,且不與項(xiàng)目1002共享成員資格信息。另一方面,項(xiàng)目1004的確具有從其本身到類(lèi)別1000的關(guān)系1024,這表明類(lèi)別1000是公有的,且與項(xiàng)目1004共享其成員資格信息。然而,不存在從類(lèi)別1000延伸到項(xiàng)目1004的關(guān)系,這表明項(xiàng)目1004是私有的,且不能與類(lèi)別1000、它的其它成員1002和1006、以及可訪問(wèn)類(lèi)別1000的任何其它類(lèi)別、項(xiàng)目文件夾、或項(xiàng)目(未示出)共享。與它與項(xiàng)目1002和1004的關(guān)系(或沒(méi)有此關(guān)系)相反,類(lèi)別1000具有從其本身到項(xiàng)目1006的關(guān)系1016,且項(xiàng)目1006具有回到類(lèi)別1000的關(guān)系1026,這一起表明項(xiàng)目1006是公有的,且能與類(lèi)別1000、其項(xiàng)目成員1002和1004、以及可訪問(wèn)類(lèi)別1000的任何其它類(lèi)別、項(xiàng)目文件夾、或項(xiàng)目(未示出)共享,且類(lèi)別1000是公有的,且與項(xiàng)目1006共享其成員資格信息。
最后,由于類(lèi)別和項(xiàng)目文件夾本身是項(xiàng)目,且項(xiàng)目可以互相關(guān)系,類(lèi)別可關(guān)系到項(xiàng)目文件夾,反之亦然,且在某些另外實(shí)施例中,類(lèi)別、項(xiàng)目文件夾和項(xiàng)目可分別關(guān)系到其它類(lèi)別、項(xiàng)目文件夾和項(xiàng)目。然而在各種實(shí)施例中,項(xiàng)目文件夾結(jié)構(gòu)和/或類(lèi)別結(jié)構(gòu)在硬件/軟件接口系統(tǒng)級(jí)上禁止包含回路。當(dāng)項(xiàng)目文件夾和類(lèi)別結(jié)構(gòu)類(lèi)似于有向圖時(shí),禁止回路的實(shí)施例類(lèi)似于有向非循環(huán)圖(DAG),根據(jù)圖論領(lǐng)域的數(shù)學(xué)定義,DAG是其中沒(méi)有路徑在同一頂點(diǎn)開(kāi)始與終止的有向圖。
6.可擴(kuò)展性如上所述,本存儲(chǔ)平臺(tái)旨在提供初始模式組340。然而,至少在某些實(shí)施例中,該存儲(chǔ)平臺(tái)還允許包括獨(dú)立軟件分銷(xiāo)商(ISV)等顧客創(chuàng)建新的模式344(即新的項(xiàng)目和嵌套的元素類(lèi)型)。本節(jié)討論通過(guò)擴(kuò)展在初始模式組340中定義的項(xiàng)目類(lèi)型和嵌套的元素類(lèi)型(或簡(jiǎn)稱(chēng)“元素”類(lèi)型)著眼于創(chuàng)建該模式的機(jī)制。
較佳地,項(xiàng)目和嵌套元素類(lèi)型的初始組的擴(kuò)展如下約束·允許ISV引入新的項(xiàng)目類(lèi)型,即子類(lèi)型Base.Item;·允許ISV引入新的嵌套元素類(lèi)型,即子類(lèi)型Base.NestedElement;
·允許ISV引入新的擴(kuò)展,即子類(lèi)型Base.NestedElement;但·ISV不能子分類(lèi)由存儲(chǔ)平臺(tái)的初始模式組340定義的任何類(lèi)型(項(xiàng)目、嵌入元素、或擴(kuò)展類(lèi)型)。
由于由存儲(chǔ)平臺(tái)的初始模式組定義的項(xiàng)目類(lèi)型或嵌入元素類(lèi)型可能不精確地匹配ISV應(yīng)用程序的需要,必須允許ISV定制該類(lèi)型。這就考慮了擴(kuò)展的概念。擴(kuò)展是強(qiáng)類(lèi)型的實(shí)例,但是(a)它們不能獨(dú)立存在,以及(b)它們必須附屬于項(xiàng)目或嵌套元素。
除了解決對(duì)模式可擴(kuò)展性的需要之外,擴(kuò)展還旨在解決“多分類(lèi)”問(wèn)題。在某些實(shí)施例中,因?yàn)榇鎯?chǔ)平臺(tái)可能不支持多繼承性或重疊子類(lèi)型,應(yīng)用程序可以使用擴(kuò)展作為模型化重疊類(lèi)型實(shí)例(如文檔既是合法文檔又是安全文檔)的方法。
a)項(xiàng)目擴(kuò)展為提供項(xiàng)目的可擴(kuò)展性,數(shù)據(jù)模型還定義名為Base.Extension的抽象類(lèi)型。這是擴(kuò)展類(lèi)型的分層結(jié)構(gòu)的根類(lèi)型。應(yīng)用程序可以子分類(lèi)Base.Extension,以創(chuàng)建特定的擴(kuò)展類(lèi)型。
在基礎(chǔ)模式中如下定義Base.Extension類(lèi)型<Type Name=″Base.Extension″IsAbstract=″True″>
<Propety Name=″ItemID″Type=″the storage platformTypes.uniqueidentified″Nullable=″false″MultiValued=″false″/>
<Property Name=″ExtensionID″Type=″the storage platformTypes.uniqueidentified″Nullable=″false″MultiValued=″false″/>
</Type>
ItemID字段包含與該擴(kuò)展關(guān)聯(lián)的項(xiàng)目的ItemID。帶此ItemID的項(xiàng)目必須存在。若帶給定ItemID的項(xiàng)目不存在,則不能創(chuàng)建擴(kuò)展。當(dāng)項(xiàng)目被刪除,帶同一ItemID的所有擴(kuò)展被刪除。二元組(ItemID,ExtensionID)唯一地標(biāo)識(shí)了擴(kuò)展實(shí)例。
擴(kuò)展類(lèi)型的結(jié)構(gòu)類(lèi)似于項(xiàng)目類(lèi)型的結(jié)構(gòu)·擴(kuò)展類(lèi)型具有字段;·字段可以是原語(yǔ)或嵌套元素類(lèi)型;以及·擴(kuò)展類(lèi)型可被子分類(lèi)。
下列限制應(yīng)用于擴(kuò)展類(lèi)型
·擴(kuò)展不能是關(guān)系的源和目標(biāo);·擴(kuò)展類(lèi)型實(shí)例不能獨(dú)立于項(xiàng)目存在;以及·擴(kuò)展類(lèi)型不能用作在存儲(chǔ)平臺(tái)類(lèi)型定義中的字段類(lèi)型對(duì)能與給定的項(xiàng)目類(lèi)型關(guān)聯(lián)的擴(kuò)展的類(lèi)型沒(méi)有約束。任何擴(kuò)展類(lèi)型允許擴(kuò)展任何項(xiàng)目類(lèi)型。當(dāng)多個(gè)擴(kuò)展實(shí)例被附加到一個(gè)項(xiàng)目,它們?cè)诮Y(jié)構(gòu)和行為上彼此獨(dú)立。
擴(kuò)展實(shí)例被分別存儲(chǔ)并從項(xiàng)目訪問(wèn)。所有擴(kuò)展類(lèi)型實(shí)例可從全局?jǐn)U展視圖訪問(wèn)。能組成一有效的查詢(xún),它將返回給定類(lèi)型的擴(kuò)展的所有實(shí)例,而不管它們關(guān)聯(lián)什么類(lèi)型的項(xiàng)目。存儲(chǔ)平臺(tái)API提供可存儲(chǔ)、檢索和修改項(xiàng)目擴(kuò)展的編程模型。
擴(kuò)展類(lèi)型可是使用存儲(chǔ)平臺(tái)的單個(gè)繼承模型來(lái)子分類(lèi)的類(lèi)型。從一個(gè)擴(kuò)展類(lèi)型導(dǎo)出創(chuàng)建新的擴(kuò)展類(lèi)型。一個(gè)擴(kuò)展的結(jié)構(gòu)或行為不能覆蓋或替代項(xiàng)目類(lèi)型分層結(jié)構(gòu)的結(jié)構(gòu)或行為。類(lèi)似于項(xiàng)目類(lèi)型,擴(kuò)展類(lèi)型實(shí)例能通過(guò)與該擴(kuò)展類(lèi)型關(guān)聯(lián)的視圖直接訪問(wèn)。擴(kuò)展的ItemID表明,它們屬于哪個(gè)項(xiàng)目,并能用于從全局項(xiàng)目視圖檢索對(duì)應(yīng)的項(xiàng)目對(duì)象。為操作一致性的目的,擴(kuò)展被考慮成項(xiàng)目的一部分。拷貝/移動(dòng)、備份/恢復(fù)和存儲(chǔ)平臺(tái)定義的其它常用操作可以在作為項(xiàng)目的一部分的擴(kuò)展上操作。
考慮下述例子。在Windows類(lèi)型組中定義Contact(聯(lián)系人)類(lèi)型。
<Type Name=″Contact″BaseType=“Base.Item″>
<Property Name=″Name″Type=″String″Nullable=″false″MultiValued=″false″/>
<Property Name=″Address″Type=″Address″Nullable=″true″MultiValued=″false″/>
</Type>
CRM(客戶(hù)關(guān)系管理)應(yīng)用程序開(kāi)發(fā)者喜歡將CRM應(yīng)用程序擴(kuò)展附加到存儲(chǔ)在存儲(chǔ)平臺(tái)中的聯(lián)系人。應(yīng)用程序開(kāi)發(fā)者定義包含應(yīng)用程序能處理的附加數(shù)據(jù)結(jié)構(gòu)的CRM擴(kuò)展。
<Type Name=″CRMExtension″BaseType=″Base.Extension″>
<Property Name=″CustomerID″Type=″String″Nullable=″false″MultiValued=″false″/>
…</Type>
HR應(yīng)用程序開(kāi)發(fā)者希望也將附加數(shù)據(jù)附加到聯(lián)系人。此數(shù)據(jù)獨(dú)立于CRM應(yīng)用程序數(shù)據(jù)。應(yīng)用程序開(kāi)發(fā)者還可創(chuàng)建—擴(kuò)展<Type Name=″HRExtension″EBaseType=″Base.Extension″>
<Property Name=″EmployeeID″Type=″String″Nullable=″false″MultiValued=″false″/>
…</Type>
CRMExtension和HRExtension是能附加到聯(lián)系人項(xiàng)目的兩個(gè)獨(dú)立擴(kuò)展。它們能彼此獨(dú)立地創(chuàng)建和訪問(wèn)。
在上述例子中,CRMExtension類(lèi)型的字段和方法不能覆蓋聯(lián)系人分層結(jié)構(gòu)的字段和方法。應(yīng)注意,CRMExtension類(lèi)型的實(shí)例能被附加到不同于聯(lián)系人的項(xiàng)目類(lèi)型。
在檢索聯(lián)系人項(xiàng)目時(shí),不自動(dòng)地檢索它的項(xiàng)目擴(kuò)展。給定聯(lián)系人項(xiàng)目,可通過(guò)查詢(xún)?nèi)謹(jǐn)U展視圖以尋找?guī)籌temID的擴(kuò)展來(lái)訪問(wèn)其有關(guān)的項(xiàng)目擴(kuò)展。
可通過(guò)CRMExtension類(lèi)型視圖來(lái)訪問(wèn)系統(tǒng)中所有的CRMExtension擴(kuò)展,而不論它們屬于什么項(xiàng)目。一個(gè)項(xiàng)目的所有項(xiàng)目擴(kuò)展共享同一項(xiàng)目id。在上述例子中,聯(lián)系人項(xiàng)目實(shí)例和附加的CRMExtension和HRExtension實(shí)例共享同一ItemID。
下面的表總結(jié)了在Item(項(xiàng)目)、Extension(擴(kuò)展)和NestedElement(嵌套元素)類(lèi)型之間的相似性和差別Item、ItemExtension與NestedElement
b)擴(kuò)展NestedElement類(lèi)型嵌套元素類(lèi)型不用與項(xiàng)目類(lèi)型相同的機(jī)制擴(kuò)展。嵌套元素的擴(kuò)展用與嵌套元素類(lèi)型字段相同的機(jī)制存儲(chǔ)和訪問(wèn)。
數(shù)據(jù)模型定義了名為Element(元素)的嵌套元素類(lèi)型的根。
<Type Name=″Element″IsAbstract=″True″>
<Property Name=″ElementID″Type=″the storage platformTypes.uniqueidentifier″Nullable=″false″MultiValued=″false″/>
</Type>
NestedElement類(lèi)型從此類(lèi)型繼承。NestedElement元素類(lèi)型另外定義—字段,它是多組元素。
<Type Name=″NestedElement″BaseType=″Base.Element″IsAbstract=″True″>
<Property Name=″Extensions″Type=″Base.Element″Nullable=″false″MultiValued=″true″/>
</Type>
NestedElement擴(kuò)展在下面方面不同于項(xiàng)目擴(kuò)展·嵌套元素?cái)U(kuò)展不是擴(kuò)展類(lèi)型。它們不屬于以Base.Extension類(lèi)型為根的擴(kuò)展類(lèi)型分層結(jié)構(gòu)。
·嵌套元素?cái)U(kuò)展與該項(xiàng)目的其它字段一起存儲(chǔ),且不是全局可訪問(wèn)的—不能組成檢索給定擴(kuò)展類(lèi)型的所有實(shí)例的查詢(xún)。
·象存儲(chǔ)其它嵌套元素(或項(xiàng)目)一樣地存儲(chǔ)這些擴(kuò)展。象其它的嵌套組,NestedElement擴(kuò)展被存在UDT中。它們可通過(guò)嵌套元素類(lèi)型的Extension(擴(kuò)展)字段來(lái)訪問(wèn)。
·用于訪問(wèn)多值屬性的集合接口也用于在類(lèi)型擴(kuò)展組上的訪問(wèn)和迭代。
下面的表總結(jié)和比較Item擴(kuò)展和NestedElement擴(kuò)展。
Item擴(kuò)展與NestedElement擴(kuò)展
D.數(shù)據(jù)庫(kù)引擎如上提到,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)引擎上實(shí)現(xiàn)。在本實(shí)施例中,數(shù)據(jù)庫(kù)引擎包括諸如Microsoft SQL Server引擎等實(shí)現(xiàn)SQL查詢(xún)語(yǔ)言、帶有對(duì)象關(guān)系擴(kuò)展的關(guān)系數(shù)據(jù)庫(kù)引擎。本節(jié)按照本實(shí)施例,描述數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)的數(shù)據(jù)模型到關(guān)系存儲(chǔ)的映射,在邏輯API上提供由存儲(chǔ)平臺(tái)的客戶(hù)機(jī)使用的信息。然而可以理解,當(dāng)采用不同的數(shù)據(jù)庫(kù)引擎時(shí)可采用不同的映射。確實(shí),除了在關(guān)系型數(shù)據(jù)庫(kù)引擎上實(shí)現(xiàn)存儲(chǔ)平臺(tái)概念數(shù)據(jù)模型之外,也可在其它類(lèi)型數(shù)據(jù)庫(kù)上實(shí)現(xiàn),如面向?qū)ο蠛蚗ML數(shù)據(jù)庫(kù)。
面向?qū)ο?OO)數(shù)據(jù)庫(kù)系統(tǒng)為編程語(yǔ)言對(duì)象(如C++、Java)提供持續(xù)性和事務(wù)?!绊?xiàng)目”的存儲(chǔ)平臺(tái)概念可很好地映射到面向?qū)ο笙到y(tǒng)中的對(duì)象,雖然嵌入的集合必須添加給對(duì)象。類(lèi)似繼承性和嵌套元素類(lèi)型等其它存儲(chǔ)平臺(tái)類(lèi)型概念也映射到面向?qū)ο箢?lèi)型的系統(tǒng)。面向?qū)ο笙到y(tǒng)通常已經(jīng)支持對(duì)象身份;因此,項(xiàng)目身份可被映射到對(duì)象身份。項(xiàng)目的行為(操作)很好地映射到對(duì)象方法。然而,面向?qū)ο蟮南到y(tǒng)通常缺乏組織能力并在搜索方面很差。而且,面向?qū)ο蟮南到y(tǒng)不提供對(duì)非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)的支持。為支持這里描述的完全存儲(chǔ)平臺(tái)數(shù)據(jù)模型,象關(guān)系、文件夾和擴(kuò)展等概念需要添加到對(duì)象數(shù)據(jù)模型。此外,需要實(shí)現(xiàn)如升級(jí)、同步、通知和安全性等機(jī)制。
類(lèi)似于面向?qū)ο蟮南到y(tǒng),基于XSD(XML模式定義)的XML數(shù)據(jù)庫(kù)支持基于單繼承類(lèi)型的系統(tǒng)。本發(fā)明的項(xiàng)目類(lèi)型系統(tǒng)可映射到XSD類(lèi)型模型。XSD也不提供對(duì)行為的支持。項(xiàng)目的XSD必須增添項(xiàng)目的行為。XML數(shù)據(jù)庫(kù)處理單個(gè)XSD文檔并缺乏組織和拓寬搜索能力。如面向?qū)ο髷?shù)據(jù)庫(kù)那樣,為支持這里描述的數(shù)據(jù)模型,如關(guān)系和文件夾等其它概念需要被結(jié)合到該XML數(shù)據(jù)庫(kù);而且需要實(shí)現(xiàn)如同步、通知和安全性等機(jī)制。
關(guān)于下面小節(jié),提供少量圖示以便于一般的信息揭示圖13是示出通知機(jī)制的圖示。圖14是示出兩個(gè)事務(wù)均將新記錄插入同一B樹(shù)的例子的圖示。圖15示出數(shù)據(jù)改變檢測(cè)過(guò)程。圖16示出示例性目錄樹(shù)。圖17示出其中基于目錄的文件系統(tǒng)的現(xiàn)有文件夾被移動(dòng)到存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中。
1.使用UDT的數(shù)據(jù)存儲(chǔ)實(shí)現(xiàn)在本實(shí)施例中,在一個(gè)實(shí)施例中包括Microsoft SQL Server引擎的關(guān)系型數(shù)據(jù)庫(kù)引擎314支持內(nèi)建的標(biāo)量類(lèi)型。內(nèi)建的標(biāo)量類(lèi)型是“原生(native)”且“簡(jiǎn)單”的。它們是原生的意義是,用戶(hù)不能定義他們自己的類(lèi)型;它們是簡(jiǎn)單的意義是,用戶(hù)不能封裝復(fù)雜的結(jié)構(gòu)。用戶(hù)定義的類(lèi)型(下文稱(chēng)為UDT)通過(guò)使用戶(hù)能通過(guò)定義復(fù)雜的結(jié)構(gòu)化類(lèi)型來(lái)擴(kuò)展類(lèi)型系統(tǒng),提供了一種用于超過(guò)或超越原生的標(biāo)量類(lèi)型系統(tǒng)的類(lèi)型可擴(kuò)展性的機(jī)制。一旦由用戶(hù)定義,UDT能用于可以使用內(nèi)建標(biāo)量類(lèi)型的類(lèi)型系統(tǒng)中的任何地方。
按本發(fā)明的一個(gè)方面,存儲(chǔ)平臺(tái)模式被映射到數(shù)據(jù)庫(kù)引擎存儲(chǔ)中的UDT類(lèi)。數(shù)據(jù)存儲(chǔ)項(xiàng)目被映射到從Base.Item類(lèi)型導(dǎo)出的UDT類(lèi)。類(lèi)似于項(xiàng)目,擴(kuò)展也能映射到UDT類(lèi)并使用繼承。根擴(kuò)展類(lèi)型是Base.Extension,從它導(dǎo)出所有擴(kuò)展類(lèi)型。
UDT是CLR類(lèi),它具有狀態(tài)(即數(shù)據(jù)字段)和行為(即例程)。使用任何受管語(yǔ)言(c#、VB.NET等)定義UDT。UDT方法和操作符能在T-SQL中針對(duì)該類(lèi)型的實(shí)例調(diào)用。UDT能是行中列的類(lèi)型、T-SQL中例程的參數(shù)的類(lèi)型、或在T-SQL中變量的類(lèi)型。
存儲(chǔ)平臺(tái)模式到UDT類(lèi)的映射在高級(jí)別上完全是直接的。一般而言,存儲(chǔ)平臺(tái)模式被映射到CLR名字空間。存儲(chǔ)平臺(tái)類(lèi)型被映射到CLR類(lèi)。CLR類(lèi)的繼承鏡象了存儲(chǔ)平臺(tái)類(lèi)型的繼承,且存儲(chǔ)平臺(tái)屬性被映射到CLR類(lèi)屬性。
2.項(xiàng)目映射為了希望項(xiàng)目能夠被全局地搜索,并在本實(shí)施例的關(guān)系型數(shù)據(jù)中支持繼承以及類(lèi)型可替代性,對(duì)在數(shù)據(jù)庫(kù)存儲(chǔ)中的項(xiàng)目存儲(chǔ)的一種可能的實(shí)現(xiàn)是在帶有類(lèi)型Base.Item的列的單個(gè)表中存儲(chǔ)所有項(xiàng)目。使用類(lèi)型可替代性,能存儲(chǔ)所有類(lèi)型的項(xiàng)目,且可按使用Yukon的“is of(類(lèi)型)”的操作符的項(xiàng)目類(lèi)型的子類(lèi)型來(lái)過(guò)濾搜索。
然而,由于在本實(shí)施例中牽涉到與這一方法相關(guān)聯(lián)的額外開(kāi)銷(xiāo),由頂級(jí)類(lèi)型將各項(xiàng)目劃分,使得每個(gè)類(lèi)型“家族”的項(xiàng)目存儲(chǔ)到單獨(dú)的表中。在此劃分模式中,對(duì)每個(gè)直接從Base.Item繼承的項(xiàng)目類(lèi)型創(chuàng)建一個(gè)表。如上所述,繼承下面這些的類(lèi)型使用類(lèi)型的可替代性存儲(chǔ)在合適的類(lèi)型家族表中。只有從Base.Item的第一級(jí)繼承被專(zhuān)門(mén)地處理。
使用一“陰影”表存儲(chǔ)所有項(xiàng)目的全局可搜索屬性的副本。此表可由存儲(chǔ)平臺(tái)API的Update()方法維護(hù),通過(guò)此方法作出所有數(shù)據(jù)的改變。不象類(lèi)型家族表,此全局項(xiàng)目表只包含該項(xiàng)目的項(xiàng)級(jí)標(biāo)量屬性,而不是全UDT項(xiàng)目對(duì)象。全局項(xiàng)目表允許通過(guò)展現(xiàn)ItemID和TypeID(類(lèi)型ID)導(dǎo)航到存儲(chǔ)在類(lèi)型家族表中的項(xiàng)目對(duì)象。ItemID通常唯一地標(biāo)識(shí)數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。可使用這里未予描述的元數(shù)據(jù)將TypeID映射到類(lèi)型名和包含該項(xiàng)目的視圖。由于通過(guò)其ItemID尋找項(xiàng)目在全局項(xiàng)目表的上下文及其它情況下都是常用操作,因此給定了項(xiàng)目的ItemId,提供GetItem()函數(shù)來(lái)檢索項(xiàng)目對(duì)象。
為便于訪問(wèn)和盡可能地隱藏實(shí)現(xiàn)的細(xì)節(jié),項(xiàng)目的所有查詢(xún)可以對(duì)照在上述項(xiàng)目的表上構(gòu)建的視圖進(jìn)行。具體說(shuō)來(lái),對(duì)每個(gè)項(xiàng)目類(lèi)型針對(duì)合適類(lèi)型的家族表創(chuàng)建視圖。這些類(lèi)型視圖可選擇相關(guān)聯(lián)的類(lèi)型,包括子類(lèi)型的所有項(xiàng)目。為方便起見(jiàn),除了UDT對(duì)象,視圖能對(duì)包括繼承字段的該類(lèi)型的所有頂級(jí)域展現(xiàn)列。
3.擴(kuò)展映射擴(kuò)展非常類(lèi)似于項(xiàng)目,且具有某些相同要求。如支持繼承性的另一根類(lèi)型,擴(kuò)展受到存儲(chǔ)中許多同樣的考慮和折衷比較。為此,對(duì)擴(kuò)展應(yīng)用類(lèi)似的類(lèi)型家族映射,而不是單個(gè)表方法。當(dāng)然,在其它實(shí)施例中,可使用單個(gè)表方法。在本實(shí)施例中,擴(kuò)展通過(guò)ItemID僅與一個(gè)項(xiàng)目關(guān)聯(lián),并包含在項(xiàng)目的上下文中唯一的ExtensionID。如同項(xiàng)目一樣,給定包括ItemID和ExtensionID對(duì)的身份,可提供一函數(shù)用于檢索擴(kuò)展。類(lèi)似于項(xiàng)目類(lèi)型視圖,對(duì)每個(gè)擴(kuò)展類(lèi)型可創(chuàng)建視圖。
4.嵌套元素映射嵌套元素是可嵌入到項(xiàng)目、擴(kuò)展、關(guān)系、或其它嵌套元素以形成深嵌套結(jié)構(gòu)的類(lèi)型。類(lèi)似于項(xiàng)目和擴(kuò)展,嵌套元素作為UDT實(shí)現(xiàn),但它們存儲(chǔ)在項(xiàng)目和擴(kuò)展中。因此,嵌套元素沒(méi)有超越它們的項(xiàng)目和擴(kuò)展容器的映射的存儲(chǔ)映射。換言之,在系統(tǒng)中沒(méi)有直接存儲(chǔ)NestedElement類(lèi)型的實(shí)例的表,且沒(méi)有專(zhuān)門(mén)用于嵌套元素的視圖。
5.對(duì)象身份在數(shù)據(jù)模型中的每一實(shí)體,即每個(gè)項(xiàng)目、擴(kuò)展和關(guān)系具有唯一的關(guān)鍵字值。一個(gè)項(xiàng)目由其ItemId唯一地標(biāo)識(shí)。擴(kuò)展由合成關(guān)鍵字(ItemId,ExtensionId)唯一地標(biāo)識(shí)。關(guān)系由合成關(guān)鍵字(ItemId,RelationId)標(biāo)識(shí)。ItemId,ExtensionId和RelationshipId均是GUID值。
6.SQL對(duì)象命名在數(shù)據(jù)存儲(chǔ)中創(chuàng)建的所有對(duì)象可存儲(chǔ)在從存儲(chǔ)平臺(tái)模式名字導(dǎo)出的SQL模式名字中。例如,存儲(chǔ)平臺(tái)基礎(chǔ)模式(常稱(chēng)“基礎(chǔ)”)可產(chǎn)生在“[System.Storage]”SQL模式中的類(lèi)型,如“[System.Storage].Item”。產(chǎn)生的名字可用限定詞加前綴以消除命名的沖突。在合適處可使用驚嘆號(hào)(!)作為名字的每個(gè)邏輯部分的分割符。下面表概括了在數(shù)據(jù)存儲(chǔ)用于對(duì)象的命名習(xí)慣。與用于訪問(wèn)數(shù)據(jù)存儲(chǔ)中的實(shí)例的修飾的命名習(xí)慣一起列出每個(gè)模式元素(項(xiàng)目、擴(kuò)展、關(guān)系和視圖)。
7.列命名當(dāng)映射任一對(duì)象模型到存儲(chǔ)時(shí),由于與應(yīng)用程序?qū)ο笠黄鸫鎯?chǔ)的附加信息,有可能發(fā)生命名沖突。為避免命名沖突,所有非類(lèi)型的特定列(不直接映射到類(lèi)型聲明中的命名的屬性的列)用下劃線字符(_)加前綴。在本實(shí)施例中,下劃線字符(_)不允許作為任何標(biāo)識(shí)符屬性的開(kāi)始字符。此外,為統(tǒng)一在CLR和數(shù)據(jù)存儲(chǔ)之間的命名,存儲(chǔ)平臺(tái)類(lèi)型或模式元素的所有屬性(關(guān)系等)應(yīng)具有大寫(xiě)的第一字符。
8.搜索視圖由存儲(chǔ)平臺(tái)提供視圖,用于搜索存儲(chǔ)的內(nèi)容。對(duì)每個(gè)項(xiàng)目和擴(kuò)展類(lèi)型提供SQL視圖。此外,提供視圖以支持關(guān)系和視圖(由數(shù)據(jù)模型定義)。所有SQL視圖和在存儲(chǔ)平臺(tái)中的底層表是只讀的。下面將更充分描述,使用存儲(chǔ)平臺(tái)API的Update()方法可存儲(chǔ)或改變數(shù)據(jù)。
在存儲(chǔ)平臺(tái)模式中直接定義的每個(gè)視圖(由模式設(shè)計(jì)者定義,而非由存儲(chǔ)平臺(tái)自動(dòng)地生成)可由命名的SQL視圖[<schema-name>].[View!<view-name>]訪問(wèn)。例如,在模式“AcmePublisher.Books”中名為“BookSales”的視圖可使用名字“[AcmePublisher.Books].[View!BookSales]來(lái)訪問(wèn)。因?yàn)橐晥D的輸出格式在每一視圖的基礎(chǔ)上是自定義的(由定義視圖的那一方提供的任意查詢(xún)確定的),列基于模式視圖定義被直接映射。
存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中的所有SQL搜索視圖使用列的下述排序習(xí)慣·如ItemId、ElementId、RelationshipId等的視圖結(jié)果的邏輯“關(guān)鍵字”列·如TypeId等關(guān)于結(jié)果類(lèi)型的元數(shù)據(jù)信息。
·改變?nèi)鏑reateVersion(創(chuàng)建版本)、UpdateVersion(更新版本)等跟蹤列·類(lèi)型專(zhuān)用的列(聲明的類(lèi)型的屬性)·類(lèi)型專(zhuān)用的視圖(家族視圖)也包含返回對(duì)象的對(duì)象列每個(gè)類(lèi)型家族的成員可使用一系列項(xiàng)目視圖來(lái)搜索,在數(shù)據(jù)存儲(chǔ)中每個(gè)項(xiàng)目類(lèi)型有一個(gè)視圖。圖28是示出項(xiàng)目搜索視圖的概念的圖示。
a)項(xiàng)目每個(gè)項(xiàng)目搜索視圖對(duì)特定類(lèi)型或其子類(lèi)型的項(xiàng)目的每個(gè)實(shí)例包含一行。例如,文檔的視圖能返回Document(文檔)、LegalDocument(合法文檔)和ReviewDoeument(審閱文檔)的實(shí)例。給定此例,能如圖29那樣概念化項(xiàng)目視圖。
(1)主項(xiàng)目搜索視圖存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)的每個(gè)實(shí)例定義稱(chēng)為主項(xiàng)目視圖(Master Item View)的特殊項(xiàng)目視圖。此視圖提供關(guān)于數(shù)據(jù)存儲(chǔ)中每個(gè)項(xiàng)目的綜述信息。視圖對(duì)每個(gè)項(xiàng)目類(lèi)型屬性提供一列,其中一列描述項(xiàng)目的類(lèi)型,若干列用于提供改變跟蹤和同步信息。在數(shù)據(jù)存儲(chǔ)中使用名字“[System.Storage].[Master!Item]”來(lái)標(biāo)識(shí)主項(xiàng)目視圖。
(2)分類(lèi)型的項(xiàng)目搜索視圖每個(gè)項(xiàng)目類(lèi)型也具有搜索視圖。類(lèi)似于根項(xiàng)目視圖,此視圖還提供通過(guò)“Item”列對(duì)項(xiàng)目對(duì)象的訪問(wèn)。在數(shù)據(jù)存儲(chǔ)中使用名字[schemaName].[itemTypeName]標(biāo)識(shí)每個(gè)分類(lèi)型的項(xiàng)目搜索視圖。例如[AcmeCorp.Dod].[OfficeDoc]。
9.
a)項(xiàng)目擴(kuò)展WinFs存儲(chǔ)中的所有項(xiàng)目擴(kuò)展也可使用搜索視圖來(lái)訪問(wèn)。
(1)主擴(kuò)展搜索視圖數(shù)據(jù)存儲(chǔ)的每個(gè)實(shí)例定義一稱(chēng)為主擴(kuò)展視圖(Master Extension View)的特殊擴(kuò)展視圖。此視圖提供關(guān)于數(shù)據(jù)存儲(chǔ)中每個(gè)擴(kuò)展的綜述信息。該視圖對(duì)每個(gè)擴(kuò)展屬性有一列,其中一列描述擴(kuò)展的類(lèi)型,而若干列用于提供改變跟蹤和同步信息。使用名字“[System.Storage].[Master!Extension]”在數(shù)據(jù)存儲(chǔ)中標(biāo)識(shí)主擴(kuò)展視圖。
10.
(1)分類(lèi)型的擴(kuò)展搜索視圖每個(gè)擴(kuò)展類(lèi)型還具有搜索視圖。類(lèi)似于主擴(kuò)展視圖,此視圖還提供通過(guò)_Extension列對(duì)項(xiàng)目對(duì)象的訪問(wèn)。在數(shù)據(jù)存儲(chǔ)中使用名字[SchemaName].[Extension!extensionTypeName]標(biāo)識(shí)每個(gè)分類(lèi)型的擴(kuò)展搜索視圖。例如[AcmeCorp.Doc].[Extension!OfficeDocExt]。
b)嵌套的元素所有嵌套的元素存儲(chǔ)在項(xiàng)目、擴(kuò)展或關(guān)系實(shí)例之中。因此,它們能通過(guò)查詢(xún)合適的項(xiàng)目、擴(kuò)展或關(guān)系搜索視圖來(lái)訪問(wèn)。
c)關(guān)系如上討論,關(guān)系形成在存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中各項(xiàng)目之間鏈接的基本單元。
(1)主關(guān)系搜索視圖每個(gè)數(shù)據(jù)存儲(chǔ)提供—主關(guān)系視圖。此視圖提供關(guān)于數(shù)據(jù)存儲(chǔ)中所有關(guān)系實(shí)例的信息。在數(shù)據(jù)存儲(chǔ)中使用名字“[System.Storage].[Master!Relationship]”來(lái)標(biāo)識(shí)主關(guān)系視圖。
(2)關(guān)系實(shí)例搜索視圖每個(gè)聲明的關(guān)系也有返回該特定關(guān)系的所有實(shí)例的搜索視圖。類(lèi)似于主關(guān)系視圖,此視圖對(duì)該關(guān)系數(shù)據(jù)的每個(gè)屬性提供命名的列。在數(shù)據(jù)存儲(chǔ)中使用名字[schemaName].[Relationship!relationshipName]來(lái)標(biāo)識(shí)每個(gè)關(guān)系實(shí)例搜索視圖。例如[AcmeCorp.Doc].[Relationship!DocumentAuthor]。
d)11.更新存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中所有視圖是只讀的。為創(chuàng)建數(shù)據(jù)模型元素(項(xiàng)目、擴(kuò)展或關(guān)系)的新實(shí)例,或更新現(xiàn)有的實(shí)例,必須使用存儲(chǔ)平臺(tái)API的ProcessOperation或ProcessUpdategram方法。ProcessOperation方法是單個(gè)存儲(chǔ)的過(guò)程,它是由消費(fèi)細(xì)化擬執(zhí)行的動(dòng)作的“操作”的數(shù)據(jù)存儲(chǔ)定義的。ProcessUpdategram方法是存儲(chǔ)的過(guò)程,它采取稱(chēng)為“更新元素(updategram)”的一組有序的操作,它們共同細(xì)化擬執(zhí)行的一組動(dòng)作。
操作格式是可擴(kuò)展的,并提供在模式元素上的各種操作。某些公用操作包括1.項(xiàng)目操作a.CreateItem(在嵌入或持有關(guān)系的上下文中創(chuàng)建一新的項(xiàng)目)b.UpdateItem(更新一現(xiàn)有的項(xiàng)目)2.關(guān)系操作a.CreateRelationship(創(chuàng)建引用或持有關(guān)系的實(shí)例)b.UpdateRelationship(更新一關(guān)系實(shí)例)c.DeleteRelationship(移除一關(guān)系實(shí)例)3.擴(kuò)展操作a.CreateExtension(添加一擴(kuò)展到現(xiàn)有的項(xiàng)目)b.UpdateExtension(更新一現(xiàn)有的擴(kuò)展)c.DeleteExtension(刪除一擴(kuò)展)12.改變跟蹤及墓碑如下面更充分討論,由數(shù)據(jù)存儲(chǔ)提供改變跟蹤和墓碑服務(wù)。本節(jié)提供在數(shù)據(jù)存儲(chǔ)中展現(xiàn)的改變跟蹤信息的概述a)改變跟蹤由數(shù)據(jù)存儲(chǔ)提供的每個(gè)搜索視圖包含用于提供改變跟蹤信息的列;那些列對(duì)所有項(xiàng)目、擴(kuò)展和關(guān)系視圖是公用的。由模式設(shè)計(jì)者明確地定義的存儲(chǔ)平臺(tái)模式視圖不自動(dòng)地提供改變跟蹤信息—該信息是通過(guò)在其上構(gòu)建視圖本身的搜索視圖來(lái)間接提供的。
對(duì)數(shù)據(jù)存儲(chǔ)中的每個(gè)元素,可從兩個(gè)地方得到改變跟蹤信息“主”元素視圖和“分類(lèi)型的”元素視圖。例如,可從主項(xiàng)目視圖“[System.Storage].[Master!Item]”和分類(lèi)型的項(xiàng)目視圖[AcmeCorp.Document].[Document]中得到關(guān)于AcmeCorp.Document.Document項(xiàng)目類(lèi)型的改變跟蹤信息。
(1)“主”搜索視圖中的改變跟蹤主搜索視圖中的改變跟蹤信息提供關(guān)于元素的創(chuàng)建和更新版本的信息、關(guān)于哪個(gè)同步伙伴創(chuàng)建該元素的信息、關(guān)于哪個(gè)同步伙伴最后一次更新該元素的信息、以及來(lái)自每個(gè)伙伴的用于創(chuàng)建和更新的版本號(hào)。用伙伴關(guān)鍵字來(lái)標(biāo)識(shí)同步關(guān)系中的伙伴(下面描述)。類(lèi)型[System.Storge.Store].ChangeTrackingInfo的名為_(kāi)ChangeTrackingInfo的單個(gè)UDT對(duì)象包含所有這些信息。在System.Storage模式中定義類(lèi)型。在項(xiàng)目、擴(kuò)展和關(guān)系的所有全局搜索視圖中可得到_ChangeTrackingInfo。_ChangeTrackingInfo的類(lèi)型定義是<Type Name=″ChangeTrackingInfo″BaseType=″Base.NestedElement″>
<FieldProperty Name=″CreationLocalTS″Type=″SqlTypes.SqlInt64″Nullable=″False″/>
<FieldProperty Name=″CreatingPartnerKey″Type=″SqlTypes.SqlInt32″Nullable=″False″/>
<FieldProperty Name=″CreatingPartnerTS″Type=″SqlTypes.SqlInt64″Nullable=″False″/>
<FieldProperty Name=″LastUpdateLocalTS″Type=″SqlTypes.SqlInt64″Nullable=″False″/>
<FieldProperty Name=″LastUpdatingPartnerKey″Type=″SqlTypes.SqlInt32″Nullable=″False″/>
<FieldProperty Name=″LastUpdatingPartnerTS″Type=″SqlTypes.SqlInt64″Nullable=″False″/></Type>
這些屬性包含下述信息
(2)“分類(lèi)型的”搜索視圖中的改變跟蹤除了提供與全局搜索視圖相同信息外,每個(gè)分類(lèi)型的搜索視圖提供記錄在同步拓?fù)渲忻總€(gè)元素的同步狀態(tài)的附加信息。
b)墓碑?dāng)?shù)據(jù)存儲(chǔ)為項(xiàng)目、擴(kuò)展和關(guān)系提供墓碑信息。墓碑視圖提供一個(gè)地方中有關(guān)活動(dòng)和墓碑實(shí)體兩者(項(xiàng)目、擴(kuò)展和關(guān)系)的信息。項(xiàng)目和擴(kuò)展墓碑視圖不提對(duì)對(duì)應(yīng)對(duì)象的訪問(wèn),而關(guān)系墓碑視圖提供對(duì)關(guān)系對(duì)象的訪問(wèn)(在墓碑關(guān)系的情況下關(guān)系對(duì)象為空)。
(1)項(xiàng)目墓碑通過(guò)視圖[System.Storage].[Tombstone!item]從系統(tǒng)檢索項(xiàng)目墓碑。
(2)擴(kuò)展墓碑使用視圖[System.Storage].[Tombstone!Extension]從系統(tǒng)檢索擴(kuò)展墓碑。擴(kuò)展改變跟蹤信息類(lèi)似于為項(xiàng)目提供的添加了ExtensionId屬性的信息。
(3)關(guān)系墓碑通過(guò)視圖[System.Storage].[Tombstone!Relationship]從系統(tǒng)檢索關(guān)系墓碑。關(guān)系墓碑信息類(lèi)似于對(duì)擴(kuò)展提供的信息。然而,在關(guān)系實(shí)例的目標(biāo)ItemRef上提供附加信息。此外,還選擇關(guān)系對(duì)象。
(4)墓碑清除為防止墓碑信息無(wú)限制地增長(zhǎng),數(shù)據(jù)存儲(chǔ)提供墓碑清除任務(wù)。此任務(wù)確定什么時(shí)候可以舍棄墓碑信息。該任務(wù)計(jì)算本地創(chuàng)建/更新版本的界限,并隨后通過(guò)舍棄所有更早的墓碑版而截?cái)嗄贡畔ⅰ?br>
13.助手API和函數(shù)基礎(chǔ)映射還提供若干助手函數(shù)。提供這些函數(shù)以幫助在該數(shù)據(jù)模型上的公用操作。
a)函數(shù)[system.Storage].GetItem∥給定ItemId返回一項(xiàng)目對(duì)象Item GetItem(ItemId ItemId)b)函數(shù)[System.Storage].GetExtension∥給定ItemId和ExtensionId返回一擴(kuò)展對(duì)象Extension GetExtension(ItemId ItemId,ExtensionId ExtensionId)c)函數(shù)[System.Storage].GetRelationship∥給定ItemId和RelationshipId返回—關(guān)系對(duì)象
Relationship GetRelationship(ItemId ItemId,RelationshipId RelationshipId)14.元數(shù)據(jù)有兩類(lèi)在存儲(chǔ)中表示的元數(shù)據(jù)實(shí)例元數(shù)據(jù)(項(xiàng)目的類(lèi)型等),和類(lèi)型元數(shù)據(jù)。
a)模式元數(shù)據(jù)模式元數(shù)據(jù)作為來(lái)自元模式的項(xiàng)目類(lèi)型的實(shí)例存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中。
b)實(shí)例元數(shù)據(jù)應(yīng)用程序使用實(shí)例元數(shù)據(jù)來(lái)查詢(xún)項(xiàng)目的類(lèi)型,并尋找與項(xiàng)目相關(guān)聯(lián)的擴(kuò)展。給定項(xiàng)目的ItemId,應(yīng)用程序可查詢(xún)?nèi)猪?xiàng)目視圖,以返回該項(xiàng)目的類(lèi)型,并使用此值來(lái)查詢(xún)Meta.Type視圖以返回關(guān)于該項(xiàng)目的聲明的類(lèi)型的信息。例如,∥對(duì)給定的項(xiàng)目實(shí)例返回元數(shù)據(jù)項(xiàng)目對(duì)象SELECT m.Item AS metadataInfoObjFROM[System.Storage].[Item]i INNER JOIN[Meta].[Type]m ON i._TypeId=m.ItemIdWHERE i.ItemId=@ItemIdE.安全性一般而言,所有可保護(hù)的對(duì)象使用圖26中所示的訪問(wèn)掩碼格式來(lái)安排訪問(wèn)權(quán)限。在此格式中,低16位用于對(duì)象專(zhuān)用的的訪問(wèn)權(quán)限,接著7位用于應(yīng)用于大多數(shù)對(duì)象類(lèi)型的標(biāo)準(zhǔn)訪問(wèn)權(quán)限,高4位用于指定類(lèi)屬訪問(wèn)權(quán)限,每個(gè)對(duì)象類(lèi)型將其映射到一組標(biāo)準(zhǔn)且對(duì)象專(zhuān)用的權(quán)限。ACCESS SYSTEM SECURITY位對(duì)應(yīng)于訪問(wèn)對(duì)象的SACL的權(quán)限。
在圖26的訪問(wèn)掩碼結(jié)構(gòu)中,項(xiàng)目專(zhuān)用的權(quán)限被放置在對(duì)象專(zhuān)用權(quán)限段(低16位)。由于在本實(shí)施例中,存儲(chǔ)平臺(tái)向管理員安全性展現(xiàn)兩組APIWin32和存儲(chǔ)平臺(tái)API,為促進(jìn)存儲(chǔ)平臺(tái)對(duì)象專(zhuān)用權(quán)限的設(shè)計(jì),必須考慮文件系統(tǒng)對(duì)象專(zhuān)用的權(quán)限。
在通過(guò)引用結(jié)合于此的有關(guān)專(zhuān)利中充分描述了用于本發(fā)明的存儲(chǔ)平臺(tái)的安全模型。在這點(diǎn)上,圖27(部分a、b和c)畫(huà)出按安全模型的一實(shí)施例,作為從現(xiàn)有安全區(qū)域開(kāi)拓出的新的等同地保護(hù)的安全區(qū)域。
F.通知和改變跟蹤按本發(fā)明的另一方面,存儲(chǔ)平臺(tái)提供允許應(yīng)用程序跟蹤數(shù)據(jù)改變的通知能力。此特征主要供保持易失狀態(tài)或執(zhí)行數(shù)據(jù)改變事件上的業(yè)務(wù)邏輯的應(yīng)用程序使用。應(yīng)用程序注冊(cè)在項(xiàng)目、項(xiàng)目擴(kuò)展及項(xiàng)目關(guān)系上的通知。在提交了數(shù)據(jù)改變通知被異步地傳送。應(yīng)用程序可按項(xiàng)目、擴(kuò)展和關(guān)系類(lèi)型以及操作類(lèi)型來(lái)過(guò)濾通知。
按一個(gè)實(shí)施例,存儲(chǔ)平臺(tái)API 322為通知提供兩類(lèi)接口。第一,應(yīng)用程序注冊(cè)由對(duì)項(xiàng)目、項(xiàng)目擴(kuò)展和項(xiàng)目關(guān)系的改變觸發(fā)的簡(jiǎn)單數(shù)據(jù)改變事件。第二,應(yīng)用程序創(chuàng)建“監(jiān)視程序”對(duì)象來(lái)監(jiān)視項(xiàng)目、項(xiàng)目擴(kuò)展和項(xiàng)目之間關(guān)系的組。在系統(tǒng)失敗或系統(tǒng)離線超過(guò)預(yù)定時(shí)間之后,可保存和重新創(chuàng)建監(jiān)視程序?qū)ο蟮臓顟B(tài)。單個(gè)通知可反映多個(gè)更新。
關(guān)于此功能的附加細(xì)節(jié)能在先前通過(guò)引用結(jié)合于此的有關(guān)專(zhuān)利中找到。
G.傳統(tǒng)文件互操作性如上提到,至少在某些實(shí)施例中,本發(fā)明的存儲(chǔ)平臺(tái)旨在被實(shí)施為計(jì)算機(jī)系統(tǒng)的硬件/軟件接口系統(tǒng)的整體部分。例如,本發(fā)明的存儲(chǔ)平臺(tái)可被實(shí)施為如Microsoft Windows家族操作系統(tǒng)的整體部分。在這方面,存儲(chǔ)平臺(tái)API成為操作系統(tǒng)API的一部分,應(yīng)用程序通過(guò)它與操作系統(tǒng)交互。因此,存儲(chǔ)平臺(tái)成為裝置,應(yīng)用程序通過(guò)它將信息存到操作系統(tǒng)上,且從而基于項(xiàng)目的存儲(chǔ)平臺(tái)的數(shù)據(jù)模型替代了這一操作系統(tǒng)的傳統(tǒng)文件系統(tǒng)。例如,當(dāng)在Microsoft Windows家族操作系統(tǒng)中實(shí)施時(shí),存儲(chǔ)平臺(tái)可替代在該操作系統(tǒng)中實(shí)現(xiàn)的NTFS文件系統(tǒng)。當(dāng)前,應(yīng)用程序通過(guò)由Windows家族操作系統(tǒng)展現(xiàn)的Win32 API來(lái)訪問(wèn)NTFS文件系統(tǒng)的服務(wù)。
然而,應(yīng)認(rèn)識(shí)到,完全用本發(fā)明的存儲(chǔ)平臺(tái)替代NTFS文件系統(tǒng)需要重新編碼現(xiàn)有的基于Win32的應(yīng)用程序,且那樣的重新編碼可能是不合需要的,因此本發(fā)明的存儲(chǔ)平臺(tái)提供與如NFS等現(xiàn)有文件系統(tǒng)的某種互操作性是有益的。從而,在本發(fā)明的一個(gè)實(shí)施例中,存儲(chǔ)平臺(tái)使依賴(lài)于Win32編程模型的應(yīng)用程序能同時(shí)訪問(wèn)存儲(chǔ)平臺(tái)的數(shù)據(jù)存儲(chǔ)以及傳統(tǒng)的NTFS文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)的內(nèi)容。為此,存儲(chǔ)平臺(tái)使用作為Win32命名習(xí)慣的超集(superset)的命名習(xí)慣以便于容易的互操作性。此外,存儲(chǔ)平臺(tái)支持通過(guò)Win32 API訪問(wèn)存儲(chǔ)在存儲(chǔ)平臺(tái)卷中的文件和目錄。
關(guān)于此功能的另外細(xì)節(jié)能在先前通過(guò)引用結(jié)合于此的有關(guān)專(zhuān)利中找到。
H.存儲(chǔ)平臺(tái)API存儲(chǔ)平臺(tái)包括API,它使應(yīng)用程序能訪問(wèn)上面討論的存儲(chǔ)平臺(tái)的特征和能力,并訪問(wèn)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中的項(xiàng)目。本節(jié)描述本發(fā)明的存儲(chǔ)平臺(tái)的存儲(chǔ)平臺(tái)API的一個(gè)實(shí)施例。關(guān)于此功能的細(xì)節(jié)能在通過(guò)引用結(jié)合于此的有關(guān)專(zhuān)利中找到,為方便起見(jiàn)在下面總結(jié)此信息的某一些。
參考圖18,包含文件夾是一個(gè)項(xiàng)目,它包含與其它項(xiàng)目的持有關(guān)系,且與通常概念的文件系統(tǒng)文件夾等價(jià)。每個(gè)項(xiàng)目“包含”在至少一個(gè)包含文件夾中。
圖19示出按本實(shí)施例的存儲(chǔ)平臺(tái)API的基本體系結(jié)構(gòu)。存儲(chǔ)平臺(tái)API使用SQL客戶(hù)機(jī)1900與本地?cái)?shù)據(jù)存儲(chǔ)302對(duì)話,并還使用SQL客戶(hù)機(jī)1900與遠(yuǎn)程數(shù)存儲(chǔ)(如數(shù)據(jù)存儲(chǔ)340)對(duì)話。本地存儲(chǔ)還可使用DQP(分布式查詢(xún)處理器)或通過(guò)上述的存儲(chǔ)平臺(tái)同步服務(wù)(“Sync”)與遠(yuǎn)程數(shù)據(jù)存儲(chǔ)340對(duì)話。存儲(chǔ)平臺(tái)API322還擔(dān)當(dāng)數(shù)據(jù)存儲(chǔ)通知的橋接器API,將應(yīng)用程序的下標(biāo)傳送到通知引擎,并如上所述將通知路由到應(yīng)用程序(如應(yīng)用程序350a、350b或350c)。在一個(gè)實(shí)施例中,存儲(chǔ)平臺(tái)API 322還定義受限制的“提供者”體系結(jié)構(gòu),使得它能訪問(wèn)MicrosoftExchange和AD中的數(shù)據(jù)。
圖20示意性地表示存儲(chǔ)平臺(tái)API的各種組件。存儲(chǔ)平臺(tái)AP包括下列組件(1)數(shù)據(jù)類(lèi)2002,它代表存儲(chǔ)平臺(tái)元素和項(xiàng)目類(lèi)型;(2)運(yùn)行庫(kù)架構(gòu)2004,它管理對(duì)象的持久性并提供支持類(lèi)2006;以及(3)工具2008,它用于從存儲(chǔ)平臺(tái)模式生成CLR類(lèi)。
從給定模式得出的類(lèi)的分層結(jié)構(gòu)直接反應(yīng)了該模式中類(lèi)型的分層結(jié)構(gòu)。作為例子,考慮在如圖21A和圖21B中所示的聯(lián)系人模式中定義的項(xiàng)目類(lèi)型。
圖22示出操作中的運(yùn)行庫(kù)架構(gòu)。運(yùn)行庫(kù)架構(gòu)如下操作1.應(yīng)用程序350a、350b或350c綁定到存儲(chǔ)平臺(tái)的項(xiàng)目。
2.架構(gòu)2004創(chuàng)建對(duì)應(yīng)于綁定項(xiàng)目的ItemContext對(duì)象2202,并將其返回給應(yīng)用程序。
3.應(yīng)用程序提交在此ItemContext(項(xiàng)目上下文)上的Find(尋找),以得到項(xiàng)目的集合;返回的集合在概念上是對(duì)象圖2204(由于關(guān)系)。
4.應(yīng)用程序改變、刪除和插入數(shù)據(jù)。
5.應(yīng)用程序通過(guò)調(diào)用Update()方法保存改變。
圖23示出“FindAll(尋找所有)”操作的執(zhí)行。
圖24示出從存儲(chǔ)平臺(tái)模式生成存儲(chǔ)平臺(tái)API類(lèi)的過(guò)程。
圖25示出文件API所基于的模式。存儲(chǔ)平臺(tái)API包括處理文件對(duì)象的名字空間。該名字空間被稱(chēng)為System.Storage.Files。System.Storage.Files中的類(lèi)的數(shù)據(jù)成員直接反映了存儲(chǔ)在存儲(chǔ)平臺(tái)存儲(chǔ)中的信息;此信息是從文件系統(tǒng)對(duì)象的“升級(jí)”或使用Win32 API本機(jī)地創(chuàng)建。System.Storage.Files名字空間具有兩個(gè)類(lèi)FileItem(文件項(xiàng)目)和DirectoryItem(目錄項(xiàng)目)。這些類(lèi)的成員及其方法可通過(guò)審閱圖25中的模式圖來(lái)預(yù)測(cè)。FileItem和DirectoryItem是從存儲(chǔ)平臺(tái)API只讀的。為修改它們,必須使用System.IO中的Win32 API或類(lèi)。
對(duì)于API,編程接口(或簡(jiǎn)稱(chēng)之為接口)可以被視為用于令代碼的一個(gè)或多個(gè)片斷能與由代碼的一個(gè)或多個(gè)其它片斷提供的功能進(jìn)行通信或?qū)ζ溥M(jìn)行訪問(wèn)的任一機(jī)制、過(guò)程、協(xié)議。或者,編程接口可以被視為能夠通信地耦合至其它計(jì)算機(jī)的一個(gè)或多個(gè)機(jī)制、方法、函數(shù)調(diào)用、模塊等的系統(tǒng)的組件的一個(gè)或多個(gè)機(jī)制、方法、函數(shù)調(diào)用、模塊、對(duì)象等。上述語(yǔ)句中的術(shù)語(yǔ)“代碼片斷”意在包括代碼的一個(gè)或多個(gè)指令或代碼行,并包括,如,代碼模塊、對(duì)象、子例程、函數(shù)等等,無(wú)論應(yīng)用的術(shù)語(yǔ)是什么、或代碼片斷是否被單獨(dú)編譯、或代碼片斷是否被提供為源碼、中間碼或?qū)ο蟠a、代碼片斷是否在運(yùn)行時(shí)系統(tǒng)或進(jìn)程中使用、或它們是否位于同一或不同機(jī)器上或跨多個(gè)機(jī)器分布、或由代碼片斷表示的功能是否完全由軟件、完全由硬件或硬件和軟件的組合來(lái)實(shí)現(xiàn)。
概念上,編程接口可以被一般地察看,如圖30A或圖30B所示的。圖30A示出了接口“接口1”為管道,第一和第二代碼片斷通過(guò)該管道進(jìn)行通信。圖30B示出了接口包括接口對(duì)象I1和I2(可以是或不是第一和第二代碼片斷的部分),它們令系統(tǒng)的第一和第二代碼片斷能通過(guò)介質(zhì)M進(jìn)行通信。在圖30B中,可以認(rèn)為接口對(duì)象I1和I2為同一系統(tǒng)的單獨(dú)接口,并且也可以認(rèn)為對(duì)象I1和I2加上介質(zhì)M構(gòu)成了接口。盡管圖30A和30B示出了雙向流程以及該流程的每一側(cè)上的接口,某些實(shí)現(xiàn)可僅具有一個(gè)方向上的信息流(或如下所述沒(méi)有信息流),或僅具有一側(cè)的接口對(duì)象。作為示例而非局限,諸如應(yīng)用編程或程序接口(API)、入口點(diǎn)、方法、函數(shù)、子例程、遠(yuǎn)程過(guò)程調(diào)用和組件對(duì)象模型(COM)接口等術(shù)語(yǔ)包含在編程接口的定義之內(nèi)。
這類(lèi)編程接口的方面可包括第一代碼片斷向第二代碼片斷發(fā)送信息的方法(其中,“信息”以其最廣泛的意義使用,并包括數(shù)據(jù)、命令、請(qǐng)求等等);第二代碼片斷接收信息的方法;以及該信息的結(jié)構(gòu)、序列、語(yǔ)法、組織、模式、定時(shí)和內(nèi)容。在這一點(diǎn)上,只要信息以接口所定義的方式傳輸,底層傳輸介質(zhì)本身可以對(duì)接口的操作不重要,無(wú)論該介質(zhì)是有線還是無(wú)線,或兩者的組合。在某些情況下,在常規(guī)意義上,當(dāng)一個(gè)代碼片斷僅訪問(wèn)由第二代碼片斷執(zhí)行的功能時(shí),信息可不在一個(gè)或兩個(gè)方向上傳輸,因?yàn)樾畔鬏斂梢允腔蛘咄ㄟ^(guò)另一機(jī)制(如,信息被放置在與代碼片斷之間的信息流分離的緩存、文件等中)或者不存在。這些方面的任一個(gè)或所有可以在給定的情況下重要,如,取決于代碼片斷是否是松耦合或緊耦合配置的系統(tǒng)的一部分,并且因此該列表應(yīng)當(dāng)被認(rèn)為是說(shuō)明性的而非限制。
編程接口的這一概念對(duì)本領(lǐng)域的技術(shù)人員是已知的,并且可以閱讀上述本發(fā)明的詳細(xì)描述而清楚這一概念。然而,有其它方法來(lái)實(shí)現(xiàn)編程接口,并且除非明顯地排除,這些方法也由所附權(quán)利要求書(shū)包含在內(nèi)。這些其它方法看似比圖30A和30B的視圖更精密或復(fù)雜,但是它們?nèi)詧?zhí)行類(lèi)似的功能來(lái)完成同一整體結(jié)果。現(xiàn)在簡(jiǎn)要描述編程接口的某些說(shuō)明性替換實(shí)現(xiàn)。
分解可以通過(guò)將通信分裂成多個(gè)離散通信來(lái)間接地實(shí)現(xiàn)從一個(gè)代碼片斷到另一個(gè)的通信。這在圖31A和31B中示意性地描述。如圖所示,可以按照功能的可分組來(lái)描述某些接口。由此,可以分解圖30A和30B的接口功能來(lái)達(dá)到相同的結(jié)果,如同可以在數(shù)學(xué)上提供24,或2乘2乘3乘2一樣。因此,如圖31A所示,可以細(xì)分由接口“接口1”提供的功能以將該接口的通信變換成多個(gè)接口“接口1A”、“接口1B”、“接口1C”等,而達(dá)到相同的結(jié)果。如圖31B所示,由接口I1提供的函數(shù)可以被細(xì)分成多個(gè)接口I1a、I1b、I1c等,而達(dá)到相同的結(jié)果。類(lèi)似地,從第一代碼片斷接收信息的第二代碼片斷的接口I2可以被分解成多個(gè)接口I2a、I2b、I2c等。當(dāng)分解時(shí),包括在第一代碼片斷中的接口的數(shù)量不需要匹配包括在第二代碼片斷中的接口的數(shù)量。在圖31A或31B的任一情況下,接口“接口1”和I1的功能性精神分別與圖30A和30B的保持相同。接口的分解也可遵從聯(lián)合、通信和其它數(shù)學(xué)性質(zhì),使得分解較難識(shí)別。例如,命令操作可以是不重要的,并且因此由接口完成的功能可以在達(dá)到該接口之前由另一段代碼或接口較好地完成,或者由系統(tǒng)的單獨(dú)組件執(zhí)行。此外,編程領(lǐng)域的普通技術(shù)人員可以理解有各種方式來(lái)作出不同的函數(shù)調(diào)用而達(dá)到相同的結(jié)果。
重定義在某些情況下,可能忽略、添加或重定義編程接口的某些方面(如參數(shù)),而仍達(dá)到預(yù)期的結(jié)果。這在圖32A和32B中示出。例如,假定圖30A的接口“接口1”包括函數(shù)調(diào)用Square(input,precision,output)(平方),它包括三個(gè)參數(shù),input(輸入)、precision(精度)和output(輸出),并且由第一代碼片斷向第二代碼片斷發(fā)布。如果中間參數(shù)precision在給定的情形下無(wú)關(guān)緊要,如圖32A所示,它也可以被忽略或甚至由meaningless(無(wú)意義)(在這一情況下)參數(shù)來(lái)替換。也可以添加無(wú)關(guān)緊要的additional(另外)參數(shù)。在任一情況下,只要在輸入由第二代碼片斷平方之后返回輸出,就可以達(dá)到square(平方)的功能。Precision也有可能對(duì)計(jì)算系統(tǒng)的某一下游或其它部分是極有意義的參數(shù);然而,一旦認(rèn)識(shí)到precision對(duì)計(jì)算平方這一有限目的不是必需的,它可以被替換或忽略。例如,不是傳遞一個(gè)有效的pricision值,而是在不對(duì)結(jié)果產(chǎn)生不利影響的情況下傳遞諸如出生日期等無(wú)意義的值。類(lèi)似地,如圖32B所示,接口I1由接口I1′替換,它被重新定義來(lái)忽略或向接口添加參數(shù)。接口I2可類(lèi)似地被重定義為接口I2′,它被重定義來(lái)忽略不必要的參數(shù),或可在別處處理的參數(shù)。此處的要點(diǎn)是在某些情況下,編程接口可包括對(duì)某一目的而言所不需要的方面,諸如參數(shù),因此可以忽略或重定義它們,或在別處處理它們用于其它目的。
內(nèi)嵌代碼合并兩個(gè)單獨(dú)的代碼模塊的一些或全部功能也是可行的,使得它們之間的“接口”改變形式。例如,圖30A和30B的功能可以被分別轉(zhuǎn)化到圖33A和33B的功能。在圖33A中,圖30A的先前的第一和第二代碼片斷被合并成包含兩者的模塊。在這一情況下,該代碼片斷仍可以彼此通信,但是該接口可以適用于更適合單個(gè)模塊的形式。由此,例如,正式的調(diào)用(Call)和返回(Return)語(yǔ)句將不再必需,但是依照接口“接口1”的類(lèi)似的處理或響應(yīng)仍是有效的。類(lèi)似地,如圖33B所示,圖30B的部分(或所有)接口I2可以?xún)?nèi)嵌地寫(xiě)入接口I1來(lái)形成接口I1″。如圖所示,接口I2被劃分成I2a和I2b,并且接口部分I2a內(nèi)嵌在接口I1中書(shū)寫(xiě)代碼來(lái)形成接口I1″。對(duì)于具體的示例,考慮圖30B的接口1執(zhí)行函數(shù)調(diào)用square(input,output),它由接口I2接收,在由第二代碼片斷處理傳遞到input的值(對(duì)其求平方)之后,它被使用output傳遞回已求平方的結(jié)果。在這一情況下,由第二代碼片斷執(zhí)行的處理(對(duì)input求平方)可以由第一代碼片斷在不調(diào)用該接口的情況下執(zhí)行。
脫離可以通過(guò)將通信分裂成多個(gè)離散的通信來(lái)間接地完成從一個(gè)代碼片斷到另一個(gè)的通信。這在圖34A和34B中示意性地描述。如圖34A所示,提供了中間件的一個(gè)或多個(gè)片斷(脫離接口(Divorce Interface),因?yàn)樗鼈儚脑嫉慕涌诿撾x的功能和/或接口函數(shù)),以轉(zhuǎn)化第一接口“接口1”上的通信,使得它們符合不同的接口,在本情況下為“接口2A”、“接口2B”和“接口2C”。這可以在這樣一種情況中完成,例如,依照“接口1”協(xié)議設(shè)計(jì)應(yīng)用的已安裝基礎(chǔ)與如操作系統(tǒng)進(jìn)行通信,但是然后改變?cè)摬僮飨到y(tǒng)來(lái)使用不同的接口,在本情況下為接口“接口2A”、“接口2B”和“接口2C”。要點(diǎn)是改變了由第二代碼片斷使用的原始接口,使得它不再與第一代碼片斷所使用的接口兼容,因此使用中介來(lái)令舊接口和新接口兼容。類(lèi)似地,如圖34B所示,可以使用脫離接口DI1引入第三代碼片斷以從接口I1接收信息,并使用脫離接口DI2引入第三代碼片斷以向例如接口I2a和I2b發(fā)送接口功能,重新設(shè)計(jì)接口I2a和I2b以使用DI2,但是提供相同的功能性結(jié)果。類(lèi)似地,DI1和DI2可共同工作以將圖30B的接口I1和I2的功能轉(zhuǎn)換成一新操作系統(tǒng),而提供相同或類(lèi)似的功能性結(jié)果。
重寫(xiě)再一種可能的變化是動(dòng)態(tài)地重寫(xiě)代碼,使用別的東西來(lái)替換接口的功能,而仍達(dá)到相同的總體結(jié)果。例如,可以有一種系統(tǒng),其中,向執(zhí)行環(huán)境(如由.Net框架提供的環(huán)境、Java運(yùn)行時(shí)環(huán)境或其它類(lèi)似的運(yùn)行時(shí)刻類(lèi)型環(huán)境)中的及時(shí)(Just-in-Time)(JIT)編譯器或解釋器提供了中間語(yǔ)言(如Microsoft IL、JavaByteCode等)中呈現(xiàn)的代碼片斷。可以書(shū)寫(xiě)JIT編譯器以動(dòng)態(tài)地將通信從第一代碼片斷轉(zhuǎn)化到第二代碼片斷,即,令它們符合第二代碼片斷(原始或不同的第二代碼片斷)所需要的不同接口。這在圖35A和35B中有描述。如圖35A中所看見(jiàn)的,這一方式類(lèi)似于上述的脫離情形。它可以在這樣一種情況下完成,例如,依照“接口1”協(xié)議設(shè)計(jì)應(yīng)用的已安裝基礎(chǔ)操作系統(tǒng)進(jìn)行通信,然后改變?cè)摬僮飨到y(tǒng)以使用不同的接口。JIT編譯器可以用于令已安裝基礎(chǔ)應(yīng)用的空中通信符合操作系統(tǒng)的新接口。如圖35B所描述的,可以應(yīng)用這一動(dòng)態(tài)重寫(xiě)接口的方法以進(jìn)行動(dòng)態(tài)分解,或者改變接口。
應(yīng)當(dāng)注意,上述通過(guò)替換實(shí)施例實(shí)現(xiàn)與接口相同或相似的結(jié)果的情形也可以以各種方式串行、并行或與其它干預(yù)代碼組合。由此,上文呈現(xiàn)的替換實(shí)施例并非相互窮盡,并且可以被混合、匹配和組合以產(chǎn)生與圖30A和30B中所呈現(xiàn)的一般情形相同或等效的情形。也應(yīng)當(dāng)注意,如同大多數(shù)編程構(gòu)造,本發(fā)明可能未描述達(dá)到與接口相同或相似的功能的其它類(lèi)似的方式,但是它們?nèi)杂杀景l(fā)明的精神和范圍來(lái)表示,即,應(yīng)當(dāng)注意,它至少部分地是由作為接口的值的基礎(chǔ)的接口表示的功能或由其啟用的有利結(jié)果。
III.同步API在基于項(xiàng)目的硬件/軟件接口系統(tǒng)中,有若干種同步方法是可行的。
A.同步綜述對(duì)于本發(fā)明的若干實(shí)施例,并參考圖3,存儲(chǔ)平臺(tái)提供同步服務(wù)330,它(I)允許存儲(chǔ)平臺(tái)的多個(gè)實(shí)例(每個(gè)有自己的數(shù)據(jù)存儲(chǔ)302)按一組靈活的規(guī)則來(lái)同步它們的內(nèi)容的各部分,以及(ii)為第三方提供基礎(chǔ)結(jié)構(gòu)以將本發(fā)明的存儲(chǔ)平臺(tái)的數(shù)據(jù)存儲(chǔ)與實(shí)現(xiàn)專(zhuān)有協(xié)議的其它數(shù)據(jù)源同步。
存儲(chǔ)平臺(tái)到存儲(chǔ)平臺(tái)的同步在一組參與的復(fù)制品之間發(fā)生。例如參考圖3,希望在多半是在不同的計(jì)算機(jī)系統(tǒng)上運(yùn)行的存儲(chǔ)平臺(tái)的另一實(shí)例的控制下提供在存儲(chǔ)平臺(tái)300的數(shù)據(jù)存儲(chǔ)302和另一遠(yuǎn)程數(shù)據(jù)存儲(chǔ)338之間的同步。該組的總的成員資格不必在任何給定時(shí)間被任何給定復(fù)制品知道。
不同的復(fù)制可以獨(dú)立地(即并發(fā)地)作出改變。將同步過(guò)程定義成使每個(gè)復(fù)制品知道由其它復(fù)制品作出的改變。此同步能力本質(zhì)上是多主的(multi-master)(即,對(duì)等的)。
本發(fā)明的同步能力允許各復(fù)制品·確定另一復(fù)制品知道什么改變;·請(qǐng)求關(guān)于此復(fù)制品不知道的改變的信息;·傳輸關(guān)于其它復(fù)制品不知道的改變的信息;·確定兩個(gè)改變何時(shí)互相沖突;·本地應(yīng)用改變;·傳輸沖突分解到其它復(fù)制品以確保會(huì)聚性;以及·基于對(duì)沖突分解指定的政策分解沖突。
1.存儲(chǔ)平臺(tái)到存儲(chǔ)平臺(tái)的同步本發(fā)明的存儲(chǔ)平臺(tái)的同步服務(wù)300的基本應(yīng)用是同步存儲(chǔ)平臺(tái)(每個(gè)帶有它自己的數(shù)據(jù)存儲(chǔ))的多個(gè)實(shí)例。同步服務(wù)在存儲(chǔ)平臺(tái)模式級(jí)上操作(而不是在數(shù)據(jù)庫(kù)引擎314的底層表中)。因此,例如“范圍(Scope)”用于定義下面討論的同步組。
同步服務(wù)按“純改變(net change)”的原則操作。不是記錄和發(fā)送各個(gè)操作(如事務(wù)復(fù)制),同步服務(wù)而是發(fā)送這些操作的最終結(jié)果,因此常將多個(gè)操作的結(jié)果合并成單個(gè)最終結(jié)果。
同步服務(wù)通常不考慮事務(wù)邊界。換言之,若在單個(gè)事務(wù)中對(duì)存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)作出兩個(gè)改變,不保證這些改變?cè)拥貞?yīng)用到所有其它復(fù)制品上—可以示出一個(gè)改變而不示出其它改變。此原則的例外是,若在同一事務(wù)中對(duì)同一項(xiàng)目作出兩個(gè)改變,則這些改變保證被原子地發(fā)送和應(yīng)用到其它復(fù)制。因此,項(xiàng)目是同步服務(wù)的一致性單元。
a)同步(Sync)控制應(yīng)用程序任一應(yīng)用程序可連接到同步服務(wù)并啟動(dòng)sync(同步)操作。那樣的應(yīng)用程序提供執(zhí)行同步(見(jiàn)下面同步概況)所需的所有參數(shù)。那樣的應(yīng)用程序在這里被稱(chēng)為同步控制應(yīng)用程序(SCA)。
在同步兩個(gè)存儲(chǔ)平臺(tái)實(shí)例時(shí),在一側(cè)由SCA啟動(dòng)同步。該SCA通知本地同步服務(wù)與遠(yuǎn)程伙伴同步。在另一側(cè),同步服務(wù)通過(guò)由來(lái)自發(fā)起機(jī)器的同步服務(wù)發(fā)出的消息喚醒。它基于在目標(biāo)機(jī)器上存在的持久配置信息(見(jiàn)下文的映射)作出響應(yīng)。同步服務(wù)能按時(shí)間表或響應(yīng)于事件運(yùn)行。在這些情況下,實(shí)現(xiàn)時(shí)間表的同步服務(wù)成為SCA。
為啟用同步,需要采取兩個(gè)步驟。首先,模式設(shè)計(jì)者必須用合適的同步語(yǔ)義注釋存儲(chǔ)平臺(tái)模式(如下文所述的指定改變單元)。其次,同步必須在具有參與同步的存儲(chǔ)平臺(tái)的實(shí)例的所有機(jī)器上正確地配置(如下所述)。
b)模式注釋同步服務(wù)的基本概念是改變單元(Change Unit)的概念。改變單元是由存儲(chǔ)平臺(tái)個(gè)別地跟蹤的最小的模式片段。對(duì)每個(gè)改變單元,同步服務(wù)能確定自從最后一次同步以來(lái)它是被改變還是未被改變。
指定模式中的改變單元達(dá)到若干目的。首先,它確定了在線的同步服務(wù)如何羅嗦。當(dāng)在改變單元內(nèi)作出改變時(shí),整個(gè)改變單元被發(fā)送到其它復(fù)制品,因?yàn)橥椒?wù)不知道改變單元的哪部分被改變。其次,它確定了沖突檢測(cè)的粒度。當(dāng)對(duì)同一改變單元作出兩個(gè)并發(fā)的改變(這些術(shù)語(yǔ)在后繼章節(jié)中詳細(xì)定義),同步服務(wù)引起沖突;另一方面,若對(duì)不同改變單元作出并發(fā)改變,則無(wú)沖突發(fā)生,且改變被自動(dòng)地合并。第三,它嚴(yán)重地影響了由系統(tǒng)保持的元數(shù)據(jù)的量。對(duì)每個(gè)改變單元保持許多同步服務(wù)元數(shù)據(jù);因此,使改變單元更小會(huì)增加同步的額外開(kāi)銷(xiāo)。
定義改變單元需要找出正確的折衷。為此,同步服務(wù)允許模式設(shè)計(jì)者參與此過(guò)程。
在一個(gè)實(shí)施例中,同步服務(wù)不支持大于一個(gè)元素的改變單元。然而,它支持讓模式設(shè)計(jì)者指定比一個(gè)元素更小的改變單元的能力—即將一個(gè)元素的多個(gè)屬性組合到單獨(dú)的改變單元中。在該實(shí)施例中,這是使用下述句法實(shí)現(xiàn)的<Type Name=″Appointment″MajorVersion=″1″MinorVersion=″0″ExtendsType=″Base.Item″ExtendsVersion=″1″>
<Field Name=″MeetingStatus″Type=″the storage platformTypes.uniqueidentifierNullable=″False″/>
<Fileld Name=″OrganizerName″Type=″the storage platformTypes.nvarchar(512)″Nullable=″False″/>
<Filed Name=″OrganizerEmail″Type=″the storage platformTypes.nvarchar(512)″TypeMajorVersion=″1MultiValued=″True″/>
…<ChangeUnit Name=″CU_Status″>
<Field Name=″MeetingStatus″/>
</ChangeUnit>
<ChangeUnit Name=″CU_Organizer″/>
<Field Name=″OrganizerName″/>
<Field Name=″OrganizerEmail″/>
</ChangeUnit>
…</Type>
c)同步配置希望保持它們數(shù)據(jù)的某些部分同步的一組存儲(chǔ)平臺(tái)伙伴被稱(chēng)為同步共同體。雖然共同體的成員希望保持同步,它們不需要以完全相同的方式表示數(shù)據(jù);換言之,同步伙伴可轉(zhuǎn)換他們正在同步的數(shù)據(jù)。
在對(duì)等情況下,讓對(duì)等方對(duì)所有它們的伙伴維持轉(zhuǎn)換映射是不現(xiàn)實(shí)的。取代地,同步服務(wù)采取定義“共同體文件夾”的方法。共同體文件夾是代表所有共同體成員正在與之同步的假設(shè)的“共享文件夾”的抽象。
此概念最好用一例子說(shuō)明。若Joe希望保持他的若干計(jì)算機(jī)的My Documents(我的文檔)文件夾同步,Joe定義一共同體文件夾,如稱(chēng)為JoeDocuments。隨后在每臺(tái)計(jì)算機(jī)上,Joe在假設(shè)的JoeDocuments文件夾和本地My Documents文件夾之間配置一映射。從這點(diǎn)出發(fā),當(dāng)Joe的計(jì)算機(jī)彼此同步時(shí),它們借助JoeDocuments中的文檔而不是它們的本地項(xiàng)目來(lái)交談。以此方法,所有Joe的計(jì)算機(jī)互相理解,而不必知道其它人是誰(shuí)—共同體文件夾成為同步共同體的通用語(yǔ)。
配置同步服務(wù)包括三個(gè)步驟(1)定義在本地文件夾和共同體文件夾之間的映射;(2)定義確定哪個(gè)得到同步的同步概況(如與誰(shuí)同步,以及哪個(gè)子集應(yīng)當(dāng)被發(fā)送、哪個(gè)被接收);以及(3)定義不同的同步概況應(yīng)當(dāng)運(yùn)行的時(shí)間表,或手動(dòng)運(yùn)行它們。
(1)共同體文件夾—映射共同體文件夾映射作為XML配置文件被存儲(chǔ)在個(gè)別機(jī)器上。每個(gè)映射具有以下模式/mappings/communityFolder此元素命名映射的共同體文件夾。名字遵循文件夾的句法規(guī)則。
/mappings/localFolder此元素命名映射所轉(zhuǎn)換到的本地文件夾。此名字遵循文件夾的句法規(guī)則。為了映射有效,文件夾必須已存在。此文件夾中的項(xiàng)目被看作對(duì)每一此映射的同步。
/mappings/transformations此元素定義如何將項(xiàng)目從共同體文件夾轉(zhuǎn)換到本地文件夾以及如何反向轉(zhuǎn)換。若缺少或?yàn)榭?,不?zhí)行轉(zhuǎn)換。具體說(shuō)來(lái),這意味著無(wú)ID被映射。此配置主要用于創(chuàng)建文件夾的高速緩存。
/mappings/transformations/mapIDs此元素請(qǐng)求新生成的本地ID被賦予所有從共同體文件夾映射的項(xiàng)目,而不是重新使用共同體ID。同步運(yùn)行庫(kù)維護(hù)ID映射,以來(lái)回轉(zhuǎn)換項(xiàng)目。
/mappings/transformations/localRoot此元素請(qǐng)求共同體文件夾中的所有根項(xiàng)目作為指定根的子項(xiàng)目。
/mappings/runAs此元素控制,在誰(shuí)的授權(quán)下處理針對(duì)此映射的請(qǐng)求。若不存在,則假設(shè)發(fā)送者。
/mappings/runAs/sender存在此元素表明,對(duì)此映射的消息發(fā)送者必須是人格化的,且在他的憑證下處理請(qǐng)求。
(2)概況同步概況是分離同步所需的總的參數(shù)組。由SCA將其提供給同步運(yùn)行庫(kù)以啟動(dòng)同步。存儲(chǔ)平臺(tái)到存儲(chǔ)平臺(tái)的同步的同步概況包含以下信息·本地文件夾,用作改變的源和目標(biāo);·與之同步的遠(yuǎn)程文件夾名一此文件夾必須通過(guò)如上定義的映射從遠(yuǎn)程伙伴發(fā)布;·方向—同步服務(wù)支持只發(fā)送、只接收以及發(fā)送—接收同步;·本地過(guò)濾器—選擇發(fā)送什么本地信息到遠(yuǎn)程伙伴。表示成本地文件夾上的存儲(chǔ)平臺(tái)查詢(xún);·遠(yuǎn)程過(guò)濾器—選擇從遠(yuǎn)程伙伴接收什么遠(yuǎn)程信息—表示成共同體文件夾上的存儲(chǔ)平臺(tái)查詢(xún);·轉(zhuǎn)換—定義如何在項(xiàng)目和本地格式間轉(zhuǎn)換;·本地安全性—指定是在遠(yuǎn)程端點(diǎn)(人格化)的許可下應(yīng)用從遠(yuǎn)程端點(diǎn)檢索的改變,還是用戶(hù)在本地啟動(dòng)同步;以及·沖突分解政策—指定沖突是否應(yīng)被拒絕、記入日志或自動(dòng)分解—在后一種情況下,指定使用哪個(gè)沖突分解器以及它的配置參數(shù)。
同步服務(wù)提供允許簡(jiǎn)單構(gòu)建同步概況的運(yùn)行時(shí)CLR類(lèi)。概況可被串行化成XML文件或從XML文件串行化,以便容易存儲(chǔ)(常與時(shí)間表一起)。然而,在存儲(chǔ)平臺(tái)中沒(méi)有存儲(chǔ)所有概況的標(biāo)準(zhǔn)地方;歡迎SCA在不必永久保持的點(diǎn)上構(gòu)建概況。注意,不需要具有本地映射來(lái)啟動(dòng)同步。能在概況中指定所有同步信息。然而為響應(yīng)于由遠(yuǎn)程方啟動(dòng)的同步請(qǐng)求,需要映射。
(3)時(shí)間表在一個(gè)實(shí)施例中,同步服務(wù)不提供它自己的調(diào)度基礎(chǔ)結(jié)構(gòu)。相反,它依賴(lài)于另一組件來(lái)完成此任務(wù)—在Microsoft Windows操作系統(tǒng)中可得到的WindowsScheduler。同步服務(wù)包括命令行實(shí)用程序,它擔(dān)當(dāng)SCA并基于保存在XML文件中的同步概況觸發(fā)同步。該實(shí)用程序使得按時(shí)間表或者響應(yīng)于如用戶(hù)登錄或登出等事件來(lái)配置Windows Scheduler變得非常容易。
d)沖突處理同步服務(wù)中的沖突處理被劃分成三個(gè)階段(1)發(fā)生在改變應(yīng)用時(shí)的沖突檢測(cè)—此步驟判斷是否可安全地應(yīng)用改變;(2)自動(dòng)沖突分解并記入日志—在此步驟(發(fā)生在緊接著沖突檢測(cè)之后)資訊自動(dòng)沖突分解器)(或“沖突處理器”),以查看沖突是否能被分解—若不能,可任選地將沖突記入日志;以及(3)沖突檢查與分解—若某些沖突已被記入日志,且發(fā)生在同步會(huì)話之外,則采取此步驟一此時(shí),被記入日志的沖突能被分解并從日志中移除。針對(duì)沖突處理的本發(fā)明的各實(shí)施例將在后文第III節(jié)中更詳細(xì)地討論。
2.對(duì)非存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)的同步按本發(fā)明的存儲(chǔ)平臺(tái)的另一方面,存儲(chǔ)平臺(tái)提供ISV用于實(shí)現(xiàn)同步適配器的體系結(jié)構(gòu),同步適配器使存儲(chǔ)平臺(tái)能與如Microsoft Exchange、AD、Hotmail等傳統(tǒng)系統(tǒng)同步。同步適配器得益于由下述同步服務(wù)提供的許多同步服務(wù)。
不管其名稱(chēng)如何,同步適配器不需要作為某個(gè)存儲(chǔ)平臺(tái)體系結(jié)構(gòu)的插件來(lái)實(shí)現(xiàn)。在需要時(shí),“同步適配器”能簡(jiǎn)單地是利用同步服務(wù)運(yùn)行庫(kù)接口來(lái)獲得如改變枚舉和應(yīng)用等服務(wù)的任何應(yīng)用程序。
為了使其他人能更容易地配置和運(yùn)行到給定后端(backend)的同步,鼓勵(lì)同步適配器的編寫(xiě)者展現(xiàn)標(biāo)準(zhǔn)同步適配器接口,它在給定上述的同步概況時(shí)運(yùn)行同步。概況提供配置信息給適配器,某些適配器傳送到同步運(yùn)行庫(kù)以控制運(yùn)行庫(kù)服務(wù)(如,要同步的文件夾)。
a)同步服務(wù)同步服務(wù)向適配器編寫(xiě)者提供若干同步服務(wù)。在本節(jié)余下部分,方便地將存儲(chǔ)平臺(tái)在其上做同步的機(jī)器稱(chēng)為“客戶(hù)機(jī)”,而適配器正與其對(duì)話的非存儲(chǔ)平臺(tái)后端稱(chēng)為“服務(wù)器”。
(1)改變枚舉基于由同步服務(wù)維持的改變跟蹤數(shù)據(jù),改變枚舉允許同步適配器容易地枚舉自從最后一次與該伙伴試圖作出同步以來(lái)對(duì)數(shù)據(jù)存儲(chǔ)文件夾發(fā)生的改變。
基于“錨位(anchor)”的概念來(lái)枚舉改變—這是表示有關(guān)最后一次同步的信息的不透明的結(jié)構(gòu)。如以前章節(jié)所述,錨位采取存儲(chǔ)平臺(tái)知識(shí)的形式。利用改變枚舉服務(wù)的同步適配器落入兩大類(lèi)別使用“存儲(chǔ)的錨位”的適配器和使用“提供的錨位”的適配器。
區(qū)別基于關(guān)于最后一次同步的信息存儲(chǔ)在哪里—在客戶(hù)機(jī)上或在服務(wù)器上。適配器常常容易地存儲(chǔ)此信息在客戶(hù)機(jī)上—后端往往不能容易地存儲(chǔ)此信息。另一方面,若多個(gè)客戶(hù)機(jī)與同一后端同步,則將此信息存儲(chǔ)在客戶(hù)機(jī)上是低效且在某些情況下是不正確的—這使一個(gè)客戶(hù)機(jī)不知道其它客戶(hù)機(jī)已推到服務(wù)器的改變。若適配器希望使用服務(wù)器存儲(chǔ)的錨位,則適配器需要在改變枚舉時(shí)將其送回到存儲(chǔ)平臺(tái)。
為了讓存儲(chǔ)平臺(tái)維護(hù)錨位(用于本地或遠(yuǎn)程存儲(chǔ)),存儲(chǔ)平臺(tái)需要知道成功地應(yīng)用在服務(wù)器上的改變。這些且只有這些改變能包括在錨位中。在改變枚舉期間,同步適配器使用確認(rèn)(Acknowledgement)接口,以報(bào)告哪個(gè)改變已被成功地應(yīng)用。在同步結(jié)束時(shí),使用提供的錨位的適配器必須讀出新錨位(它集合所有成功應(yīng)用的改變)并將其發(fā)送到它們的后端。
各適配器常常需要存儲(chǔ)適配器專(zhuān)用數(shù)據(jù)以及插入到存儲(chǔ)平臺(tái)數(shù)據(jù)存儲(chǔ)中的各項(xiàng)目。該數(shù)據(jù)存儲(chǔ)的常見(jiàn)例子是遠(yuǎn)程ID和遠(yuǎn)程版本(時(shí)間標(biāo)記)。同步服務(wù)提供用于存儲(chǔ)此數(shù)據(jù)的機(jī)制,而改變枚舉提供接收此額外數(shù)據(jù)以及要返回的改變的機(jī)制。在大多數(shù)情況下,這消除了適配器重新查詢(xún)數(shù)據(jù)庫(kù)的需求。
(2)改變應(yīng)用改變應(yīng)用允許同步適配器將從它們的后端接收的改變應(yīng)用到本地存儲(chǔ)平臺(tái)。期望適配器將改變轉(zhuǎn)換到存儲(chǔ)平臺(tái)模式。圖24示出從存儲(chǔ)平臺(tái)模式生成存儲(chǔ)平臺(tái)API類(lèi)的過(guò)程。
改變應(yīng)用的主要功能是自動(dòng)檢測(cè)沖突。如在存儲(chǔ)平臺(tái)到存儲(chǔ)平臺(tái)同步的情況下,沖突被定義成在互相不知道時(shí)作出的兩個(gè)重疊的改變。當(dāng)適配器使用改變應(yīng)用時(shí),它們必須指定對(duì)其執(zhí)行沖突檢測(cè)的錨位。若檢測(cè)到未被適配器的知識(shí)覆蓋的重疊的本地改變,則改變應(yīng)用引起沖突。類(lèi)似于改變枚舉,適配器可使用存儲(chǔ)的或提供的錨位。改變應(yīng)用支持適配器專(zhuān)用元數(shù)據(jù)的有效存儲(chǔ)。那樣的數(shù)據(jù)可由適配器將其附加到要應(yīng)用的改變上,且可被同步服務(wù)存儲(chǔ)。數(shù)據(jù)可在下次改變枚舉時(shí)返回。
(3)沖突分解以下在IV中描述的沖突分解機(jī)制(包括記入日志和自動(dòng)分解選項(xiàng))也對(duì)同步適配器可用。在應(yīng)用改變時(shí),同步適配器能指定用于沖突分解的政策。若指定了,沖突可被傳遞到指定的沖突處理程序并予以分解(若可能)。沖突也能被記入日志。當(dāng)試圖將本地改變應(yīng)用到后端時(shí),適配器有可能檢測(cè)沖突。在那樣情況下,適配器仍可以將沖突傳遞到同步運(yùn)行庫(kù),以按政策分解。此外,同步適配器可請(qǐng)求任何由同步服務(wù)檢測(cè)的沖突發(fā)回給它們以便處理。在后端能存儲(chǔ)或分解沖突的情況這特別方便。
b)適配器實(shí)現(xiàn)雖然某些“適配器”簡(jiǎn)單地是利用運(yùn)行庫(kù)接口的應(yīng)用程序,然而鼓勵(lì)適配器實(shí)現(xiàn)標(biāo)準(zhǔn)的適配器接口。這些接口允許同步控制應(yīng)用程序請(qǐng)求適配器按給定的同步概況執(zhí)行同步;取消正進(jìn)行的同步;以及接收關(guān)于正進(jìn)行同步的進(jìn)展報(bào)告(完成百分比)。
3.安全性同步服務(wù)努力將盡可能少的同步引入到由存儲(chǔ)平臺(tái)實(shí)現(xiàn)的安全模式。不是去定義對(duì)同步新的權(quán)限,而是使用現(xiàn)有的權(quán)限。具體地,·能讀數(shù)據(jù)存儲(chǔ)項(xiàng)目的任何人可枚舉對(duì)那個(gè)項(xiàng)目的改變;·能寫(xiě)到數(shù)據(jù)存儲(chǔ)項(xiàng)目的任何人可應(yīng)用改變到該項(xiàng)目;以及·能擴(kuò)展數(shù)據(jù)存儲(chǔ)項(xiàng)目的任何人可將同步元數(shù)據(jù)與該項(xiàng)目關(guān)聯(lián)。
同步服務(wù)不維護(hù)安全授權(quán)信息。當(dāng)在復(fù)制品A由用戶(hù)U作出改變,且將其轉(zhuǎn)發(fā)到復(fù)制品B時(shí),該改變最初在A處(由U)作出的事實(shí)丟失了。若B將此改變轉(zhuǎn)發(fā)到復(fù)制品C,則這是在B的授權(quán)而不是在A的授權(quán)下完成的。這就導(dǎo)致下述限制若不信任一個(gè)復(fù)制品對(duì)一個(gè)項(xiàng)目作出它自己的改變,它不能轉(zhuǎn)發(fā)由其它復(fù)制品作出的改變。
在啟動(dòng)同步服務(wù)時(shí),由同步控制應(yīng)用程序完成。同步服務(wù)人格化SCA的身份,并在該身份下完成所有操作(本地的和遠(yuǎn)程的)。作為說(shuō)明,觀察到用戶(hù)U不能使本地同步服務(wù)從遠(yuǎn)程存儲(chǔ)平臺(tái)檢索對(duì)用戶(hù)U不具有讀訪問(wèn)的項(xiàng)目的改變。
4.可管理性監(jiān)視復(fù)制品的分布式共同體是復(fù)雜的問(wèn)題。同步服務(wù)可使用“掃描(sweep)”算法來(lái)收集和分發(fā)關(guān)于該復(fù)制品的狀態(tài)的信息。掃描算法的屬性確保關(guān)于所有所配置的復(fù)制品的信息最終被收集,且檢測(cè)到該失敗(無(wú)響應(yīng))的復(fù)制品。
在每個(gè)復(fù)制品上可得到共同體范圍的監(jiān)視信息。可在任意選取的復(fù)制品上運(yùn)行監(jiān)視工具,以檢查此監(jiān)視信息并作出管理決策。在受影響的復(fù)制品上必須直接作出配置改變。
B.同步API綜述在越來(lái)越多地分布式的、數(shù)字的世界中,個(gè)體和工作站常常將信息和數(shù)據(jù)存儲(chǔ)在多種不同的設(shè)備和位置中。這就推動(dòng)了數(shù)據(jù)同步服務(wù)的發(fā)展,在最小限度的用戶(hù)干預(yù)的情況下,所述數(shù)據(jù)同步服務(wù)可以將所述信息保存在這些單獨(dú)的、常常完全各不相同的在所有時(shí)間上都被同步了的數(shù)據(jù)存儲(chǔ)中。
本發(fā)明的同步平臺(tái),作為此處的節(jié)II(又稱(chēng),“WinFS”)中所描述的豐富的存儲(chǔ)平臺(tái)的一部分,解決了3個(gè)主要任務(wù)·允許應(yīng)用和服務(wù)有效地同步不同“WinFS”的存儲(chǔ)之間的數(shù)據(jù)。
·允許開(kāi)發(fā)者創(chuàng)建用于同步“WinFS”和非“WinFS”存儲(chǔ)之間的數(shù)據(jù)的富有成果的方法。
·為開(kāi)發(fā)者提供適當(dāng)?shù)慕涌谝员愣ㄖ仆接脩?hù)經(jīng)歷。
1.一般術(shù)語(yǔ)在此,下面是與后面的討論此處是節(jié)III.B有關(guān)的一些進(jìn)一步規(guī)定的定義和關(guān)鍵概念同步復(fù)制品大多數(shù)應(yīng)用只對(duì)跟蹤、枚舉和同步用于WinFS存儲(chǔ)內(nèi)的項(xiàng)目的給定子集的改變。將參與同步操作的項(xiàng)目的集合稱(chēng)為同步復(fù)制品。復(fù)制品是用被包含在給定的WinFS包含層內(nèi)的項(xiàng)目(通常是作為位于文件夾項(xiàng)目上的根)來(lái)定義的。所有同步服務(wù)都在給定的復(fù)制品的環(huán)境內(nèi)實(shí)現(xiàn)。WinFS同步提供了規(guī)定、管理和清除復(fù)制品的機(jī)制。各個(gè)復(fù)制品具有唯一地標(biāo)識(shí)給定WinFS存儲(chǔ)內(nèi)的復(fù)制品的GUID標(biāo)識(shí)符。
同步伙伴同步伙伴被規(guī)定為能夠影響在WinFS項(xiàng)目、擴(kuò)展和關(guān)系上的改變的實(shí)體。因此,各個(gè)WinFS存儲(chǔ)可以被稱(chēng)為同步伙伴。當(dāng)與非WinFS存儲(chǔ)同步時(shí),外部數(shù)據(jù)源(EDS)也被稱(chēng)作同步伙伴。各個(gè)伙伴具有唯一地標(biāo)識(shí)它的GUID標(biāo)識(shí)符。
同步共同體同步共同體被規(guī)定為復(fù)制品的集合,采用對(duì)等同步操作的方式,同步地保存所述復(fù)制品的集合。這些復(fù)制品可以全部都是位于相同的WinFS存儲(chǔ)、不同的WinFS存儲(chǔ)中,或者甚至將它們清楚表示為非WinFS存儲(chǔ)上的虛擬復(fù)制品。特別地如果共同體中只有同步操作是通過(guò)WinFS同步服務(wù)(WinFS適配器)的,則WinFS同步并不指定或委托用于所述共同體的任何專(zhuān)用拓?fù)?。同步適配器(下面規(guī)定的)可以引入其自己的拓?fù)浼s束。
改變跟蹤、改變單元和版本各個(gè)WinFS存儲(chǔ)跟蹤對(duì)所有本地WinFS項(xiàng)目、擴(kuò)展和關(guān)系的改變。在所述模式中所規(guī)定的改變單位粒度(granularity)的等級(jí)上,跟蹤改變。采用作為一個(gè)頂級(jí)字段的最小粒度,任何項(xiàng)目、擴(kuò)展和關(guān)系類(lèi)型的頂級(jí)字段可以由模式設(shè)計(jì)者子劃分為改變單元。為了改變跟蹤的目的,每個(gè)改變單元被分配一個(gè)版本,其中版本是一對(duì)同步伙伴Id和版本號(hào)(所述版本號(hào)是伙伴專(zhuān)用的單調(diào)增加的數(shù)字)。按照本地發(fā)生在所述存儲(chǔ)中的或者按照它們從其它復(fù)制品中獲得的改變,更新版本。
同步知識(shí)知識(shí)表示在任意時(shí)間給出同步復(fù)制品的狀態(tài),即它封裝與給定的復(fù)制品本地知道的或者是從其它復(fù)制品中知道的所有改變有關(guān)的元數(shù)據(jù)。WinFS同步保存并且更新用于跨同步操作的同步復(fù)制品的知識(shí)。要注意的重要的事情是,知識(shí)表示允許它相對(duì)整個(gè)共同體進(jìn)行解釋而不是只相對(duì)于與知識(shí)被存儲(chǔ)的特定復(fù)制品進(jìn)行解釋。
同步適配器同步適配器是受管理的編碼應(yīng)用,它通過(guò)同步例程API訪問(wèn)WinFS同步服務(wù),并且使WinFS數(shù)據(jù)與非WinFS數(shù)據(jù)存儲(chǔ)同步。依賴(lài)于情況的需要,關(guān)于WinFS數(shù)據(jù)的哪個(gè)子集和什么WinFS數(shù)據(jù)類(lèi)型進(jìn)行同步,取決于適配器開(kāi)發(fā)者。所述適配器負(fù)責(zé)與EDS進(jìn)行通信、向和從支持模式的EDS傳送WinFS模式、以及規(guī)定并管理其自己的配置和元數(shù)據(jù)。強(qiáng)烈鼓勵(lì)適配器實(shí)現(xiàn)WinFS同步適配器,以便具有普通配置和控制用于由WinFS同步組所提供的適配器的底層結(jié)構(gòu)的優(yōu)點(diǎn)。對(duì)于更多的細(xì)節(jié),請(qǐng)參見(jiàn)WinFS同步適配器API專(zhuān)刊[SADP]和WinFS同步控制器API[SCTRL]專(zhuān)刊。
對(duì)于使WinFS數(shù)據(jù)與外部的非WinFS存儲(chǔ)同步并且不能以WinFS格式產(chǎn)生或保存知識(shí)的適配器,WinFS同步提供了保存遠(yuǎn)程知識(shí)的服務(wù),所述遠(yuǎn)程知識(shí)能夠被用于后來(lái)的改變枚舉或應(yīng)用操作。依賴(lài)于后端存儲(chǔ)的能力,所述適配器可以希望在所述后端上或者在本地WinFS存儲(chǔ)上存儲(chǔ)這種遠(yuǎn)程知識(shí)。
為簡(jiǎn)單起見(jiàn),同步“復(fù)制品”是一種結(jié)構(gòu),它表示“WinFS”存儲(chǔ)中存在于單個(gè)本地位置中的一組數(shù)據(jù),然而,非WinFS存儲(chǔ)上的數(shù)據(jù)被稱(chēng)作“數(shù)據(jù)源”,并且一般要求使用適配器。
遠(yuǎn)程知識(shí)當(dāng)給定的同步復(fù)制品希望獲得來(lái)自另一個(gè)復(fù)制品的改變時(shí),它提供其自己的知識(shí)作為一種基線,根據(jù)基線,其它復(fù)制品枚舉改變。類(lèi)似地,當(dāng)給定的復(fù)制品希望將改變發(fā)送給另一個(gè)復(fù)制品時(shí),它提供其自己的知識(shí)作為基線,所述基線可以由遠(yuǎn)程復(fù)制品用于檢測(cè)沖突。在同步改變枚舉和應(yīng)用期間提供的與其它復(fù)制品有關(guān)的這種知識(shí)被稱(chēng)為遠(yuǎn)程知識(shí)。
2.同步API主體對(duì)于某些實(shí)施例,所述同步API分割成兩部分同步配置API和同步控制器API。同步配置API允許應(yīng)用配置同步,并且指定參數(shù)用于兩個(gè)復(fù)制品之間的特定同步會(huì)話。對(duì)于給定的同步會(huì)話,配置參數(shù)包括將被同步的項(xiàng)目的集合、同步的類(lèi)型(單向或雙向)、與遠(yuǎn)程數(shù)據(jù)源有關(guān)的信息、以及沖突分解策略。同步控制器API啟動(dòng)同步會(huì)話,取消同步,以及接收處理和與正在進(jìn)行的同步有關(guān)的錯(cuò)誤信息。還有,對(duì)于特定的實(shí)施例,其中同步需要根據(jù)預(yù)定的調(diào)度執(zhí)行,這種系統(tǒng)可以包括調(diào)度定制調(diào)度表的機(jī)制。
本發(fā)明的多個(gè)實(shí)施例使用同步適配器以便同步“WinFS”和非“WinFS”數(shù)據(jù)源之間的信息。適配器的例子包括同步“WinFS”沖突文件夾和非WinFS郵箱之間的地址簿信息的適配器。在這些情況下,為了開(kāi)發(fā)“WinFS”模式和非“WinFS”數(shù)據(jù)源模式之間的模式轉(zhuǎn)換編碼,適配器開(kāi)發(fā)者可以使用此處所描述的“WinFS”同步核心服務(wù)API以便訪問(wèn)由“WinFS”同步平臺(tái)所提供的服務(wù)。此外,適配器開(kāi)發(fā)者提供了用于將改變與非“WinFS”數(shù)據(jù)源進(jìn)行通信的協(xié)議支持。通過(guò)使用同步控制器API調(diào)用并控制同步適配器,并且使用這種API報(bào)告進(jìn)度和錯(cuò)誤。
然而,對(duì)于本發(fā)明的某些實(shí)施例,當(dāng)“WinFS”數(shù)據(jù)存儲(chǔ)與另一個(gè)“WinFS”數(shù)據(jù)存儲(chǔ)同步時(shí),如果“WinFS”對(duì)“WinFS”同步服務(wù)被集成在硬件/軟件接口系統(tǒng)內(nèi),則同步適配器可以不是必需的。在任何情況下,多個(gè)這樣的實(shí)施例提供了用于“WinFS”對(duì)“WinFS”以及同步適配器方法兩者的一組同步服務(wù),所述同步適配器方法包括·對(duì)“WinFS”項(xiàng)目、擴(kuò)展和關(guān)系的改變的跟蹤。
·用于自給定的過(guò)去的狀態(tài)開(kāi)始的有效遞增的改變枚舉的支持。
·對(duì)“WinFS”的外部改變的應(yīng)用。
·在改變應(yīng)用期間的沖突處理。
參見(jiàn)圖36,示出了普通數(shù)據(jù)存儲(chǔ)和用于同步它們的組件的3個(gè)實(shí)例。第一系統(tǒng)3602具有WinFS數(shù)據(jù)存儲(chǔ)3612,所述WinFS數(shù)據(jù)存儲(chǔ)3612包括WinFS對(duì)WinFS同步服務(wù)3622和核心同步服務(wù)3624,用于WinFS對(duì)非WinFS同步,它公開(kāi)了3646用于使用的同步API3652。類(lèi)似于第一系統(tǒng)3602,第二系統(tǒng)3604具有WinFS數(shù)據(jù)存儲(chǔ)3614,所述WinFS數(shù)據(jù)存儲(chǔ)3614包括WinFS對(duì)WinFS同步服務(wù)3632和核心同步服務(wù)3634,用于WinFS對(duì)非WinFS同步,它公開(kāi)了3646用于使用的同步API3652。第一系統(tǒng)3602和第二系統(tǒng)3604通過(guò)其各自的WinFS對(duì)WinFS同步服務(wù)3622和3632進(jìn)行同步3642。第三系統(tǒng)3606,不是WinFS系統(tǒng),它具有用于使用WinFS同步3666將數(shù)據(jù)源保存在具有WinFS復(fù)制品的同步共同體中的應(yīng)用。這種應(yīng)用可以使用WinFS同步配置/控制服務(wù)3664,以便通過(guò)WinFS對(duì)WinFS同步服務(wù)3622(如果它能將自身虛擬化為WinFS數(shù)據(jù)存儲(chǔ)),或者通過(guò)提供與同步API3652的接口3648的同步適配器3662,直接提供與WinFS數(shù)據(jù)存儲(chǔ)3612的接口3644。
如在此圖中所示的,第一系統(tǒng)3602知道并且直接同步第二系統(tǒng)3604和第三系統(tǒng)3606。然而,第二系統(tǒng)3604和第三系統(tǒng)3606彼此并不知道,并且因此,并不直接彼此同步它們的改變,但是,相反,一個(gè)系統(tǒng)上發(fā)生的改變必須通過(guò)第一系統(tǒng)3602傳播。
C.同步API服務(wù)本發(fā)明的多個(gè)實(shí)施例被指向同步服務(wù),所述同步服務(wù)包括兩個(gè)基礎(chǔ)服務(wù)改變枚舉和改變應(yīng)用。
1.改變枚舉如此處較早之前討論的,改變枚舉允許同步適配器很容易地枚舉改變,所述改變是,自基于由同步服務(wù)所保存的改變跟蹤數(shù)據(jù),企圖與這個(gè)伙伴的同步的最后時(shí)刻開(kāi)始的數(shù)據(jù)存儲(chǔ)文件夾上已經(jīng)發(fā)生的改變。就改變枚舉而言,針對(duì)本發(fā)明的多個(gè)實(shí)施例對(duì)給定復(fù)制品中與被指定的知識(shí)實(shí)例有關(guān)的項(xiàng)目、擴(kuò)展和關(guān)系的改變的有效枚舉。
·在被指定于WinFS模式中的改變單元粒度的等級(jí)上的改變的枚舉·依據(jù)復(fù)合項(xiàng)目的被枚舉的改變的組。復(fù)合項(xiàng)目包括項(xiàng)目、所有其擴(kuò)展、與所述項(xiàng)目的所有保持關(guān)系、以及對(duì)應(yīng)于其被嵌入的項(xiàng)目的所有復(fù)合項(xiàng)目。引用項(xiàng)目之間的關(guān)系的改變可以被分別枚舉。
·與改變枚舉有關(guān)的分類(lèi)。所述分類(lèi)的粒度是復(fù)合項(xiàng)目或者關(guān)系改變(用于引用關(guān)系)。
·在改變枚舉期間對(duì)復(fù)制品中的項(xiàng)目的過(guò)濾的指定,例如所述復(fù)制品包括給定文件夾中的所有項(xiàng)目,但是對(duì)于這種特殊的改變枚舉,所述應(yīng)用愿意只枚舉對(duì)所有聯(lián)系項(xiàng)目的改變,其中第一名稱(chēng)以“A”開(kāi)始(這種支持將被添加至B-里程碑)。
·用于被枚舉的改變的遠(yuǎn)程知識(shí)的使用,具有將個(gè)別改變單元(或者整個(gè)項(xiàng)目、擴(kuò)展或關(guān)系)記錄為在知識(shí)上同步失敗的能力,以便下一次重新枚舉時(shí)具有它們。
·改進(jìn)的適配器的使用,所述改進(jìn)的適配器也許能夠通過(guò)在改變枚舉期間隨著改變一起返回元數(shù)據(jù),了解WinFS同步元數(shù)據(jù)。
2.改變應(yīng)用如此處較早所討論的,改變應(yīng)用允許同步適配器將從它們的后端接收到的改變應(yīng)用到本地存儲(chǔ)平臺(tái),因?yàn)橄M鲞m配器將所述改變轉(zhuǎn)換成存儲(chǔ)平臺(tái)模式。就改變應(yīng)用而言,本發(fā)明的多個(gè)實(shí)施例被指導(dǎo)·具有對(duì)應(yīng)于WinFS改變?cè)獢?shù)據(jù)的更新的來(lái)自其它復(fù)制品(或非WinFS存儲(chǔ))中的遞增的改變的應(yīng)用。
·在改變單元粒度上的與改變應(yīng)用有關(guān)的沖突檢測(cè)。
·在改變應(yīng)用上的個(gè)別改變單元級(jí)上成功、失敗以及沖突的報(bào)告,以便應(yīng)用(包括適配器和同步控制應(yīng)用)可以使用要處理的那些信息、錯(cuò)誤和狀態(tài)報(bào)告,并且用于更新它們的后端狀態(tài),如果有的話。
·在改變應(yīng)用期間遠(yuǎn)程知識(shí)的更新,以便防止在下一個(gè)改變枚舉操作期間被提供改變的應(yīng)用的“沖突”。
·改進(jìn)的適配器的使用,所述改進(jìn)的適配器可以隨著改變一起了解并提供WinFS同步元數(shù)據(jù)。
3.示例代碼下面是用于FOO同步適配器如何可以與同步例程進(jìn)行交互的編碼示例(其中采用FOO作為所有適配器的專(zhuān)用函數(shù)的前綴)ItemContext ctx=new ItemContext(“\.\System\UserData\dshah\MyContacts”,true);∥從概況獲得復(fù)制品項(xiàng)目id和遠(yuǎn)程伙伴id
∥大多數(shù)適配器從同步概況獲得此信息Guid replicaItemId=FOO_GetReplicaId();Guid remotePartnerId=FOO_Get_RemotePartnerId();∥∥使用如上所述的storedKnowledgeId查找存儲(chǔ)中所儲(chǔ)存的知識(shí).
∥ReplicaKnowledge remoteKnowledge=...;∥∥初始化ReplicaSynchronizer∥ctx.ReplicaSynchronizer=new ReplicaSynchronizer(replicaItemId,remotePartnerId);ctx.ReplicaSynchronizer.RemoteKnowledge=remoteKnowledge;ChangeReader reader=ctx.ReplicaSynchronizer.GetChangeReader();∥∥枚舉改變并處理它們∥bool bChangesToRead=true;while(bChangesToRead){ChangeCollection<object>changes=null;bChangesToRead=reader.ReadChanges(10,out changes);foreach(object change in changes){∥處理所枚舉的對(duì)象,適配器完成其自己的模式轉(zhuǎn)換以及ID映射
∥它甚至可為此目的從Ctx檢索附加對(duì)象,∥并在向遠(yuǎn)程存儲(chǔ)應(yīng)用改變之后修改適配器元數(shù)據(jù)∥ChangeStatus status=FOOProcessAndApplyToRemoteStore(change);∥用狀態(tài)更新獲知的知識(shí)reader.AcknowledgeChange(changeStatus);}}remoteKnowledge=ctx.ReplicaSynchronizer.GetUpdatedRemoteKnowledge();reader.Close();∥∥保存更新的知識(shí)和適配器元數(shù)據(jù)(如果有的話)∥ctx.Update();∥∥改變應(yīng)用的示例,首先使用如上所述的storedKnowledgeId∥初始化遠(yuǎn)程知識(shí)∥remoteKnowledge=...;ctx.ReplicaSynchronizer.ConflictPolicy=conflictPolicy;ctx.ReplicaSynchronizer.RemotePartnerId=remotePartnerId;ctx.ReplicaSynchronizer.RemoteKnowledge=remoteKnowledge;ctx.ReplicaSynchronizer.ChangeStatusEvent+=FOO_OnChangeStatusEvent;
∥∥從遠(yuǎn)程存儲(chǔ)獲得改變。適配器負(fù)責(zé)從存儲(chǔ)檢索其后端專(zhuān)用元數(shù)據(jù)。
∥這可以是在復(fù)制品上的擴(kuò)展∥∥object remoteAnchor=FOO_GetRemoteAnchorFromStore();FOO_RemoteChangeCollection remoteChanges=FOO_GetRemoteChanges(remoteAnchor);∥∥填充改變集合∥foreach(FOO_RemoteChange change in remoteChanges){∥適配器負(fù)責(zé)完成ID映射Guid localId=FOO_MapRemoteId(change);∥可以認(rèn)為正在同步個(gè)人對(duì)象ItemSearcher searcher=Person.GetSearcher(ctx);searcher.Filters.Add(“PersonId=@localId”);searcher.Parameters[“PersonId”]=localId;Person person=searcher.FindOne();∥∥適配器將遠(yuǎn)程改變轉(zhuǎn)換成對(duì)個(gè)人對(duì)象的修改∥作為其一部分,適配器甚至可對(duì)遠(yuǎn)程對(duì)象的∥項(xiàng)目級(jí)后端專(zhuān)用元數(shù)據(jù)作出改變。
∥FOO_TransformRemoteToLocal(remoteChange,person);
}ctx.Update();∥∥保存新的錨位(這可以是復(fù)制品的擴(kuò)展)∥FOO_SaveRemoteAnchor();∥∥這是自從遠(yuǎn)程知識(shí)未同步以來(lái)常規(guī)的WinFS API保存∥remoteKnowledge=ctx.ReplicaSynchronizer.GetUpdatedRemoteKnowledge();ctx.Update();ctx.Close();∥∥適配器回叫以處理應(yīng)用程序狀態(tài)回叫∥void FOO_OnEntitySaved(object sender,ChangeStatusEventArgs args){remoteAnchor.AcceptChange(args.ChangeStatus);}4.API同步的方法在本發(fā)明的一個(gè)實(shí)施例中,通過(guò)由基于WinFS的硬件/軟件接口系統(tǒng)所公開(kāi)的同步API,可以實(shí)現(xiàn)WinFS存儲(chǔ)和非WinFS存儲(chǔ)之間的同步。
在一個(gè)實(shí)施例中,要求所有同步適配器實(shí)現(xiàn)同步適配器API、由API管理的公共語(yǔ)言運(yùn)行庫(kù)(CLR),以便它們可以被一致使用、啟動(dòng)和控制。所述適配器API提供·用于隨著硬件/軟件接口系統(tǒng)同步框架的寄存適配器的標(biāo)準(zhǔn)機(jī)制。
·用于適配器表示它們的性能和啟動(dòng)所述適配器所需的配置信息的類(lèi)型的標(biāo)準(zhǔn)機(jī)制。
·用于將啟動(dòng)信息傳遞給所述適配器的標(biāo)準(zhǔn)機(jī)制。
·用于適配器將過(guò)程狀態(tài)報(bào)告回調(diào)用應(yīng)用的應(yīng)用的機(jī)制。
·報(bào)告在同步期間發(fā)生的任何錯(cuò)誤的機(jī)制。
·請(qǐng)求正在進(jìn)行的同步操作的取消的機(jī)制。
根據(jù)情況的需要,存在兩種可能的用于適配器的處理模型。所述適配器可以在與調(diào)用應(yīng)用的應(yīng)用相同的處理空間中或者全部在它本身單獨(dú)的處理中執(zhí)行。為了在其自己?jiǎn)为?dú)的處理中執(zhí)行,所述適配器規(guī)定了其自己的工廠(factory)類(lèi),所述工廠類(lèi)被用于例示所述適配器。所述工廠可以在與調(diào)用應(yīng)用相同的處理中返回所述適配器的實(shí)例,或者在不同的Microsoft公共語(yǔ)言例程應(yīng)用范圍或處理中返回所述適配器的遠(yuǎn)程實(shí)例。默認(rèn)的工廠實(shí)現(xiàn)被提供有在相同處理中哪個(gè)例示所述適配器。實(shí)際上,許多適配器將在與調(diào)用應(yīng)用相同的處理中運(yùn)行。出于以下原因中的一個(gè)或兩個(gè),通常要求有處理模型的輸出·安全目的。所述適配器必須在某個(gè)處理或服務(wù)的過(guò)程空間中運(yùn)行。
·所述適配器必須處理來(lái)自其它源的請(qǐng)求——例如,收入網(wǎng)絡(luò)請(qǐng)求——除了處理來(lái)自調(diào)用應(yīng)用的請(qǐng)求之外。
參見(jiàn)圖37,本發(fā)明的一個(gè)實(shí)施例假設(shè)了一個(gè)簡(jiǎn)單的適配器,它不知道如何計(jì)算狀態(tài)或者如何交換其相關(guān)元數(shù)據(jù)。在這個(gè)實(shí)施例中,就想要同步的數(shù)據(jù)源而言,首先,在步驟3702,確定自它與所述數(shù)據(jù)源最后同步開(kāi)始哪些改變已經(jīng)發(fā)生,通過(guò)所述復(fù)制品實(shí)現(xiàn)同步,并且然后所述復(fù)制品基于其當(dāng)前狀態(tài)信息傳輸自這個(gè)最后的同步開(kāi)始已經(jīng)發(fā)生的遞增的改變,并且這種當(dāng)前狀態(tài)信息和遞增的改變通過(guò)所述適配器傳輸給所述數(shù)據(jù)源。在步驟3704,所述適配器,一旦在之前步驟中接收到來(lái)自所述復(fù)制品的改變,就盡可能多地實(shí)現(xiàn)對(duì)數(shù)據(jù)源的改變,跟蹤哪些改變成功了并且哪些失敗了,并且將所述成功和失敗信息傳輸回(所述復(fù)制品的)WinFS。在步驟3706,所述復(fù)制品(WinFS)的硬件/軟件接口系統(tǒng)一旦從所述復(fù)制品中接收到成功和失敗信息,就為所述數(shù)據(jù)源計(jì)算新的狀態(tài)信息,存儲(chǔ)這種信息以供將來(lái)由其復(fù)制品使用,并且將這種新的狀態(tài)傳輸回所述數(shù)據(jù)源,也就是,傳輸給用于存儲(chǔ)的適配器并且以后由所述適配器使用。
D.同步層次如此處較早所討論的,根據(jù)每一個(gè)這種被分配對(duì)應(yīng)的遞增的順序的改變號(hào)(即,第一個(gè)改變是1,第二個(gè)改變是2,第三個(gè)改變是3,等等依此類(lèi)推),每個(gè)復(fù)制品保存其改變的遞增的并且順序的枚舉。還有,每個(gè)復(fù)制品還保存用于用于其同步共同體中的其它已知復(fù)制品(同步伙伴)的狀態(tài)信息,以便跟蹤它已經(jīng)從這些其它復(fù)制品中接收了哪些改變。通過(guò)知道應(yīng)用給來(lái)自第二個(gè)復(fù)制品的第一個(gè)復(fù)制品的最后的改變的改變號(hào),然后第一復(fù)制品可以使用這個(gè)編號(hào)來(lái)只對(duì)大于這個(gè)最后被應(yīng)用的改變的編號(hào)的那些改變進(jìn)行請(qǐng)求、接收、或者處理。圖38A-D示出了如何使用這種順序的改變枚舉方法來(lái)跟蹤、枚舉、以及同步改變。
在圖38A中,同步伙伴A和B公共同步共同體中的復(fù)制品,并且以其父狀態(tài)示出,因?yàn)檫€沒(méi)有進(jìn)行改變,所以對(duì)于各個(gè)復(fù)制品,所述父狀態(tài)等于改變號(hào)0—-例如對(duì)于各個(gè)復(fù)制品分別為A0和B0。(在這個(gè)實(shí)施例中,使用唯一的改變號(hào)反映初始狀態(tài)。)各個(gè)復(fù)制品知道其自己的狀態(tài)并且跟蹤其同步伙伴的狀態(tài),在如此處所示的它的“向量”(如所示,向量列出了復(fù)制品自己的狀態(tài),第一個(gè)后面是其伙伴的每一個(gè)的最后的已知狀態(tài),基于最后的同步或者在這種情況下的啟動(dòng),)中,各個(gè)復(fù)制品反映這種信息。用于復(fù)制品A的初始向量是“[A0,B0]”,并且用于復(fù)制品B的初始向量是“[B0,A0]”,并且兩個(gè)復(fù)制品目前是完全同步的。
在圖38B中,復(fù)制品A進(jìn)行改變并且為那個(gè)改變分配唯一的遞增的改變號(hào)A1(該改變號(hào)包括用于復(fù)制品本身的唯一標(biāo)識(shí)“A”,以及用于在那個(gè)復(fù)制品上的改變的唯一的遞增的號(hào)碼“1”)。另一方面,復(fù)制品B進(jìn)行2個(gè)改變,并且為那些改變分別分配唯一的遞增的改變號(hào)B1和B2。在這一點(diǎn)上,并且在下一次同步之前,所述復(fù)制品現(xiàn)在沒(méi)有同步,并且用于復(fù)制品A的向量現(xiàn)在是[A1,B0],且用于復(fù)制品B的向量是[B2,A0](再者,該向量反映了已知的最后改變。)在圖38C中,通過(guò)向復(fù)制品B發(fā)送其當(dāng)前向量以便請(qǐng)求改變,復(fù)制品A與復(fù)制品B同步(步驟1)。一接收到復(fù)制品A的向量,復(fù)制品B就計(jì)算它需要發(fā)送給復(fù)制品A的兩個(gè)改變B1和B2,并且因此繼續(xù)這么做(步驟2)。復(fù)制品A接收被標(biāo)識(shí)為B1和B2的復(fù)制品B的改變(也就是,改變單元),應(yīng)用它們,并且將其自己的向量更新為[A1,B2](步驟3)。
在如圖38D中所示的可替換實(shí)施例中,隨著計(jì)算并向復(fù)制品A發(fā)送正確的改變(步驟2),復(fù)制品B還基于復(fù)制品A的向量確定已經(jīng)對(duì)復(fù)制品A進(jìn)行了改變而尚未對(duì)復(fù)制品B進(jìn)行改變,并且因此復(fù)制品B還將其自己的向量以及用于改變的請(qǐng)求發(fā)送給復(fù)制品A(步驟2’)。然后,當(dāng)復(fù)制品A接收到復(fù)制品B的改變時(shí),應(yīng)用它們,并且將其自己的向量為[A1,B2](在步驟3期間),它還計(jì)算其哪個(gè)改變要發(fā)送給復(fù)制品B并且同樣傳輸它們(步驟3’)。一旦接收到這個(gè)信息,復(fù)制品B就進(jìn)行所述改變并且將它的向量更新為[B2,A1](步驟4)。
關(guān)于之前所述的例子,可能在許多情況下會(huì)引發(fā)沖突。例如,A1和B2也許已經(jīng)對(duì)相同的改變單元進(jìn)行了改變,或者A1會(huì)對(duì)B2正在修正的相同的改變單元進(jìn)行刪除。雖然使用此處較早所討論的沖突分解選項(xiàng)可以分解這些沖突中的一些,但是某些沖突提供了顯著不同的難題,并且在此下面根據(jù)當(dāng)前的例子討論這些難題及其分解方法。
1.同步早先的“范圍外”的改變?cè)诒景l(fā)明的某些實(shí)施例中,復(fù)制品的范圍可以不是靜態(tài)的。因此,采用在位于復(fù)制品A的范圍內(nèi)的項(xiàng)目和不在其范圍內(nèi)的項(xiàng)目之間創(chuàng)建新的關(guān)系的改變,復(fù)制品A可以有效地增加其范圍。然而,假設(shè)用于范圍外的項(xiàng)目的改變單元尚未被同步于復(fù)制品A和B之間(因?yàn)樗呀?jīng)位于用于這些復(fù)制品的同步范圍之外),就用于特定項(xiàng)目的版本路徑而言,可能會(huì)造成同步不一致。解決這個(gè)問(wèn)題的方法是隨著創(chuàng)建復(fù)制品A中范圍內(nèi)的項(xiàng)目和范圍外的項(xiàng)目之間的關(guān)系的特定改變,對(duì)于復(fù)制品A向復(fù)制品B發(fā)送已經(jīng)對(duì)范圍外的項(xiàng)目進(jìn)行了的所有改變。
2.同步父—子無(wú)序化在本發(fā)明的某些實(shí)施例中,對(duì)于同步而言,父項(xiàng)目總是在子項(xiàng)目之間被發(fā)送(例如,如果作為孩子的項(xiàng)目K被嵌入在作為父親的項(xiàng)目J中,則項(xiàng)目K不能在傳輸項(xiàng)目J之前被傳輸),這是一般的原理。然而,對(duì)于復(fù)制品A而言,這是可能的,在同步之間,項(xiàng)目J和K被改變,但是其中孩子項(xiàng)目K具有比孩子項(xiàng)目J小的分類(lèi)號(hào)(基于,例如,其標(biāo)識(shí)號(hào)的順序的優(yōu)先地位),并且因此一般會(huì)被首先傳輸。在本發(fā)明的各個(gè)實(shí)施例中,用于解決同步的問(wèn)題的一種方法是,將所述改變分成兩組,一組只反映對(duì)項(xiàng)目K進(jìn)行的改變,而第二組只反映對(duì)項(xiàng)目J進(jìn)行的改變,并且以恰當(dāng)?shù)捻樞虬l(fā)送它們(也就是,在發(fā)送了用于父項(xiàng)目J的改變的組之后,發(fā)送用于子項(xiàng)目K的改變的組)。
3.墓碑傳播如在此較早所討論的,出于同步的目的,墓碑被用于標(biāo)記已經(jīng)被刪除的改變單元。然而,由于對(duì)于同步共同體中的多個(gè)向量而言同步是非同步的,所以這些墓碑可以在整個(gè)數(shù)據(jù)平臺(tái)上傳播。問(wèn)題是,在沒(méi)有說(shuō)明墓碑傳播的情況下,復(fù)制品A可以創(chuàng)建一個(gè)項(xiàng)目,并且在與復(fù)制品B同步期間,將那個(gè)項(xiàng)目發(fā)送給復(fù)制品B。然后,復(fù)制品A可以刪除所述項(xiàng)目,并且在與復(fù)制品C同步期間,它不發(fā)送與所述項(xiàng)目有關(guān)的任何信息,因?yàn)闆](méi)有要發(fā)送的信息(因?yàn)樗鲰?xiàng)目被刪除了)。接著,當(dāng)復(fù)制品B和復(fù)制品C試圖同步時(shí),復(fù)制品C可以從復(fù)制品B中接收所述項(xiàng)目,并且在B上持續(xù)。
對(duì)于本發(fā)明的各個(gè)實(shí)施例而言,解決這個(gè)問(wèn)題的方法是,對(duì)于復(fù)制品A采用墓碑標(biāo)記被刪除的項(xiàng)目。接著,當(dāng)復(fù)制品A刪除所述項(xiàng)目時(shí),在與復(fù)制品C同步期間,它將所述墓碑發(fā)送給復(fù)制品B。當(dāng)復(fù)制品B和復(fù)制品C接著試圖同步時(shí),復(fù)制品B同樣接收所述墓碑,并且所述項(xiàng)目現(xiàn)在完全從所述同步共同體中被刪去了。
4.根墓碑傳播在P1中,如果項(xiàng)目X具有多個(gè)被嵌入項(xiàng)目A、B、C、D和E,那么當(dāng)P1首先刪除這些子項(xiàng)目并且其次刪除同步之間的父項(xiàng)目X時(shí)(即,刪除A、刪除B、刪除C、刪除D、刪除E和刪除X,作為6個(gè)改變),引發(fā)一種有意思的情況,因?yàn)橄嗤淖罱K結(jié)果可能已經(jīng)發(fā)生,P1已經(jīng)簡(jiǎn)單地刪除了父親X(1個(gè)改變),在這種情況下,被嵌入的項(xiàng)目可能也會(huì)被自動(dòng)地刪除。在這方面,本發(fā)明的多個(gè)實(shí)施例,一旦同步,就通過(guò)確認(rèn)刪除X可能事實(shí)上與6個(gè)單獨(dú)的刪除事件是等效的,獲得功效,并且因此P1可能只向P2發(fā)送對(duì)應(yīng)于X的刪除的改變單元,并且允許這種刪除,以便自然地傳播給P2中的X的被嵌入的項(xiàng)目。
5.關(guān)系名稱(chēng)交換如之前所討論的,關(guān)系具有名稱(chēng),并且因此對(duì)于一個(gè)復(fù)制品(P1)可以通過(guò)使用臨時(shí)名稱(chēng)元素(X)來(lái)交換用于兩個(gè)關(guān)系(R1和R2)的名稱(chēng)——也就是,R1的名稱(chēng)被復(fù)制給X,R2的名稱(chēng)接著被復(fù)制給R1,接著X被復(fù)制給R2,并且最后刪除X。然而,因?yàn)榛锇閺?fù)制品(P2)不知道臨時(shí)名稱(chēng)元素X,所以在同步期間將會(huì)造成錯(cuò)誤,因?yàn)榇_認(rèn)R1具有新名稱(chēng),P2試圖改變這個(gè)名稱(chēng),導(dǎo)致錯(cuò)誤地為R1和R2使用相同的名稱(chēng)。對(duì)于本發(fā)明的各個(gè)實(shí)施例,解決這個(gè)問(wèn)題的一種方法是,一旦接收到或者確認(rèn)這種相同名稱(chēng)錯(cuò)誤,就假設(shè)一種可行的名稱(chēng)交換情況,并且自動(dòng)地創(chuàng)建其自己的臨時(shí)名稱(chēng)元素(X),并且如果連續(xù)的改變的確解決了將R2重命名為X中的名稱(chēng),那么它就完成了這種交換(否則,它產(chǎn)生所述情況作為常規(guī)沖突事件)。
6.引用關(guān)系對(duì)于復(fù)制品P1(在WinFS系統(tǒng)上運(yùn)行)和數(shù)據(jù)源P2(在非WinFS系統(tǒng)上運(yùn)行)之間的同步,引發(fā)一個(gè)問(wèn)題,在搖擺關(guān)系(被WinFS支持)情況中,不被非WinFS系統(tǒng)支持。當(dāng)兩個(gè)項(xiàng)目A和B具有在P1上的關(guān)系R,并且P1以A(P1-21)然后R(作為改變單元P1-22)然后B(作為改變單元P1-23)的順序創(chuàng)建它們時(shí),會(huì)引發(fā)這個(gè)問(wèn)題。當(dāng)創(chuàng)建R(P1-22)時(shí),R是搖擺關(guān)系,所以當(dāng)P2順序地應(yīng)用這些改變時(shí),會(huì)導(dǎo)致不允許的搖擺關(guān)系錯(cuò)誤。對(duì)于本發(fā)明的多個(gè)實(shí)施例而言,解決這個(gè)問(wèn)題的方法是,改為重新排序所述改變,以便在所有其它改變從P1被發(fā)送到P2之后,可以發(fā)送所有的引用關(guān)系(例如,R),并且因此,通過(guò)首先創(chuàng)建項(xiàng)目A和B并且然后采用R將它們彼此相關(guān),共同避免了這個(gè)問(wèn)題。
E.同步—沖突處理如在此較早所提及的,同步服務(wù)中的沖突處理被劃分為3個(gè)階段(1)沖突檢測(cè),發(fā)生在改變應(yīng)用的時(shí)候——這個(gè)步驟確定改變是否已經(jīng)被安全地應(yīng)用;(2)自動(dòng)的沖突分解和記錄——在這個(gè)步驟期間(檢測(cè)到?jīng)_突之后立刻進(jìn)行)考慮自動(dòng)的沖突處理器以便明白所述沖突是否已經(jīng)被分解——如果沒(méi)有,則可以可選擇地記錄所述沖突;以及(3)沖突檢查和分解——如果一些沖突已經(jīng)被記錄則進(jìn)行這個(gè)步驟,并且發(fā)生在同步會(huì)話的環(huán)境之外——此時(shí),被記錄的沖突可以被分解并從所述記錄中刪除。
本發(fā)明的各個(gè)實(shí)施例尤其被指向?qū)Πl(fā)生在對(duì)等同步系統(tǒng)(例如,用于在此以上所述的同步系統(tǒng))中的沖突的沖突處理。準(zhǔn)確地并且有效地處理沖突的能力最小化數(shù)據(jù)丟失,而保留了好的使用性,并且減少了在同步期間對(duì)用戶(hù)干預(yù)的需要。本發(fā)明的多個(gè)實(shí)施例被指向沖突處理模式,包括以下沖突處理元素中的一個(gè)或多個(gè)(a)沖突的模式化表示;(b)沖突的檢測(cè);(c)沖突向永久存儲(chǔ)中的記錄;(d)按照靈活的并且可配置的沖突分解策略的沖突的自動(dòng)分解;(e)可包括且可擴(kuò)展到過(guò)濾器并分解沖突的沖突處理器;(f)自動(dòng)檢測(cè)和已廢棄沖突的移除;以及(g)有計(jì)劃的沖突分解。還有,脫開(kāi)沖突處理模式,這些沖突處理元素中的每一個(gè)本身都是本發(fā)明的有代表性的附加實(shí)施例。
1.沖突類(lèi)型通常,無(wú)論何時(shí)不能在同步操作期間同步數(shù)據(jù)(“改變應(yīng)用失敗”),就會(huì)引起沖突。這些失敗可以是因?yàn)樵S多原因而造成的,盡管一般沖突可以被劃分為兩類(lèi)約束沖突和知識(shí)沖突。
a)基于知識(shí)的沖突當(dāng)兩個(gè)復(fù)制品對(duì)同一改變單元進(jìn)行獨(dú)立的改變時(shí),會(huì)造成基于知識(shí)的沖突。如果兩個(gè)改變是在彼此沒(méi)有知識(shí)的情況下進(jìn)行的,則這兩個(gè)改變被稱(chēng)作為是獨(dú)立的——換言之,第一個(gè)的版本沒(méi)有被第二個(gè)的知識(shí)覆蓋,反之亦然?;谌缫陨纤龅膹?fù)制品的知識(shí),所述同步服務(wù)自動(dòng)地檢測(cè)所有的這種沖突,并且處理這些沖突,在此如下面所述。一些特定類(lèi)型的知識(shí)沖突包括更新—?jiǎng)h除、刪除—更新以及更新—更新沖突(其中每個(gè)名稱(chēng)是指依次是本地動(dòng)作和遠(yuǎn)程動(dòng)作;例如,更新—?jiǎng)h除沖突是由于對(duì)同一數(shù)據(jù)的本地更新和遠(yuǎn)程刪除)。
有時(shí),將沖突認(rèn)為是改變單元的版本歷史中的分叉是有幫助的。如果在改變單元的生命中沒(méi)有沖突發(fā)生,則其版本歷史就是一個(gè)簡(jiǎn)單的鏈——每個(gè)改變都在之前的一個(gè)后面發(fā)生。在基于知識(shí)的沖突的情況中,兩個(gè)改變并行發(fā)生,使得所述鏈分裂并且變成版本樹(shù)。
總體上,知識(shí)沖突按照知識(shí)和版本處理的結(jié)果發(fā)生。當(dāng)應(yīng)用具有與被存儲(chǔ)在數(shù)據(jù)庫(kù)中的信息相沖突的版本的改變時(shí),由WinFS同步創(chuàng)建知識(shí)。所述沖突需要包括沖突改變信息,以及版本信息。大多數(shù)對(duì)知識(shí)沖突的要求也是對(duì)約束沖突的要求。然而,在同步版本和知識(shí)的基礎(chǔ)上,知識(shí)沖突可以被單獨(dú)地檢測(cè)。
b)基于約束的沖突存在一些情況,在這些情況下,當(dāng)一起被應(yīng)用時(shí),獨(dú)立的改變妨礙了完整性約束。例如,在相同目錄中創(chuàng)建具有相同名稱(chēng)的文件的兩個(gè)復(fù)制品會(huì)使得這樣的沖突發(fā)生,其中系統(tǒng)中的約束(例如,文件夾中唯一的項(xiàng)目名稱(chēng)的施加)導(dǎo)致了這種類(lèi)型的基于約束的沖突。
一般地,基于約束的沖突包括兩個(gè)獨(dú)立的改變,正如用于基于知識(shí)的沖突;然而,基于約束的沖突包括不影響相同改變單元但相反影響不同改變單元的在它們之間存在約束的改變?;诩s束的沖突可以從單個(gè)改變中引發(fā),例如當(dāng)兩個(gè)不同類(lèi)型的類(lèi)型之間同步其中一個(gè)具有約束而另一個(gè)沒(méi)有時(shí)。例如,如果一個(gè)系統(tǒng)具有最大文件名長(zhǎng)度是八個(gè)(8個(gè))字符長(zhǎng)的約束,并且如果那個(gè)系統(tǒng)接收到來(lái)自另一個(gè)不具有這種約束的對(duì)文件的改變,其中所述改變是針對(duì)文件名使得文件名比8個(gè)字符長(zhǎng)更長(zhǎng),就導(dǎo)致了約束沖突(從一個(gè)單個(gè)機(jī)器中的單個(gè)改變中發(fā)生)特殊類(lèi)型的約束沖突包括但并不限于·插入—插入沖突當(dāng)兩個(gè)同步伙伴的每一個(gè)都創(chuàng)建具有相同邏輯標(biāo)識(shí)符的對(duì)象例如具有相同名稱(chēng)的文件時(shí)發(fā)生。
·無(wú)父沖突當(dāng)要?jiǎng)?chuàng)建的引入對(duì)象的父親不存在時(shí)發(fā)生。一個(gè)例子是當(dāng)在文件的父文件夾之前接收一個(gè)文件時(shí)。
·未規(guī)定類(lèi)型的沖突當(dāng)引入對(duì)象的模式?jīng)]有被示出從而防止創(chuàng)建所述對(duì)象時(shí)發(fā)生。
總之,約束沖突是通過(guò)由于各種原因應(yīng)用改變的錯(cuò)誤引發(fā)的。如果采用最終導(dǎo)致減小的分解方法的形式,能夠有針對(duì)性地被處理,或者如果它們能夠被記錄以用于最終通過(guò)用戶(hù)交互分解,則這種錯(cuò)誤被稱(chēng)為約束沖突。不能被有針對(duì)性地處理而是被報(bào)告的錯(cuò)誤簡(jiǎn)稱(chēng)為改變應(yīng)用錯(cuò)誤。對(duì)于某些實(shí)施例,所有改變應(yīng)用錯(cuò)誤都被看作是錯(cuò)誤——也就是,沒(méi)有被承認(rèn)的約束沖突。而對(duì)于某些實(shí)施例,由于期望在下一次接收同步時(shí)表示知識(shí)沖突,所以在發(fā)送同步期間發(fā)生的所有沖突可以被忽略。(導(dǎo)致沒(méi)有減小的其它錯(cuò)誤也可以被忽略。)2.沖突檢測(cè)所述同步服務(wù)在改變應(yīng)用時(shí)檢測(cè)約束違規(guī),并且自動(dòng)地引發(fā)基于約束的沖突。分解基于約束的沖突通常要求自定義碼采用與沒(méi)有違反所述約束的方式修正所述改變,并且同步服務(wù)可以或可以不提供用于這么做的通用機(jī)制。
對(duì)于本發(fā)明的各個(gè)實(shí)施例,通過(guò)檢驗(yàn)本地知識(shí)是否知道遠(yuǎn)程版本并且反之亦然,每個(gè)改變單元檢測(cè)沖突。對(duì)于基于知識(shí)的沖突,在此有4種沖突檢測(cè)情形1.知道遠(yuǎn)程版本的本地知識(shí),知道本地版本的遠(yuǎn)程知識(shí)這意味著引入的改變是已廢棄的,并且因此進(jìn)行被丟棄。
2.不知道遠(yuǎn)程版本的本地知識(shí),知道本地版本的遠(yuǎn)程知識(shí)這意味著引入的改變比本地版本更新,并且因此接受。
3.知道遠(yuǎn)程版本的本地知識(shí),知道本地版本的遠(yuǎn)程知識(shí)。這可能只發(fā)生在如果兩個(gè)版本等效的時(shí)候,并且因此沒(méi)有改變被應(yīng)用。
4.不知道遠(yuǎn)程版本的本地知識(shí),不知道本地版本的遠(yuǎn)程知識(shí)。這意味著本地和遠(yuǎn)程版本相沖突,并且因此引發(fā)沖突。
3.沖突處理沖突可能發(fā)生在發(fā)送或者接收同步期間;然而,如果在單向同步操作中兩個(gè)伙伴類(lèi)似(例如,在WinFS存儲(chǔ)中兩者被類(lèi)似地配置),則情況是相對(duì)稱(chēng)的,并且通過(guò)自動(dòng)分解所述同步上的沖突或者記錄所述沖突以供異步分解(自動(dòng)或人工),在接收端,是最容易被處理的。
當(dāng)然,存在發(fā)送伙伴可能需要處理例如在WinFS對(duì)非WinFS同步中的沖突的情況。在這種情況下,在順序的接收同步中,約束沖突可能不會(huì)傳播回所述發(fā)送伙伴。還有,接收伙伴可能不具有沖突記錄,或者可能需要使用發(fā)送者的沖突記錄以易于管理。在這種情況下,改變可能會(huì)被一起拒絕,以便迫使發(fā)送這分解所述沖突(此處下面進(jìn)行討論)。
同步啟動(dòng)器配置其同步概況中的沖突分解。所述同步服務(wù)支持在單個(gè)概況中聯(lián)合多個(gè)沖突處理器。因?yàn)闆_突處理機(jī)制是可擴(kuò)展的,所以存在多種方式聯(lián)合多個(gè)沖突處理器。一種特定的方法包括指定沖突處理器的列表一個(gè)接一個(gè)地進(jìn)行嘗試,直到其中一個(gè)成功為止(此處如下面所述)。另一種方法包括將沖突處理器與沖突類(lèi)型相關(guān)聯(lián),例如,將更新—更新基于知識(shí)的沖突指向一個(gè)沖突處理器,而將所有其它沖突指向記錄。
當(dāng)檢測(cè)到?jīng)_突時(shí),同步服務(wù)可以采取3個(gè)動(dòng)作中的一個(gè)(由同步概況中的同步啟動(dòng)器選擇)(1)拒絕改變;(2)自動(dòng)分解沖突;或者(3)將沖突記錄到?jīng)_突記錄中。
a)拒絕改變?nèi)绻芙^改變,那么如果改變沒(méi)有到達(dá)所述復(fù)制品并且否定的應(yīng)答被發(fā)送回啟動(dòng)器,則同步服務(wù)起作用。這種分解策略簡(jiǎn)單地用在沒(méi)有標(biāo)題的復(fù)制品(例如文件服務(wù)器)上,其中記錄沖突是不可行的。相反,這種復(fù)制品向其它的復(fù)制品通過(guò)拒絕處理所述沖突。
b)自動(dòng)沖突分解自動(dòng)沖突分解是按照所指定的策略分解同步上的沖突的過(guò)程。在WinFS同步操作中,可以獨(dú)立地指定策略,以便發(fā)送操作和接收操作。自動(dòng)沖突分解策略可以通過(guò)同步概況來(lái)指定。所引發(fā)的沖突被傳遞給所述概況中指定的頂級(jí)沖突處理器。這種沖突處理器可以分解所述沖突、記錄它、或者將所述沖突傳遞給另一個(gè)沖突處理器,以便進(jìn)一步隨著沖突處理流水線進(jìn)行處理。
圖39A示出了用于本發(fā)明的多個(gè)實(shí)施例的沖突處理流水線。在此圖中,當(dāng)沖突發(fā)生時(shí),沖突處理器列表(或者“列表”)3910接收沖突項(xiàng)目3902,并且在所述流水線的第一路徑上將所述沖突傳遞給第一處理器3912,在這種情況下,第一處理器是過(guò)濾器。所述過(guò)濾器3912是監(jiān)視定時(shí)器(watchdog),它估計(jì)所述沖突3902,并且讓它傳遞給下一個(gè)處理器3914或者拒絕回所述列表3910,然后,列表3910將它傳遞回列表3912,依次,將它傳遞回位于所述流水線上的下一個(gè)路徑的第一處理器3922。如果由第一過(guò)濾器3912將所述沖突3902傳遞給第二處理器3914,在這種情況下,是分解器,那么如果可能的話所述沖突被分解器3914分解,或者如果不可能,則將所述沖突拒絕回第一處理器3922。接著,所述沖突繼續(xù)通過(guò)流水線進(jìn)行處理,直到(a)由流水線中的處理器中的一個(gè)分解了為止,(b)通過(guò)特定的沖突處理器熟稱(chēng)“記錄器”明確地記錄到?jīng)_突記錄上,所述記錄器例如記錄器3936(也就是,如果沖突使它傳遞給過(guò)濾器3934)為止,或者(c)完全被傳遞回流水線外部,并且默認(rèn)地被發(fā)送回沖突記錄(用虛線邏輯地示為記錄器3944)。
圖39B是示出了圖39A中所示的流水線的邏輯移動(dòng)的流程圖。在圖39B中,并且還參照?qǐng)D39A,在步驟3950,沖突3902進(jìn)入沖突處理器列表3910上的流水線,并且在步驟3952被初始發(fā)送給過(guò)濾器3912。如果在步驟3954,沖突3902傳遞給此過(guò)濾器3912,那么在步驟3956所述沖突3902進(jìn)行到分解器3914,在步驟3958,所述分解器3914試圖分解所述沖突3902。如果成功,則在步驟3998,處理返回;否則,在步驟3960沖突進(jìn)行到分解器3922,在步驟3962,分解器3922試圖分解沖突3902。如果成功,在步驟3998,處理返回;否則,在步驟3964,沖突進(jìn)行到列表3932,并且在步驟3966,從這里到過(guò)濾器3934,并且如果在步驟3968,沖突傳遞給此過(guò)濾器3934,在步驟3972,那么在步驟3970,由記錄器3936將沖突記錄到?jīng)_突記錄(未示出)中,并且,在步驟3998,處理返回;否則在步驟3972,沖突3902被發(fā)送給過(guò)濾器3938,并且如果在步驟3974沖突3902傳遞給此過(guò)濾器3938,那么在步驟3976,沖突3902進(jìn)行到分解器3940,在步驟3982,分解器試圖分解沖突3902。如果成功,在步驟3998,處理返回;否則,在步驟3984,由分解器3936將沖突3902記錄到?jīng)_突記錄(未示出)中,并且在步驟3998,處理返回。
盡管在圖39A和39B中沒(méi)有示出,但是應(yīng)當(dāng)注意,連續(xù)的沖突分解器的路徑也可以構(gòu)造,其中,如果沖突不可能被一個(gè)分解器分解,則將沖突傳遞給下一個(gè)分解器,然后力圖分解所述沖突,等等,依此類(lèi)推。如果沖突持續(xù)未被分解恰好在路徑的結(jié)尾處,那么沿著所述路徑將沖突傳遞回列表,以便繼續(xù)下一條路徑。類(lèi)似地,一旦用于列表的所有路徑都已用盡,并且沖突仍未分解,那么列表沿著其路徑傳遞沖突,直到它到達(dá)下一個(gè)列表,等等,依此類(lèi)推。
也很重要的是注意,流水線不必以列表開(kāi)始;相反,它可以以任何類(lèi)型的沖突處理器諸如,例如過(guò)濾器開(kāi)始。然而,無(wú)論如何,如果沿著路徑將沖突傳遞回流水線中的第一沖突處理器,并且那個(gè)沖突處理器沒(méi)有另外的路徑用以嘗試(可能只是用于沖突處理器列表的情況,其中所有路徑都沒(méi)有嘗試),那么沖突傳遞到流水線的外部,并且自動(dòng)地并且默認(rèn)地被記錄到?jīng)_突記錄。
ConflictHandler類(lèi)型是用于沖突處理器的基本類(lèi)型,包括沖突處理器列表、沖突記錄、以及沖突過(guò)濾器、以及其它類(lèi)型的沖突處理器。此外,所述同步服務(wù)也可以提供許多默認(rèn)的沖突處理器,包括但并不限于·本地優(yōu)勝通過(guò)選擇本地存儲(chǔ)的數(shù)據(jù)作為對(duì)引入數(shù)據(jù)的優(yōu)勝者,分解沖突·遠(yuǎn)程優(yōu)勝通過(guò)選擇引入數(shù)據(jù)作為對(duì)本地存儲(chǔ)的數(shù)據(jù)的優(yōu)勝者,分解沖突;·最后寫(xiě)入者優(yōu)勝基于改變單元的時(shí)間戳,挑選本地優(yōu)勝者或者遠(yuǎn)程優(yōu)勝者(注意,通常同步服務(wù)不依賴(lài)于時(shí)間值;這種沖突分解器對(duì)于那個(gè)規(guī)則是惟一例外);·確定性的以保證在所有復(fù)制品上相同的方式,挑選優(yōu)勝者,但不是另外的有意義的——同步服務(wù)的一個(gè)實(shí)施例可能使用伙伴ID的字典編輯上的對(duì)照來(lái)實(shí)現(xiàn)這個(gè)特征。
例如,沖突處理器可以規(guī)定,對(duì)于更新—?jiǎng)h除沖突,應(yīng)當(dāng)應(yīng)用本地優(yōu)勝者分解方法,而對(duì)于所有其它沖突,應(yīng)當(dāng)應(yīng)用最后寫(xiě)入者優(yōu)勝者分解方法,如下<conflictHandlerListxmlns=”http∥schemas.microsott.com/winfs.2003/10/conficts”>
<conflictFilterxmlns=”http∥schemas.microsoft.com/winfs.2003/10/conflicts”>
<conflictType>UpdateDeleteConflict</conflictType><conflictResolver><ResolutionType>LocalWins</ResolutionType></conflictResolver>
</conflictFilter><conflictResolver><ResolutionType>LastWriterWins</ResolutionType></conflictResolver>
</conflictHandlerList>
當(dāng)然,如果沒(méi)有指定沖突處理器,或者如果沒(méi)有通過(guò)任何被指定的沖突處理器處理沖突,那么沖突就被放置在沖突記錄中。對(duì)于某些實(shí)施例,沖突記錄也是沖突處理器。
對(duì)于本發(fā)明的各個(gè)實(shí)施例,ISV可以實(shí)現(xiàn)并且建立其自己的沖突處理器??蛻?hù)沖突處理器可以接受配置參數(shù),盡管這種參數(shù)必須由同步概況的沖突分解部分中的SCA來(lái)指定。
當(dāng)沖突分解器處理沖突時(shí),它將需要執(zhí)行的操作的列表(代替沖突改變)返回給所述例程。然后,所述同步服務(wù)應(yīng)用這些操作,適當(dāng)?shù)卣{(diào)整遠(yuǎn)程知識(shí),以便包括沖突處理器已經(jīng)考慮過(guò)的信息。
可能在應(yīng)用所述方法的同時(shí)檢測(cè)到了另一個(gè)沖突。在這種情況下,在重新進(jìn)行初始處理之前,新的沖突必須被分解或被記錄。
當(dāng)將沖突看作項(xiàng)目的版本歷史中的分支時(shí),沖突分解可以被看作接點(diǎn)——聯(lián)合兩個(gè)分支以便形成單獨(dú)的點(diǎn)。因此,沖突分解將版本歷史成為有向無(wú)回路圖形(DAG)。
c)沖突日志記錄雖然被報(bào)告的沖突可以使用自動(dòng)沖突分解來(lái)同步地分解,但是其它的沖突可能被記錄日志以供以后有計(jì)劃的分解。沖突日志記錄允許沖突分解處理同步地進(jìn)行——也就是,沖突不必在它們被刪除的時(shí)候才能分解,而是可以被記錄日志以供將來(lái)分解。例如,沖突觀察器應(yīng)用可以允許用戶(hù)檢查并且在是事實(shí)之后人工地分解被記錄日志的沖突。
對(duì)于本發(fā)明的多個(gè)實(shí)施例,非常特殊的類(lèi)型的沖突處理器是沖突日志記錄器(或者,更簡(jiǎn)單地,“日志記錄器”)。所述同步服務(wù)將沖突記錄在沖突日志中作為類(lèi)型ConflictRecord的項(xiàng)目(或者,在替換實(shí)施例中,簡(jiǎn)單地作為類(lèi)型Confict)。這些日志返回來(lái)與沖突中的項(xiàng)目有關(guān)(除非所述項(xiàng)目本身已經(jīng)被刪除)。對(duì)于某些實(shí)施例,各個(gè)沖突日志包含引發(fā)沖突的引入改變;沖突的類(lèi)型(例如,更新—更新、更新—?jiǎng)h除、刪除—更新、插入—插入,或者約束);以及引入改變的版本和發(fā)送它的復(fù)制品的知識(shí)。對(duì)于本發(fā)明的某些可替換實(shí)施例,每一個(gè)這種沖突項(xiàng)目都包含沖突改變數(shù)據(jù)和元數(shù)據(jù)、沖突的說(shuō)明以及其它環(huán)境信息例如改變應(yīng)用器信息、建立數(shù)據(jù)、以及遠(yuǎn)程伙伴名稱(chēng)。此外,以不能被用于應(yīng)用所述改變的方式,存儲(chǔ)所述改變數(shù)據(jù)。還有,對(duì)于本發(fā)明的各個(gè)實(shí)施例,從沖突中派生出的各個(gè)類(lèi)型可以添加與那個(gè)類(lèi)型的沖突有關(guān)的新的字段。例如,InsertInsertConflict添加引起違反唯一性約束的項(xiàng)目的項(xiàng)目ID。
對(duì)于本發(fā)明的多個(gè)實(shí)施例,要被記錄日志的沖突項(xiàng)目還將包括目標(biāo)項(xiàng)目的復(fù)制,作為對(duì)沖突項(xiàng)目的擴(kuò)展,或者僅僅作為也被存儲(chǔ)在沖突記錄中、具有它和沖突項(xiàng)目本身之間所規(guī)定的關(guān)系、或者可替換地作為沖突項(xiàng)目本身的一部分(例如一組屬性值對(duì))。作為沖突日志中的沖突項(xiàng)目的一部分或者與沖突項(xiàng)目一起被存儲(chǔ)(被保存在永久數(shù)據(jù)存儲(chǔ)上)的這個(gè)目標(biāo)項(xiàng)目,將反映特定的改變引發(fā)了第一位置中的沖突。圖40是示出了使用示例性聯(lián)系項(xiàng)目的這種方法的方塊圖。在這個(gè)例子中,聯(lián)系項(xiàng)目4002(“目標(biāo)項(xiàng)目”)包括名稱(chēng)字段4004,名稱(chēng)字段4004最初被設(shè)置為“John”,作為最后成功的同步的名稱(chēng)。這個(gè)字段4004接著本地地被本地系統(tǒng)改變?yōu)椤癇ob”。在隨后的同步期間,如果將這個(gè)名稱(chēng)字段4004改變?yōu)椤癑ane”的企圖引起了沖突,因?yàn)楸镜叵到y(tǒng)不可能查明應(yīng)當(dāng)應(yīng)用哪個(gè)名稱(chēng)改變“Bob”或者“Jane”,那么本地改變(“Bob”)被保留,而隨著沖突項(xiàng)目4002’的復(fù)制一起,沖突4006被記錄在沖突日志4008中,沖突項(xiàng)目4002’反映了導(dǎo)致沖突的改變的應(yīng)用(“Jane”)。以這種方式,沖突日志包括引發(fā)沖突的完整目標(biāo)項(xiàng)目,并且這個(gè)特定的目標(biāo)項(xiàng)目被更新,以便反映試圖在導(dǎo)致沖突的項(xiàng)目上進(jìn)行的改變。
為了將沖突添加到?jīng)_突日志,首先搜索日志,以便確定在相同的改變單元(多個(gè))上是否存在其它沖突。如果在相同的改變單元上存在任何現(xiàn)有的沖突,則檢查它們以便可以移除。如果改變知道的現(xiàn)有沖突被改變知道的新的沖突包含,則移除現(xiàn)有的沖突。另一方面,如果改變知道的新的改變被改變知道的現(xiàn)有被記錄日志的沖突包含,則刪除新的沖突,反之亦然(也就是,如果它知道的被知道的存儲(chǔ)包含,例如當(dāng)所述存儲(chǔ)接受并且成功地應(yīng)用了包含知道的沖突的改變時(shí),沖突也被變?yōu)橐褟U棄的)。在第三種情況下,其中兩個(gè)改變知道中的任何一個(gè)包含另一個(gè),則新的沖突被添加到所述日志,并且對(duì)應(yīng)于相同的改變單元的兩個(gè)沖突存在于所述日志中,直到后來(lái)被人工地或者自動(dòng)地分解為止。
d)沖突檢查和分解所述同步服務(wù)提供用于應(yīng)用的API,以便檢查所述沖突日志,并且建議其中的所述沖突的分解方法。API允許應(yīng)用枚舉所有沖突或者與給定的項(xiàng)目有關(guān)的沖突。它還允許這些應(yīng)用以3種方式中的一種方式分解被記錄日志的沖突(1)遠(yuǎn)程優(yōu)勝——接受被記錄日志的改變并且覆蓋所述相沖突的本地改變;(2)本地優(yōu)勝——忽略所述被記錄日志的改變的沖突部分;以及(3)建議新的改變——其中所述應(yīng)用建議一種兼并(merge),在其看法中,分解所述沖突。一旦由應(yīng)用分解了沖突,所述同步服務(wù)就將它們從日志中刪除。
e)復(fù)制品的減小和沖突分解的傳播在復(fù)雜的同步情形中,在多個(gè)復(fù)制品上可以刪除相同的沖突。如果發(fā)生了這種情形,則許多事情都可能發(fā)生(1)在一個(gè)復(fù)制品上可以分解所述沖突,而所述分解方法被發(fā)送給另一個(gè);(2)在兩個(gè)復(fù)制品上自動(dòng)分解了所述沖突;或者(3)在兩個(gè)復(fù)制品上人工地分解了所述沖突(通過(guò)沖突檢查API)。
為了確保減小,所述同步服務(wù)將沖突分解方法傳遞給其它復(fù)制品。當(dāng)分解沖突的改變到達(dá)復(fù)制品時(shí),所述同步服務(wù)自動(dòng)地找到所述日志中的通過(guò)這種更新分解了的任意沖突記錄,并且刪除它們。在這種情況下,一個(gè)復(fù)制品上的沖突分解方法將捆綁在所有其它復(fù)制品上。
如果對(duì)于相同的沖突,由不同的復(fù)制品選擇不同的優(yōu)勝者,則所述同步服務(wù)應(yīng)用捆綁沖突分解方法的原理,并且自動(dòng)地挑選兩種分解方法中優(yōu)于另一種的一種分解方法。以確定的方式,挑選出所述優(yōu)勝者,以保證在所有的時(shí)候都生成相同的結(jié)果(一個(gè)實(shí)施例使用復(fù)制品ID詞典編輯上的對(duì)照)。
如果對(duì)相同的沖突,不同的復(fù)制品建議不同的“新改變”,則所述同步服務(wù)將這種新的沖突看作特殊的沖突,并且使用沖突日志記錄器來(lái)防止它傳播到其它復(fù)制品。這種分解方法通常會(huì)引起人工的沖突分解方法。
D.同步模式和沖突處理模式的附加方面下面是用于本發(fā)明的各個(gè)實(shí)施例的同步模式的附加(或更特殊的)方面。
·每一復(fù)制品是來(lái)自整個(gè)數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)的定義的同步子集一具有多個(gè)實(shí)例的一段數(shù)據(jù)。
·在同步模式的根上,是具有定義具有唯一ID的根文件夾(事實(shí)上,是根項(xiàng)目)的基礎(chǔ)類(lèi)型的復(fù)制品,ID用于同步它是其成員的共同體,并且任何過(guò)濾器和其它元素對(duì)于特定復(fù)制品都是必須或期望的。
·每一復(fù)制品的“映射”被維持在所述復(fù)制品中,并且因而,用于任何特定復(fù)制品的映射被限定在這個(gè)復(fù)制品知道的其它復(fù)制品上。雖然這種映射可以只包括整個(gè)同步共同體的子集,但是通過(guò)公共地共享的復(fù)制品,所述復(fù)制品的改變將仍被傳播給整個(gè)同步共同體(盡管任何特定的復(fù)制品不知道與未知的復(fù)制品公共地共享哪些其他復(fù)制品)。
·同步模式和復(fù)制品的使用允許真正的分布式對(duì)等多標(biāo)準(zhǔn)同步共同體。還有,不存在同步共同體類(lèi)型,但是同步共同體簡(jiǎn)單地作為復(fù)制品本身的共同體字段中的一個(gè)值存在。
·每一復(fù)制品具有其自己的元數(shù)據(jù),以便跟蹤遞增的改變枚舉并且存儲(chǔ)同步共同體中已知的其它復(fù)制品的狀態(tài)信息。
·改變單元具有其自己的元數(shù)據(jù),包括版本,包括伙伴關(guān)鍵字加上伙伴改變號(hào);每一改變單元的項(xiàng)目/擴(kuò)展/關(guān)系版本;與復(fù)制品已經(jīng)從同步共同體中看到的/接收到的改變有關(guān)的知識(shí);GUID和本地ID配置;以及被存儲(chǔ)在引用關(guān)系上的用于清除的GUID。
下面是用于本發(fā)明的各個(gè)實(shí)施例的沖突處理模式的其它方面。
·由各個(gè)復(fù)制品(以及適配器/數(shù)據(jù)源地組合)各自地處理沖突分解策略——也就是,各個(gè)復(fù)制品能夠基于其自己的標(biāo)準(zhǔn)和沖突分解模式分解沖突。還有,雖然數(shù)據(jù)存儲(chǔ)的各個(gè)實(shí)例中的區(qū)別可能得出并且導(dǎo)致附加的未來(lái)沖突,但是對(duì)于接收到那種被更新的狀態(tài)信息的其它復(fù)制品而言,如被更新?tīng)顟B(tài)信息中所反映的沖突的遞增且連續(xù)的列表是不可見(jiàn)的。
·同步模式包括可以用于所有復(fù)制品的多個(gè)預(yù)定沖突處理器,以及用于用戶(hù)/開(kāi)發(fā)者規(guī)定的客戶(hù)沖突處理器的能力。所述模式還可以包括3個(gè)特殊的“沖突處理器”(a)沖突“過(guò)濾器”,以不同的方式分解分解不同的沖突,所述分解是基于,例如(i)當(dāng)在兩個(gè)位置中改變了相同的改變單元時(shí),如何處理,(ii)當(dāng)在一個(gè)位置中改變了改變單元而在另一個(gè)中進(jìn)行了刪除時(shí),如何處理;以及(iii)當(dāng)在兩個(gè)不同的位置中兩個(gè)不同的改變單元具有相同的名稱(chēng)時(shí),如何處理;(b)沖突“處理器列表”,其中列表的各個(gè)元素指定一系列動(dòng)作以便輪流嘗試,直到成功地分解了所述沖突為止;以及(c)“什么都沒(méi)做”的記錄,跟蹤所述沖突,但是在沒(méi)有用戶(hù)干預(yù)的情況下不采取進(jìn)一步的動(dòng)作。
IV.通過(guò)中介同步最初采用此處描述的新存儲(chǔ)平臺(tái),具有包括各種個(gè)別計(jì)算機(jī)系統(tǒng)的同步網(wǎng)絡(luò)的企業(yè)將具有一種混合,其中某些個(gè)別計(jì)算機(jī)系統(tǒng)將使用新存儲(chǔ)平臺(tái),而其它個(gè)別計(jì)算機(jī)系統(tǒng)將繼續(xù)使用傳統(tǒng)存儲(chǔ)平臺(tái)。這在其中兩臺(tái)客戶(hù)機(jī)包括新存儲(chǔ)平臺(tái),但服務(wù)器包括傳統(tǒng)存儲(chǔ)平臺(tái)的任何客戶(hù)機(jī)-服務(wù)器結(jié)構(gòu)中尤其重要。因此,在這些情況下,使用新存儲(chǔ)平臺(tái)的兩臺(tái)計(jì)算機(jī)系統(tǒng)(“客戶(hù)機(jī)”)可能有必要通過(guò)使用傳統(tǒng)平臺(tái)的計(jì)算機(jī)系統(tǒng)(“中介”)同步。例如,某些客戶(hù)機(jī)可能使用諸如漫游擁護(hù)概況(RUP)或具有客戶(hù)機(jī)方高速緩存(CSC)的文件夾重定向等軟件在傳統(tǒng)漫游服務(wù)中登記。由于用于這些傳統(tǒng)存儲(chǔ)平臺(tái)的傳統(tǒng)漫游軟件不支持用于新存儲(chǔ)平臺(tái)的漫游數(shù)據(jù),因此用于新存儲(chǔ)平臺(tái)的新漫游服務(wù)是必需的。本發(fā)明的各實(shí)施例針對(duì)一種系統(tǒng)和方法,用于通過(guò)中介同步使用公用存儲(chǔ)平臺(tái)(例如,相關(guān)發(fā)明的新存儲(chǔ)平臺(tái))的客戶(hù)機(jī),而中介不使用同一公用存儲(chǔ)平臺(tái)(例如,作為替代,使用本身不支持新存儲(chǔ)平臺(tái)的同步的傳統(tǒng)存儲(chǔ)平臺(tái))。
A.中介的數(shù)據(jù)結(jié)構(gòu)本發(fā)明的若干實(shí)施例針對(duì)在復(fù)制品客戶(hù)機(jī)和非復(fù)制品中介之間存在和操作的“通過(guò)中介同步”(STI)適配器。對(duì)于這些實(shí)施例,STI適配器被設(shè)計(jì)成將來(lái)自復(fù)制品客戶(hù)機(jī)的改變枚舉的結(jié)果串行化到非復(fù)制品中介,以及將來(lái)自非復(fù)制品中介的這些改變結(jié)果反串行化到復(fù)制品客戶(hù)機(jī)。
圖41所示是其中兩臺(tái)客戶(hù)機(jī)必需通過(guò)中介同步的情形的框圖。圖中,使用傳統(tǒng)存儲(chǔ)平臺(tái)(例如,Win32)的中介計(jì)算機(jī)系統(tǒng)連接到都使用新存儲(chǔ)平臺(tái)(例如,此處描述的相關(guān)發(fā)明的實(shí)施例,為方便起見(jiàn),后文稱(chēng)為“WinLH”,WinLH包括此處所稱(chēng)的WinFS文件系統(tǒng),如圖所示)的客戶(hù)機(jī)A 4112和客戶(hù)機(jī)B 4114兩者。中介4102可以被認(rèn)為僅僅是從客戶(hù)機(jī)A 4112同步到客戶(hù)機(jī)B 4114以及從客戶(hù)機(jī)B 4114同步到客戶(hù)機(jī)A 4112的改變的“通過(guò)”。由此,中介4102本身不為其自身的目的而與客戶(hù)機(jī)A 4112或客戶(hù)機(jī)B 4114同步,并且因此不直接使用它從客戶(hù)機(jī)A 4112或客戶(hù)機(jī)B 4114接收到的任何改變數(shù)據(jù)。為此,使用本文中先前所使用的術(shù)語(yǔ),中介4102不是復(fù)制品,盡管作為復(fù)制品的客戶(hù)機(jī)A 4112和客戶(hù)機(jī)B都如同中介4102是復(fù)制品那樣通過(guò)“通過(guò)中介同步”(STI)適配器與其交互。
客戶(hù)機(jī)A 4112和客戶(hù)機(jī)B 4114分別通過(guò)STI適配器4122和4124與中介4102接口,所述STI適配器被特別地定制以在客戶(hù)機(jī)4112和4114的新存儲(chǔ)平臺(tái)和中介4102的特定傳統(tǒng)平臺(tái)之間接口。本發(fā)明的若干替換實(shí)施例針對(duì)對(duì)應(yīng)于中介可能需要與其同步的若干傳統(tǒng)存儲(chǔ)平臺(tái)的若干特定STI適配器。這使得客戶(hù)機(jī)4112和4114仍能夠如同中介4102是復(fù)制品那樣邏輯上與其同步(通過(guò)STI適配器4122和4114),盡管實(shí)際上使得同步成功的是對(duì)客戶(hù)機(jī)本地的STI適配器。
對(duì)于將改變枚舉的結(jié)果從復(fù)制品客戶(hù)機(jī)串行化到非復(fù)制品中介,每一串行化對(duì)應(yīng)于被被到要寫(xiě)入中介的文件的三元組中的一批改變。對(duì)于某些實(shí)施例,這些文件被寫(xiě)入對(duì)應(yīng)于特定同步共同體的特定文件夾(“共同體文件夾”),并且不同的同步共同體將具有不同的共同體文件夾。上述文件的三元組包括改變數(shù)據(jù)文件(CDF)、先決條件知識(shí)文件(PKF)、以及已獲知知識(shí)文件(LKF)。CDF包含涉及在改變單元級(jí)對(duì)于WinFS項(xiàng)目的特定改變的信息。PKF指定了同步對(duì)等體必須已經(jīng)知道什么以應(yīng)用相關(guān)聯(lián)的改變。另一方面,LKF指定了如果同步對(duì)等體應(yīng)用相關(guān)聯(lián)的改變,則它必須獲知什么。為了效率起見(jiàn),且類(lèi)似于對(duì)等同步,STI適配器僅串行化改變單元信息(“改變的部分”及其相關(guān)聯(lián)的元數(shù)據(jù)),且對(duì)于若干實(shí)施例,該數(shù)據(jù)可能僅包含(對(duì)于項(xiàng)目的特定改變)項(xiàng)目類(lèi)型、項(xiàng)目版本號(hào)、改變單元版本以及所改變的屬性的值。對(duì)于各實(shí)施例,文件的三元組使用基于串行化的消息序列的順序命名約定寫(xiě)入中介中(為了后文所討論的原因);例如,第一串行化可包含儲(chǔ)存為中介上的1.PKF(PKF文件)、1.CDF(CDF文件)和1.LKF(LKF)文件的三個(gè)文件,第二串行化可包括2.PKF、2.CDF和2.LKF,依此類(lèi)推。
B.STI適配器進(jìn)程對(duì)于本發(fā)明的若干實(shí)施例,STI適配器包括三個(gè)核心操作發(fā)送同步、接收同步和數(shù)據(jù)壓縮。
1.發(fā)送同步操作圖42所示是客戶(hù)機(jī)通過(guò)STI適配器向中介發(fā)送改變數(shù)據(jù)(“發(fā)送同步”操作)的步驟的流程圖。在步驟4202,STI適配器首先確認(rèn)中介上是否存在對(duì)應(yīng)于客戶(hù)機(jī)的同步共同體的共同體文件夾。如果是,則在步驟4204,STI適配器然后掃描和反串行化中介的共同體文件夾中的LKF的所有內(nèi)容,以確定對(duì)于該同步共同體的中介的本地知識(shí)(ILK)的當(dāng)前狀態(tài)。另一方面,如果沒(méi)有共同體文件夾,則在步驟4206ILK被認(rèn)為是空的,并且在中介上創(chuàng)建一共同體文件夾。
在步驟4208,STI適配器并發(fā)地獲取中介的共同體文件夾上的“寫(xiě)模式”進(jìn)程鎖(通過(guò)中介的文件系統(tǒng)),以通過(guò)防止其它客戶(hù)機(jī)(或其它對(duì)等體或進(jìn)程)在發(fā)送同步操作過(guò)程中讀取或?qū)懭牍餐w文件夾來(lái)保持?jǐn)?shù)據(jù)的完整性。在步驟4210,STI適配器然后將ILK傳遞到客戶(hù)機(jī)?;贗KL及其自己的客戶(hù)機(jī)本地知識(shí)(CLK),在步驟4212,客戶(hù)機(jī)確定是否有ILK沒(méi)有傳達(dá)的任何改變,如果否,則過(guò)程跳至步驟4220。另一方面,如果客戶(hù)機(jī)確定存在ILK沒(méi)有傳達(dá)的改變,則在步驟4214,客戶(hù)機(jī)準(zhǔn)備ILK沒(méi)有傳達(dá)的所枚舉的改變,并將它們傳遞到STI適配器。在步驟4216,STI適配器串行化每一批改變信息(改變數(shù)據(jù)和知識(shí)),并且在步驟4218,當(dāng)順序地遞增如上所述的文件的三元組時(shí),STI適配器然后將串行化的批量改變寫(xiě)入中介的共同體文件夾中。一旦所有的串行化的批量改變被寫(xiě)入中介中,在步驟4220,STI適配器然后釋放“寫(xiě)模式”進(jìn)程鎖,以允許其它客戶(hù)機(jī)(或其它對(duì)等體或進(jìn)程)檢查中介上更新的內(nèi)容。
盡管完成了發(fā)送同步操作,應(yīng)當(dāng)注意,STI適配器儲(chǔ)存了寫(xiě)入中介中的最后一個(gè)且最高的順序遞增的改變?nèi)M(HCT)的身份(或參考號(hào))以供以后參考(下文討論)。也應(yīng)當(dāng)注意,沒(méi)有執(zhí)行沖突處理作為發(fā)送同步操作的一部分。最后,對(duì)于其中客戶(hù)機(jī)僅“拉”數(shù)據(jù)(并且因此客戶(hù)機(jī)不啟動(dòng)發(fā)送同步操作)的對(duì)等實(shí)施例,并假定中介沒(méi)有用于啟動(dòng)它本身的功能,則STI適配器可代表中介主動(dòng)啟動(dòng)發(fā)送同步操作。
2.接收同步操作對(duì)于另一方向上的同步,圖43所示是客戶(hù)機(jī)通過(guò)STI適配器從中介接收改變數(shù)據(jù)(“接收同步”操作)的步驟的流程圖。在步驟4302,STI適配器首先接收客戶(hù)機(jī)本地知識(shí)(CLK),對(duì)于本發(fā)明的若干實(shí)施例,這在客戶(hù)機(jī)通過(guò)STI適配器向中介發(fā)送同步請(qǐng)求時(shí)發(fā)生,所述同步請(qǐng)求內(nèi)在地包括本文先前所討論的每一對(duì)等同步模式的CLK。在步驟4304,STI適配器然后獲取中介的共同體文件夾上的“讀模式”進(jìn)程鎖(通過(guò)中介的文件系統(tǒng)),以通過(guò)防止其它客戶(hù)機(jī)(或其它對(duì)等體或進(jìn)程)在接收同步操作過(guò)程中寫(xiě)入(但是對(duì)于某些實(shí)施例,并非讀取)共同體文件夾來(lái)保持?jǐn)?shù)據(jù)的完整性。對(duì)于某些實(shí)施例,“讀模式”可以被優(yōu)化成鎖定每一三元組而非整個(gè)目錄,以達(dá)到更好的并發(fā)性。
在步驟4306,對(duì)于由STI適配器為該中介儲(chǔ)存的HCT(例如,可以從先前討論的發(fā)送同步操作中獲得),STI適配器掃描中介上的共同體文件夾,以找出下一較高的改變?nèi)M,該三元組(a)順序上比HCT高,(b)對(duì)于該改變?nèi)M,CLK(客戶(hù)機(jī)本地知識(shí))多于先決條件知識(shí)(來(lái)自PKF),以及(c)對(duì)于該改變?nèi)M,CLK少于已獲知知識(shí)(來(lái)自LKF)。(這一改變?nèi)M此處被稱(chēng)為“適用改變?nèi)M”或“ACT”)。如果在步驟4308存在這樣一個(gè)改變?nèi)M(ACT),則在步驟4310,同步適配器將該改變?nèi)M(ACT)的內(nèi)容反串行化到復(fù)制品可理解的所枚舉的改變中,并且在步驟4312,將改變發(fā)送到客戶(hù)機(jī)以供處理。過(guò)程然后返回到步驟4306,以處理下一個(gè)ACT,并且該過(guò)程繼續(xù),直到?jīng)]有剩下的ACT,此時(shí)STI適配器在步驟4314解鎖讀模式,該過(guò)程結(jié)束。
3.中介文件數(shù)據(jù)壓縮/壓緊對(duì)于本發(fā)明的各實(shí)施例,常規(guī)地壓縮由STI適配器創(chuàng)建的串行化數(shù)據(jù)和知識(shí)文件是必需的;否則越來(lái)越多的改變?nèi)M將填滿中介上的所有可用空間。在這一點(diǎn)上,數(shù)據(jù)壓縮的目標(biāo)是確保數(shù)據(jù)和知識(shí)文件的增長(zhǎng)在中介上被適當(dāng)?shù)亟缍?。本發(fā)明的若干實(shí)施例采用的一種方法是在允許存在于共享文件系統(tǒng)上的改變分組的數(shù)據(jù)上設(shè)置“上限閾值”,一旦超過(guò)該閾值,要求能夠進(jìn)行壓縮的下溢STI適配器通過(guò)壓縮操作壓縮共享的文件系統(tǒng)(共同體文件夾中的文件)。壓縮操作通過(guò)以下步驟減少了儲(chǔ)存在共享文件系統(tǒng)中的數(shù)據(jù)量(a)壓縮個(gè)別現(xiàn)有對(duì)象的改變歷史,以及(b)移除已被刪除(通過(guò)沖突分解明確地刪除,或作為墓碑清除的結(jié)果刪除)的對(duì)象的改變廣播。然而,壓縮僅可以由剛執(zhí)行了接收同步且能夠立即執(zhí)行“全”發(fā)送同步(即,如同中介上沒(méi)有共同體文件夾那樣不帶零基線的全改變枚舉)的客戶(hù)機(jī)的STI適配器來(lái)實(shí)現(xiàn)。由此,壓縮不能由僅與中介完成發(fā)送同步或接收同步的客戶(hù)機(jī)執(zhí)行。
圖44所示是STI適配器(即,與可以進(jìn)行發(fā)送同步和接收同步兩者的客戶(hù)機(jī)相關(guān)聯(lián)的STI適配器)為中介上的共同體文件夾中的數(shù)據(jù)執(zhí)行壓縮操作(“壓縮”操作)的步驟的流程圖。在圖中,緊接著步驟4402處STI適配器的客戶(hù)機(jī)的成功接收同步操作之后,但是在釋放“讀模式”進(jìn)程鎖之前(即,緊接著圖43的步驟4312之后,但在步驟4314之前),在步驟4404,STI適配器核查中介上的共同體文件夾,來(lái)看是否超過(guò)了上限閾值;如果否,則過(guò)程結(jié)束(通過(guò)接收過(guò)程通過(guò)釋放鎖等來(lái)完成)。然而,如果超過(guò)了上限閾值,則在步驟4406,STI適配器刪除中介的共同體文件夾中所有的改變?nèi)M文件,然后在步驟4408,STI適配器通過(guò)向客戶(hù)機(jī)指示中介的知識(shí)不為空(在刪除之后,情況的確如此)著手啟動(dòng)客戶(hù)機(jī)和中介之間的全讀同步操作(包括寫(xiě)模式進(jìn)程鎖定)。結(jié)果,僅對(duì)應(yīng)于客戶(hù)機(jī)整個(gè)狀態(tài)的最小的一組三元組文件被上傳到中介且存在于中介上。
對(duì)于其中“讀模式”被優(yōu)化成鎖定每一三元組而非整個(gè)目錄以達(dá)到更好的并發(fā)性的那些實(shí)施例,且對(duì)于使用標(biāo)準(zhǔn)“讀模式”的本發(fā)明的其它替換事實(shí),該過(guò)程有略微的不同,其中,STI適配器在STI適配器獲得中介共同體文件夾上的“讀模式”進(jìn)程鎖(通過(guò)中介的文件系統(tǒng))(在圖43的步驟4304)之前檢查是否需要壓縮,如果需要壓縮,則使用標(biāo)準(zhǔn)(非優(yōu)化)的“讀模式”以通過(guò)防止其它客戶(hù)機(jī)(或其它對(duì)等體或進(jìn)程)在接收同步操作過(guò)程中寫(xiě)入(但是對(duì)于某些實(shí)施例,并非讀取)共同體文件夾來(lái)保持?jǐn)?shù)據(jù)的完整性。
對(duì)于某些替換實(shí)施例,中介上的數(shù)據(jù)在客戶(hù)機(jī)通過(guò)從第一個(gè)現(xiàn)有改變?nèi)M開(kāi)始蓋寫(xiě)現(xiàn)有改變?nèi)M來(lái)上傳所有改變?nèi)M之前不被刪除,一旦上傳了所有的改變?nèi)M(且重寫(xiě)了舊的改變?nèi)M),則序列號(hào)高于全讀同步過(guò)程中最后一個(gè)上傳的改變?nèi)M的所有剩余的改變?nèi)M被刪除。
最后,某些實(shí)施例也在完成了完整的讀同步操作(包括釋放讀模式進(jìn)程鎖)之后開(kāi)始?jí)嚎s。對(duì)于這類(lèi)實(shí)施例,該過(guò)程從獲得寫(xiě)模式進(jìn)程鎖開(kāi)始,然后繼續(xù)執(zhí)行先前提到的所有步驟。
C.STI和下級(jí)客戶(hù)機(jī)支持除上述以外,本發(fā)明的若干實(shí)施例針對(duì)先前所描述的通過(guò)中介同步技術(shù)的變體。某些實(shí)施例針對(duì)還包括也運(yùn)行傳統(tǒng)存儲(chǔ)平臺(tái)的客戶(hù)機(jī)的系統(tǒng),其中所述“傳統(tǒng)客戶(hù)機(jī)”也可以訪問(wèn)所有的數(shù)據(jù)文件。也預(yù)期某些傳統(tǒng)客戶(hù)機(jī)和其它應(yīng)用程序和進(jìn)程能夠?yàn)槠渌康亩L問(wèn)這些數(shù)據(jù)文件。例如,對(duì)于基于創(chuàng)建時(shí)間或某些其它固有文件特征同步文件的傳統(tǒng)客戶(hù)機(jī)。另一示例是直接訪問(wèn)任一或所有文件(例如,*.CDK文件)并復(fù)制它們的傳統(tǒng)客戶(hù)機(jī)。在許多方面,傳統(tǒng)客戶(hù)機(jī)可以在與直接與第一中介直接通信(可能使用傳統(tǒng)同步技術(shù))的第二中介相同的觀點(diǎn)來(lái)考慮,并且由此,多中介同步是可能的,且如此揭示。
IV.結(jié)論如之前所示,本發(fā)明針對(duì)用于組織、搜索以及共享數(shù)據(jù)的存儲(chǔ)平臺(tái)。本發(fā)明的存儲(chǔ)平臺(tái)擴(kuò)展并且擴(kuò)大了現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)之外的數(shù)據(jù)存儲(chǔ)的概念,并且被設(shè)計(jì)為用于所有類(lèi)型的數(shù)據(jù)的存儲(chǔ),包括結(jié)構(gòu)化的、非結(jié)構(gòu)化的、或者半結(jié)構(gòu)化的數(shù)據(jù)例如關(guān)系(表列)數(shù)據(jù)、XML,以及一種被稱(chēng)作項(xiàng)目的新形式的數(shù)據(jù)。通過(guò)其共同存儲(chǔ)函數(shù)和模式化的數(shù)據(jù),本發(fā)明的存儲(chǔ)平臺(tái)允許用于客戶(hù)、知識(shí)工作者以及企業(yè)的更有效的應(yīng)用開(kāi)發(fā)。它提供了豐富的并且可擴(kuò)展的應(yīng)用編程接口,所述接口不僅可以使用其數(shù)據(jù)模型中固有的性能,而且包含并擴(kuò)展了現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫(kù)訪問(wèn)方法??梢岳斫猓诓幻撾x其寬泛的發(fā)明概念的情況下,可以對(duì)以上所述的實(shí)施例進(jìn)行的改變。因此,本發(fā)明并不限于所公開(kāi)的特殊實(shí)施例,而是旨在由所附權(quán)利要求所規(guī)定的覆蓋本發(fā)明的精神和范圍內(nèi)的所有改變。
如根據(jù)以上所述變得很明顯的,本發(fā)明的各種系統(tǒng)、方法、以及方面的所有或者一部分可以以程序代碼(即,指令)的形式來(lái)體現(xiàn)。這種程序代碼可以被存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,例如磁的、電的或者光的存儲(chǔ)介質(zhì),在非限定情況下包括軟盤(pán)、CD-ROM、CD-RW、DVD-ROM、DVD-RAM、磁帶、閃速存儲(chǔ)器、硬盤(pán)驅(qū)動(dòng)器、或者其它機(jī)器可讀存儲(chǔ)介質(zhì),其中當(dāng)程序代碼被載入到機(jī)器例如計(jì)算機(jī)或服務(wù)器中并由機(jī)器執(zhí)行時(shí),所述機(jī)器就變成用于實(shí)施本發(fā)明的裝置。本發(fā)明還可以以在一些傳輸介質(zhì)上被傳輸?shù)某绦虼a的形式來(lái)體現(xiàn),在傳輸介質(zhì)上例如在電線或者電纜上、通過(guò)光纖、在網(wǎng)絡(luò)上,包括因特網(wǎng)或內(nèi)部網(wǎng),或者通過(guò)任何其它形式的傳輸,其中,當(dāng)程序代碼被接收并且被載入到機(jī)器例如計(jì)算機(jī)中并且由機(jī)器執(zhí)行時(shí),所述機(jī)器就變成用于實(shí)施本發(fā)明的裝置。當(dāng)在通用處理器上被實(shí)現(xiàn)時(shí),所述程序代碼與處理器相結(jié)合,以便提供類(lèi)似于特定邏輯電路的操作的唯一裝置。
權(quán)利要求
1.一種用于通過(guò)具有一不同存儲(chǔ)平臺(tái)(例如Win32)的中介計(jì)算機(jī)系統(tǒng)(“中介”)同步使用—公用存儲(chǔ)平臺(tái)(例如WinFS)的至少兩個(gè)計(jì)算機(jī)系統(tǒng)(每一個(gè)為“客戶(hù)機(jī)”)的方法,所述方法包括對(duì)駐留在每個(gè)客戶(hù)機(jī)上、并且將每個(gè)客戶(hù)機(jī)與所述中介接口的通過(guò)中介同步(STI)適配器的利用。
2.如權(quán)利要求1所述的方法,其特征在于,利用所述同步以支持?jǐn)?shù)據(jù)共享操作。
3.如權(quán)利要求1所述的方法,其特征在于,利用所述同步以支持最終用戶(hù)漫游。
4.如權(quán)利要求1所述的方法,其特征在于,所述公用存儲(chǔ)平臺(tái)是基于項(xiàng)目的存儲(chǔ)平臺(tái)。
5.如權(quán)利要求4所述的方法,其特征在于,客戶(hù)機(jī)的改變枚舉被串行化為存儲(chǔ)在所述中介上的至少一個(gè)文件。
6.如權(quán)利要求5所述的方法,其特征在于,對(duì)于單個(gè)串行化,所述至少一個(gè)文件包括以下的至少一個(gè)或多個(gè)用于改變數(shù)據(jù)(CD)的改變數(shù)據(jù)文件(CDF)、用于先決條件知識(shí)(PK)的先決條件知識(shí)文件(PKF)、以及用于已獲知知識(shí)(LK)的已獲知知識(shí)文件(LKF)。
7.如權(quán)利要求5所述的方法,其特征在于,所述同步包括第一客戶(hù)機(jī)和所述中介之間的發(fā)送同步操作,所述發(fā)送同步操作包括確定所述中介的已獲知知識(shí);如果所述第一客戶(hù)機(jī)具有未反映在所述中介的已獲知知識(shí)中的改變,則為所述中介準(zhǔn)備一組必要的改變;串行化所述必要的改變,并將所述改變寫(xiě)到所述中介;以及
8.如權(quán)利要求7所述的方法,其特征在于,所述發(fā)送同步操作還包括獲得寫(xiě)模式進(jìn)程鎖;以及釋放寫(xiě)模式進(jìn)程鎖。
9.如權(quán)利要求5所述的方法,其特征在于,所述同步包括第一客戶(hù)機(jī)和所述中介之間的接收同步操作,所述接收同步操作包括從所述中介反串行化一組必要的改變,并且將所述改變應(yīng)用于所述客戶(hù)機(jī)。
10.如權(quán)利要求9所述的方法,其特征在于,所述接收同步操作還包括獲得讀模式進(jìn)程鎖;以及釋放讀模式進(jìn)程鎖。
11.如權(quán)利要求5所述的方法,其特征在于,所述同步包括第一客戶(hù)機(jī)和所述中介之間的壓縮操作,所述壓縮操作包括執(zhí)行一成功的接收同步操作,而不釋放所述讀模式進(jìn)程鎖;刪除所有同步文件;以及執(zhí)行一全發(fā)送同步操作。
12.一種通過(guò)具有一不同存儲(chǔ)平臺(tái)(例如Win32)的中介計(jì)算機(jī)系統(tǒng)(“中介”)同步使用一公用存儲(chǔ)平臺(tái)(例如WinFS)的至少兩個(gè)計(jì)算機(jī)系統(tǒng)(每一個(gè)為“客戶(hù)機(jī)”)的系統(tǒng),所述系統(tǒng)包括利用駐留在每個(gè)客戶(hù)機(jī)上、并且將每個(gè)客戶(hù)機(jī)與所述中介接口的通過(guò)中介同步(STI)適配器的至少一個(gè)子系統(tǒng)。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,利用所述同步以支持?jǐn)?shù)據(jù)共享操作。
14.如權(quán)利要12所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,利用所述同步以支持最終用戶(hù)漫游。
15.如權(quán)利要求12所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,每一所述公用存儲(chǔ)平臺(tái)是基于項(xiàng)目的存儲(chǔ)平臺(tái)。
16.如權(quán)利要求15所述的方法,其特征在于,還包括至少一個(gè)子系統(tǒng),其中,客戶(hù)機(jī)的改變枚舉被串行化為存儲(chǔ)在所述中介上的至少一個(gè)文件(每一個(gè)為“同步文件”)。
17.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,對(duì)于單個(gè)串行化,所述至少一個(gè)文件包括以下的至少一個(gè)或多個(gè)用于改變數(shù)據(jù)(CD)的改變數(shù)據(jù)文件(CDF)、用于先決條件知識(shí)(PK)的先決條件知識(shí)文件(PKF)、以及用于已獲知知識(shí)(LK)的已獲知知識(shí)文件(LKF)。
18.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的發(fā)送同步操作,所述發(fā)送同步操作包括確定所述中介的已獲知知識(shí);如果所述第一客戶(hù)機(jī)具有未在所述中介的已獲知知識(shí)中反映的改變,則為所述中介準(zhǔn)備一組必要的改變。串行化所述一組必要的改變,并將所述改變寫(xiě)到所述中介;以及
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,所述發(fā)送同步操作還包括獲得寫(xiě)模式進(jìn)程鎖;以及釋放寫(xiě)模式進(jìn)程鎖。
20.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的接收同步操作,所述接收同步操作包括從所述中介反串行化一組必要的改變,并且將所述改變應(yīng)用于所述客戶(hù)機(jī)。
21.如權(quán)利要求20所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,所述接收同步操作還包括獲得讀模式進(jìn)程鎖;以及釋放讀模式進(jìn)程鎖。
22.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括至少一個(gè)子系統(tǒng),其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的壓縮操作,所述壓縮操作包括執(zhí)行一成功的接收同步操作,而不釋放所述讀模式進(jìn)程鎖;刪除所有同步文件;以及執(zhí)行一全發(fā)送同步操作。
23.一種包含計(jì)算機(jī)可讀指令的計(jì)算機(jī)可讀介質(zhì),所述指令用于通過(guò)具有一不同存儲(chǔ)平臺(tái)(例如Win32)的中介計(jì)算機(jī)系統(tǒng)(“中介”)同步使用—公用存儲(chǔ)平臺(tái)(例如WinFS)的至少兩個(gè)計(jì)算機(jī)系統(tǒng)(每一個(gè)為“客戶(hù)機(jī)”),所述計(jì)算機(jī)可讀指令包括利用駐留在每個(gè)客戶(hù)機(jī)上、并將每個(gè)客戶(hù)機(jī)與所述中介接口的通過(guò)中介同步(STI)適配器的指令。
24.如權(quán)利要求23所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,利用同步以支持?jǐn)?shù)據(jù)共享操作。
25.如權(quán)利要求23所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,利用同步以支持最終用戶(hù)漫游。
26.如權(quán)利要求23所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述公用存儲(chǔ)平臺(tái)是基于項(xiàng)目的存儲(chǔ)平臺(tái)。
27.如權(quán)利要求26所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,客戶(hù)機(jī)的改變枚舉被串行化為存儲(chǔ)在所述中介上的至少一個(gè)文件(每一個(gè)為“同步文件”)。
28.如權(quán)利要求27所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,對(duì)單個(gè)串行化,所述至少一個(gè)文件包括以下的至少一個(gè)或多個(gè)用于改變數(shù)據(jù)(CD)的改變數(shù)據(jù)文件(CDF)、用于先決條件知識(shí)(PK)的先決條件知識(shí)文件(PKF)、以及用于已獲知知識(shí)(LK)的已獲知知識(shí)文件(LKF)。
29.如權(quán)利要求27所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的發(fā)送同步操作,所述發(fā)送同步操作包括確定所述中介的已獲知知識(shí);如果所述第一客戶(hù)機(jī)具有未在所述中介的已獲知知識(shí)中反映的改變,則為所述中介準(zhǔn)備一組必要的改變;串行化所述必要的改變,并且將所述改變寫(xiě)到所述中介;以及
30.如權(quán)利要求29所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述發(fā)送同步操作還包括獲得寫(xiě)模式進(jìn)程鎖;以及釋放寫(xiě)模式進(jìn)程鎖。
31.如權(quán)利要求27所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的接收同步操作,所述接收同步操作包括從所述中介反串行化一組必要的改變,并且將所述改變應(yīng)用于到所述客戶(hù)機(jī)。
32.如權(quán)利要求31所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述接收同步操作還包括獲得讀模式進(jìn)程鎖;以及釋放讀模式進(jìn)程鎖。
33.如權(quán)利要求27所述的計(jì)算機(jī)可讀指令,其特征在于,還包括指令,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的壓縮操作,所述壓縮操作包括執(zhí)行一成功的接收同步操作,而不釋放所述讀模式進(jìn)程鎖;刪除所有同步文件;以及執(zhí)行一全發(fā)送同步操作。
34.一種用于通過(guò)具有一不同存儲(chǔ)平臺(tái)(例如Win32)的中介計(jì)算機(jī)系統(tǒng)(“中介”)同步使用一公用存儲(chǔ)平臺(tái)(例如WinFS)的至少兩個(gè)計(jì)算機(jī)系統(tǒng)(每一個(gè)為“客戶(hù)機(jī)”)的硬件控制設(shè)備,所述硬件控制設(shè)備包括利用駐留在每個(gè)客戶(hù)機(jī)上、并將每個(gè)客戶(hù)機(jī)與所述中介接口的通過(guò)中介同步(STI)適配器的裝置。
35.如權(quán)利要求34所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,利用所述同步以支持?jǐn)?shù)據(jù)共享操作。
36.如權(quán)利要求34所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,利用所述同步以支持最終用戶(hù)漫游。
37.如權(quán)利要求34所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,所述公用存儲(chǔ)平臺(tái)是基于項(xiàng)目的存儲(chǔ)平臺(tái)。
38.如權(quán)利要求37所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,客戶(hù)機(jī)的改變枚舉被串行化為存儲(chǔ)在所述中介上的至少一個(gè)文件(每一個(gè)為“同步文件”)。
39.如權(quán)利要求38所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,對(duì)于單個(gè)串行化,所述至少一個(gè)文件包括以下的至少一個(gè)或多個(gè)用于改變數(shù)據(jù)(CD)的改變數(shù)據(jù)文件(CDF)、用于先決條件知識(shí)(PK)的先決條件知識(shí)文件(PKF)、以及用于已獲知知識(shí)(LK)的已獲知知識(shí)文件(LKF)。
40.如權(quán)利要求38所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的發(fā)送同步操作,所述發(fā)送同步操作包括確定所述中介的已獲知知識(shí);如果所述第一客戶(hù)機(jī)具有未在所述中介的已獲知知識(shí)中反映的改變,則為所述中介準(zhǔn)備一組必要的改變;串行化所述必要的改變,并且將所述改變寫(xiě)到所述中介;以及
41.如權(quán)利要求40所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,所述發(fā)送同步操作還包括獲得寫(xiě)模式進(jìn)程鎖;以及釋放寫(xiě)模式進(jìn)程鎖。
42.如權(quán)利要求38所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的接收同步操作,所述接收同步操作包括從所述中介反串行化一組必要的改變,并且將所述改變應(yīng)用于所述客戶(hù)機(jī)。
43.如權(quán)利要求42所述的硬件控制設(shè)備,其特征在于,還包括裝置,其中,所述接收同步操作還包括獲得讀模式進(jìn)程鎖;以及釋放讀模式進(jìn)程鎖。
44.如權(quán)利要求38所述的硬件控制裝置,其特征在于,還包括裝置,其中,所述同步包括第一客戶(hù)機(jī)和所述中介之間的壓縮操作,所述壓縮操作包括執(zhí)行一成功的接收同步操作,而不釋放所述的讀模式進(jìn)程鎖;刪除所有同步文件;以及執(zhí)行一全發(fā)送同步操作。
全文摘要
本發(fā)明針對(duì)同步使用公用存儲(chǔ)平臺(tái)(例如,相關(guān)發(fā)明的新存儲(chǔ)平臺(tái))的兩臺(tái)客戶(hù)機(jī),以通過(guò)不使用同一公用存儲(chǔ)平臺(tái)(例如,作為替代使用本身不支持新存儲(chǔ)平臺(tái)的同步的傳統(tǒng)存儲(chǔ)平臺(tái))的中介來(lái)同步的系統(tǒng)和方法。數(shù)據(jù)使用中介的現(xiàn)有能力來(lái)同步,但是其中保持了客戶(hù)機(jī)的數(shù)據(jù)結(jié)構(gòu)。使用了一“適配器”通過(guò)補(bǔ)償中介的無(wú)力來(lái)保持客戶(hù)機(jī)存儲(chǔ)平臺(tái)固有的數(shù)據(jù)結(jié)構(gòu)元素,使得客戶(hù)機(jī)能夠與中介交互。特定的實(shí)施例針對(duì)將數(shù)據(jù)從客戶(hù)機(jī)上傳同步到中介和/或?qū)?shù)據(jù)從中介下載同步到客戶(hù)機(jī)。某些附加實(shí)施例還針對(duì)壓縮中介上的數(shù)據(jù)。
文檔編號(hào)H04L29/08GK1781096SQ200480003285
公開(kāi)日2006年5月31日 申請(qǐng)日期2004年7月29日 優(yōu)先權(quán)日2003年8月21日
發(fā)明者D·沙, L·諾威科, M·W·托瑪斯, N·H·珀?duì)柭? O·埃齊魯 申請(qǐng)人:微軟公司