欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

管理電子文件系統(tǒng)中的列表和其它項的制作方法

文檔序號:6651121閱讀:246來源:國知局
專利名稱:管理電子文件系統(tǒng)中的列表和其它項的制作方法
技術領域
本發(fā)明的各方面一般針對管理諸如利用能訪問一個或多個項存儲的有向無環(huán)圖體系結構的電子文件系統(tǒng)等電子文件系統(tǒng)中的項。
背景技術
現代電子文件系統(tǒng)一般在分層的樹結構中存儲文件。樹的每一節(jié)點被認為是含有一個或多個文件的文件夾。通常,在這樣的電子文件系統(tǒng)中,項的位置受文件系統(tǒng)定義的組織所限制。例如,在眾多文件系統(tǒng)中,每一文件位于一個(且僅一個)文件夾中。換言之,每一文件只有一個直接父節(jié)點。盡管在多年前,這可能是良好的,但是這樣的樹結構正變得相當限制。傳統(tǒng)的分層樹結構是不靈活的;在樹中,文件生存周期和文件組織是合并的。即,僅當文件擁有相對于其它文件或文件夾所組織的位置時,文件才能夠存在。另外,文件不能被放置在多個組織中。這意味著如果用戶想要在多個文件夾中查看一個文件,例如,用戶必須制作該文件的多個副本。這對用戶而言是乏味且易出錯的,并浪費存儲空間。
需要開發(fā)一種更容易地允許用戶共享對文件的訪問以及控制該訪問的新的電子文件系統(tǒng)組織結構。有了該組織結構,在管理該組織結構中的項中出現新的挑戰(zhàn)。

發(fā)明內容
本發(fā)明的各方面針對提供一種允許在有向無環(huán)圖(DAG)中組織項的電子文件系統(tǒng)組織結構。這意味著盡管項可以如在樹結構中那樣被分層地組織,項也可以有多個直接父項。DAG組織結構允許多個父項但是不允許子項是作為該項的直接或間接父項的項的父項。換言之,DAG允許多個分支進入或離開項,但是不允許環(huán)狀分支。該組織結構提供了適當地處理多用戶文件共享和訪問控制所需的靈活性。
本發(fā)明的其它方面針對提供能訪問多個不同存儲的電子文件系統(tǒng)。存儲是數據的內部一致性表示。存儲可以橫跨多個物理存儲設備(例如,硬盤),但是文件系統(tǒng)在概念上認為存儲是一個存儲單元。存儲可以保證該存儲內的項和該存儲內的持有鏈接,但是不保證另一個存儲中的項和持有鏈接。另外,項生存周期和鏈接一致性的規(guī)則可以在相同的存儲內應用,但是不必跨越不同存儲。在某些實施例中,項可以僅擁有與其處于相同存儲中的一個或多個父項。換言之,父項和子項之間的持有鏈接不跨越存儲。
本發(fā)明的另外一些方面處理當跨不同存儲操縱和重新組織項時如何管理這些項。例如,這些方面處理對擁有全部都在相同的第一存儲中的多個直接父項的項會發(fā)生什么,項將移至或復制到第二不同存儲的哪里。盡管可能存在一種以上方法來管理這樣的操作,但是某些方法可能更緊密地匹配用戶的意圖和/或從用戶觀點來看具有更多可預測的結果。
考慮下文對說明性實施例的詳細描述,本發(fā)明的這些和其它方面會變得顯而易見。


當結合附圖閱讀時,能更好地理解前述對本發(fā)明的概述,以及下文中對說明性實施例的詳細描述,附圖作為示例而非作為關于所要求保護的本發(fā)明的限制而被包括在內。
圖1是可用于本發(fā)明的各方面的說明性計算設備的功能框圖。
圖2根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲移動項的步驟。
圖3根據本方面的至少一個方面在功能上示出了可以被采取來移回項的步驟,從而該步驟是圖2所示的操作的逆操作。
圖4根據本發(fā)明的至少一個方面在功能上示出了可以被采取來將項添加至列表的步驟。
圖5根據本發(fā)明的至少一個方面在功能上示出了可以被采取來將項從列表中移除的步驟。
圖6根據本發(fā)明的至少一個方面在功能上示出了可以被采取來復制項的步驟。
圖7根據本發(fā)明的至少一個方面在功能上示出了可以被采取來在相同的存儲內移動列表的步驟。
圖8根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“淺”移動列表的步驟。
圖9根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“淺”移回列表的步驟,從而該步驟是圖8中所示的操作的逆操作。
圖10根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“結構”移動列表的步驟。
圖11根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“結構”移回列表的步驟,從而該步驟是圖10中所示的操作的逆操作。
圖12根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“深”移動列表的步驟。
圖13根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“深”移回列表的步驟,從而該步驟是圖12中所示的操作的逆操作。
圖14根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“淺”復制列表的步驟。
圖15根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“結構”復制列表的步驟。
圖16根據本發(fā)明的至少一個方面在功能上示出了可以被采取來跨存儲“深”復制列表的步驟。
圖17根據本發(fā)明的至少一個方面在功能上示出了可以被采取來擦去列表的步驟。
圖18根據本發(fā)明的至少一個方面在功能上示出了可以被采取來回收列表的步驟。
具體實施例方式
說明性計算環(huán)境本發(fā)明的各方面可以結合諸如圖1中說明性地示出的計算機100等計算設備來使用。計算機100的組件可以包括,但不限于,處理單元120、系統(tǒng)存儲器130和將包括系統(tǒng)存儲器130在內的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線和使用各種總線體系結構中的任一種的局部總線。
系統(tǒng)存儲器130包括易失性或非易失性存儲器形式的計算機存儲介質,諸如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132?;据斎?輸出系統(tǒng)133(BIOS)包含有助于諸如啟動時在計算機100中元件之間傳遞信息的基本例程,它通常存儲在ROM 131中。RAM 132通常包含處理單元120可以立即訪問和/或目前正在操作的數據和/或程序模塊。計算機100也存儲和/或執(zhí)行操作系統(tǒng)134、一個或多個應用程序135、其它程序模塊136和/或程序數據137。計算機100也可以包括其它可移動/不可移動、易失性/非易失性計算機存儲介質。僅作為示例,圖1示出了從不可移動、非易失性磁介質中讀取或向其寫入的硬盤驅動器141,從可移動、非易失性磁盤152中讀取或向其寫入的磁盤驅動器151,以及從諸如CD ROM或其它光學介質等可移動、非易失性光盤156中讀取或向其寫入的光盤驅動器155。可以使用的其它可移動/不可移動、易失性/非易失性計算機存儲介質包括,例如,盒式磁帶、閃存卡、數字多功能盤、數字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅動器141通常由不可移動存儲器接口,諸如接口140連接至系統(tǒng)總線121,磁盤驅動器151和光盤驅動器155通常由可移動存儲器接口,諸如接口150連接至系統(tǒng)總線121。在所示示例中,硬盤驅動器141例如可以被認為是一個存儲,而在光盤驅動器155中使用的CD ROM可以被認為是另一個不同的存儲。另外,硬盤驅動器141內的分區(qū)可以被認為是不同的存儲。作為另一個示例,多個內置硬盤驅動器可以按所需的被配置為單個大存儲或多個較小的獨立存儲。
存儲在各個計算機存儲介質中任何一個上的數據可以用各種格式來存儲。例如,數據可以存儲在諸如文件或其它項等離散的部分中。電子文件系統(tǒng)可以是操作系統(tǒng)134的一部分和/或可以從操作系統(tǒng)中分離,它可以負責管理存儲、檢索和/或搜索計算機存儲介質上的項和其它數據。電子文件系統(tǒng)可以被實現為軟件、硬件和/或固件。
用戶可以通過輸入設備,諸如鍵盤162和/或定點設備161(通常指鼠標、跟蹤球或觸摸墊)向計算機100輸入命令和信息。其它輸入設備(未示出)可以包括麥克風、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設備通常由耦合至系統(tǒng)總線121的用戶輸入接口160連接至處理單元120,但也可以由其它接口或總線結構,諸如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器191或其它類型的顯示設備也經由接口,諸如視頻接口190連接至系統(tǒng)總線121。計算機100還可以包括其它外圍輸出設備,諸如揚聲器197和打印機196,它們可以通過輸出外圍接口195連接至系統(tǒng)總線121。
在某些方面,提供了筆數字化儀165和附屬的筆或觸針166,以數字化地捕捉手畫線輸入。盡管示出了筆數字化儀165和用戶輸入接口160之間的直接連接,但在實際上,筆數字化儀165可以直接地、通過并行端口或其它接口以及通過系統(tǒng)總線121或者有線或者無線地來耦合至處理器單元120。筆166還可以含有用于確定電子墨跡的筆劃的其它傳感系統(tǒng),包括例如加速計和磁強計。
計算機100可使用至一個或多個遠程計算機,諸如遠程計算機180的邏輯連接在網絡化環(huán)境下操作。遠程計算機180可以是個人計算機、服務器、路由器、網絡PC、對等設備或其它常見網絡節(jié)點,且通常包括上文相對于計算機100描述的許多或所有元件,盡管在圖1中僅作為示例示出存儲器存儲設備181。如圖1中所示計算機100外部的說明性的邏輯連接包括局域網(LAN)171和/或廣域網(WAN)173,且也可以包括其它網絡。這樣的聯網環(huán)境在辦公室、企業(yè)范圍計算機網絡、內聯網和因特網中是常見的。計算機100還可以包括有線和/或無線能力。例如,網絡接口170可以是藍牙、SWLan和/或IEEE 802.11兼容的。可以理解,可以結合這些協議或替代這些協議來使用其它無線通信協議。
當在LAN網絡環(huán)境中使用時,計算機100通過網絡接口或適配器170連接至局域網171。當在WAN網絡環(huán)境中使用時,計算機100通常包括調制解調器172或用于通過諸如因特網等WAN 173建立通信的其它裝置。調制解調器172可以是內置或外置的,它可以通過用戶輸入接口160或其它合適的機制連接至系統(tǒng)總線121。
計算機100外部的遠程計算機180和/或其它設備的存儲介質也可被認為是可由電子文件系統(tǒng)通過計算機100外部的邏輯連接來訪問的附加存儲。例如,遠程計算機180的硬盤驅動器可以由在計算機100上執(zhí)行的電子文件系統(tǒng)訪問,且硬盤驅動器(和/或諸如另一個硬盤驅動器等與硬盤驅動器組合的其它存儲設備)本身也可被認為是存儲?;蛘撸嬎銠C100外部的一個或多個服務器可以由電子文件系統(tǒng)通過因特網來訪問,且這些服務器或服務器組中的每一個可以被認為是存儲。
電子文件系統(tǒng)所利用的說明性組織結構在計算機100上執(zhí)行的電子文件系統(tǒng)可以利用項的有向無環(huán)圖(DAG)組織。項可以是幾乎任何類型的離散數據結構,諸如文件(例如,文字處理文件、照片、MP3歌曲等)、聯系人、日歷項、電子郵件項或者甚至是其它項的列表。列表類型的項可以是或可以不是已排序列表,且可以被認為是類似于傳統(tǒng)文件夾。當列表列出項時,該列表被認為是父項,而該項被認為是子項。此處,如果項是由父列表列出的,子項被稱為直接在父列表下組織。這也被稱為父列表和子項之間的持有關系。此處,如果項是在父列表下直接或間接組織的,則子項被稱為在父列表下組織,如下文關于圖7所示的。為了提供完全DAG體系結構的添加的靈活性,多個不同的列表可以都列出或在下方含有相同的項。換言之,一個項可以擁有多個父項。
例如,圖7的頂端部分在功能上示出了可以由電子文件系統(tǒng)利用和管理的說明性組織結構。在該示例中,列表L2直接在列表L1、列表L4和列表L6中的每一個下組織。這樣,列表L2擁有三個直接父項。列表L3直接在列表L2下組織,但是它也在列表L1、L6和L4下(雖然是間接地)組織。非列表項I1(例如,文件或純粹不用文件流來模式化的背后無文件(non-file-backed)項)直接在列表L3下組織,并間接在列表L1、L2、L4和L6下組織。非列表項I2直接在列表L2下組織,且間接在列表L1、L4和L6下組織。
另外,電子文件系統(tǒng)可以提供在其中可以放置一個或多個項的一個或多個工作空間。工作空間中的項可以擁有或不擁有相對于該工作空間中另一個項的組織。例如,項L1、L2、L3、L4、L6、I1和I2可以在相同的工作空間中,該工作空間可以在功能上看作是封住這些項的盒子。這些項中的每一個擁有相對于其它項的組織。然而,列表L5(圖7)也可以位于相同的工作空間中但可以不擁有相對于其它項的組織。在該示例中,列表L5被認為是“浮動”項,如同列表L1和L4一樣。如果項沒有被任何其它項持有或在任何其它項之下組織,那么該項是浮動項。如果項被置于工作空間中,它將保持在該工作空間中直到它被從工作空間中移除。這樣,在工作空間內,項可以按照(或者可以不按照)所需的組織,而不影響該項是否在工作空間內。
一旦利用了上述的組織結構,存在管理項時需要考慮的某些問題。例如,因為項可以直接或間接地在一個以上父列表下組織,因此存在多種可能的方式來處理移動或復制項的請求??赡苡脩粝胍獜囊粋€父列表處而不必從其它父列表處移動項。事實上,用戶可能甚至不知道其它父列表的存在或它們持有試圖移動的項。以下描述這些情景的示例和說明性解決方案。
非列表項操作以下是可以在項上執(zhí)行的操作的示例。操作可以在同一存儲內或跨存儲(“橫跨存儲”)進行。例如,項可以從一個位置移動到同一存儲內的另一個位置?;蛘撸椏梢詸M跨存儲從一個存儲移至另一個存儲。下文將描述這兩者的示例。
移動項-橫跨存儲為討論的目的,假定持有鏈接不能橫跨存儲。從而,如果項同時位于第一存儲的兩個不同組織中(例如,在兩個不同的列表中),且如果用戶試圖將這些組織中的一個移動至第二存儲,那么存在處理該問題的若干可能的方式。參考圖2,例如,項I1同時由存儲1中的列表L1和L2持有。存儲2含有列表L3。假設用戶想要將項I1從列表L2移動至列表L3。第一種可能是,將項I1移動至存儲2以使得位于列表L3中。然而,這可能打破I1也位于列表L1和L2的組織。這可能不是用戶的意圖,尤其考慮用戶可能沒有與列表L1交互過,且實際上甚至可能不知道列表L1。第二種可能是項I1將被復制到列表L3。然而,這也會改變整個組織,因為現在將有項I1的兩個副本。這可能不是期望的結果,因為用戶想要移動項I1(而不是復制項I1),這可能是為了釋放存儲1的存儲空間。第三種可能是移動操作可能失敗,但是大多數用戶會覺得該結果是令人惱怒的。第四種可能是將項I1轉化為代理項。代理項是對被指向項(即項I1)的元數據的快捷方式或指針。第四種可能允許組織盡可能接近地模擬移動前的組織。
參考顯示了第四種可能的圖2,使用有圓圈的數字顯示步驟(不必按照順序排列),而將項顯示為框。如該示例中所示,在步驟1和2中,項I1從存儲1的列表L2移動至存儲2中的列表L3。具體地,在步驟1中,項I1被串行化為二進制大對象(blob)B1,B1表示項I1的副本。然后,在步驟2中,二進制大對象B1被反串行化為項I1(2),該項由列表L3持有。盡管在此處將該新的項稱為項I1(2),然而項I1(2)是原始項I1的副本。命名方案僅用于討論的目的,且僅用于區(qū)分項I1(2)在技術上不是原始的項I1。換言之,項I1(2)可以利用不同于原始項I1的存儲(例如,不同的硬盤驅動器上的不同扇區(qū)),即使它在其它方面是項I1的副本。副本可以通過將項(例如,項I1)串行化為二進制大對象且然后將該二進制大對象反串行化為另一個項(例如,項I1(2))來制作。
仍舊參考圖2,在步驟3中,項I1被轉化為指向項I1(2)的快捷方式(或代理項)。代理項是指向或鏈接至目標項但不含有目標項的所有實質數據的項。其原因是用戶僅想要從列表L2中移動項I1,但是不必也從也擁有項I1上的持有鏈接的列表L1中移動。這樣,通過創(chuàng)建對項I1(2)的代理項,在列表L1下方觀察的用戶仍舊將看到項I1好像它從未被移動操作影響。這可能是僅請求從列表L2中移動項I1而沒有涉及列表L1的用戶的意圖。同樣,通過重置或將項I1轉化為代理項,釋放了存儲1中的存儲空間,這與用戶將項I1從存儲1移動到存儲2的意圖一致。如果原始項I1被維護在存儲1中,因為它也被列表L1持有,那么移動操作可能沒有釋放存儲1中的存儲空間。這樣的結果可能與用戶的意圖相背。最后,在步驟4中,列表L2和項I1之間的關系被這樣處理,使得項I1不再由列表L2列出,如用戶可能的意圖。這樣,結果是項I1現在由列表L1(雖然作為代理項)和列表L3列出,但是不由列表L2列出。
移回項-橫跨存儲如前所述,可能想要以最可能匹配用戶期望和希望的可預測方式在項上操作。這包括可逆性。換言之,可能希望通過啟動改變一個或多個項的組織的第一動作,且然后通過執(zhí)行逆動作,組織應該還原為第一動作之前存在的原始組織。盡管可逆性不是必須的,但是對此處描述某些或全部操作可能是合乎需要的。例如,如果用戶最初如關于圖2描述的將項I1移動至列表L3,那么然后如果用戶立即執(zhí)行將項I1(2)移動至列表L2的移動操作,那么所得的組織較佳地應當與最初的移動操作之前的原始組織相同。這在圖3中說明性地示出。首先,在步驟1中,項I1(2)被串行化為表示項I1(2)的副本的二進制大對象B1。在步驟2中,確定是否存在目標是將被移動的項的代理項。在該示例中,這樣的代理項的確存在;代理項I1目標為將被移動的項I1(2)。如果這樣的代理項存在,那么該代理項被移除并使用項I1(2)的副本替換,在這一情況下,項I1(2)的副本也被稱為項I1。如果這樣的代理項不存在,那么不需移除或替換代理項。在任一情況下,項I1(2)被復制為項I1,項I1可通過將二進制大對象B1反串行化為項I1來完成。在步驟3中,因為項I1(2)僅由單個列表-列表L3列出,因此不需在列表L3下創(chuàng)建項I1的代理項。這樣,項I1(2)從列表L3中移除(并從存儲2中擦去)。由此,將項I1(2)移回列表L2的結果是與圖2所示的原始組織相同的組織。
添加項圖4示出了其中項I1被添加至列表L1的說明性實施例。在該示例中,可以執(zhí)行其中在項I1和列表L1之間創(chuàng)建持有關系的單個步驟,使得列表L1持有項I1。當然,項I1也可以被添加至其它列表,因為多個列表可以持有相同的項。另外,項I1也可以被添加,使得它不被任何列表所持有。這樣的項在此處被稱為浮動項。
移除項圖5示出了其中從列表L1中移除項I1(但是沒有被回收或擦去)的說明性實施例。在這一情況下,項I1僅由列表L1持有,所以一旦從列表L1中移除,項I1稱為不被任何列表持有的浮動項。如果項I1也被例如列表L2等其它列表所持有,那么從列表L1移除項I1的結果可能是項I1僅由列表L2持有。
復制項-同一存儲參考圖6中示出的說明性實施例,用戶可以請求在同一存儲中復制項I1。一種可能是副本(項I1(2))被創(chuàng)建為浮動項。另一種可能是項I1(2)以與原始項I1相同的方式來組織。在后一情況下,在步驟1中,項I1被串行化為表示項I1的副本的二進制大對象B1。然后在步驟2中,二進制大對象B1被反串行化為項I1(2),并建立列表L1和項I1(2)之間的持有關系以匹配原始項I1和列表L1之間的持有關系。如果項I1由列表L1和另一個列表L2兩者所持有,則項I1(2)仍舊被復制,使得它僅由列表L1所持有。這是因為在該示例中,原始項I1在列表L1的上下文中被復制,而列表L1的上下文中的動作不會影響諸如列表L2等其它獨立列表。
列表操作上述示例處理非列表項上的操作。可以執(zhí)行非列表項上的其它操作,諸如回收和擦去。另外,也可以在列表上執(zhí)行操作。這些被稱為列表操作。例如,列表可以被復制、移動、添加、刪除、回收或擦去?,F在描述列表操作的示例。取決于如何執(zhí)行列表操作,列表操作可以或多或少地影響圍繞所選擇的一個或多個列表的組織。
移動列表-同一存儲例如,列表可以在同一存儲內被移動。這可以是相當直截了當的操作,諸如圖7中所示的。這里,用戶想要將列表L2從從列表L1移至列表L5。這樣,從列表L1到列表L2的持有鏈接被打破,且從列表L5至列表L2建立了新的持有鏈接。因為該移動是在同一存儲內做出的,因此無需影響諸如列表L3、L4和L6以及項I1和I2等剩余組織。
淺移動列表淺-橫跨存儲此處描述的是存儲之間的列表移動操作的三種形式。在第一種形似中,可以諸如圖8中所示的執(zhí)行“淺”移動。淺移動也被稱為淺移動列表操作,它僅移動所選列表。這樣,例如,當用戶想要將列表L2從存儲1的列表L1中淺移動至存儲2中的列表L5時,可以執(zhí)行下列步驟。在步驟1中,列表L2被串行化來創(chuàng)建表示列表L2的副本的二進制大對象B1。在步驟2中,二進制大對象B1被反串行化為列表L2(2),它是列表L2的副本。在步驟3中,因為僅有所選擇的列表L2應該被移動至存儲2中,所以創(chuàng)建列表L3的代理項,且創(chuàng)建從列表L2(2)至該代理項的持有鏈接。類似地,在步驟4中,創(chuàng)建項I2的代理項,且創(chuàng)建從列表L2(2)至該代理項的持有鏈接。這樣,所得的組織是僅有所選擇的列表L2本身被移動。在步驟5中,因為原始項L2由另一個列表(即,列表L6)所持有,因此項L2不應該被簡單地擦去。否則,這會擾亂不被明確請求改變的組織。如前所述,用戶僅想要從列表L1中而非任何其它列表中移動列表L2。這樣,項L2或者被替換或者被轉化為L2(2)的代理項,使得它仍舊可以被列表L6引用(在同一存儲內)。在步驟6和7中,因為原始列表L2不再存在于存儲1中,而是成為存儲2中的列表L2(2),所以不再存在對列表L2和列表L3之間以及列表L2和項I2之間的持有鏈接的任何需求。這樣,移除這些持有鏈接。因為項I2不再由任何其它列表所持有,因此項I2成為浮動項。作為這些操作的結果,存儲2現在含有列表L2(2),列表L2(2)持有指向存儲1中的列表L3和項I2的代理項。
淺移回列表-橫跨存儲如前所述,當執(zhí)行操作時,可能希望其逆操作會得到原始組織?,F在在圖9中示出這樣的情景,其中用戶想要將列表L2(2)從存儲2中的列表L5中移動至存儲1中的列表L1。在步驟1中,列表L2(2)被串行化以創(chuàng)建表示列表L2(2)的副本的二進制大對象B1。在步驟2中,確定存儲1中是否存在列表L2(2)的代理項。在這一情況下,這樣的代理項的確存在,使得使用二進制大對象B1替換該代理項,二進制大對象B1被反串行化為列表L2。換言之,解除列表L2的遠程代理項對本地存儲1的引用。同樣,按照用戶請求,列表L2被添加至列表L1。如果這樣的代理項不存在,那么二進制大對象B1將僅被反串行化為列表L2并被添加至列表L1。在步驟3中,列表L3被添加至列表L2,來匹配L3的代理項(存儲2中)的組織。在步驟4中,項I2被添加至列表L2,以匹配項I2的代理項(也在存儲2中)的組織。這是通過解除項I2的代理項對本地存儲1的引用來完成的。在步驟5中,對列表L3、項I2和列表L2(2)的代理項被擦去。如圖9中所示的所得的組織與圖8中所示的原始組織相同。
移動列表結構-橫跨存儲結合圖10描述此處討論的移動列表操作的第二種形式。在該實例中,用戶請求列表L2和列表L2下對應的組織結構從存儲1中的列表L1移動至存儲2中的列表L5。用戶可能想要復制其中結構支持要求擴展存儲空間的一組項的結構(但不是結構中所有非列表項)。例如,播放列表可以含有多個列表,每位歌手一個列表,在每一列表下有多個音樂文件。可以期望這樣的播放列表中的文件總計為上千兆字節(jié)的音樂和/或視頻數據。在這一情況下,用戶可能不想通過將這些大文件從第一存儲復制到第二存儲來浪費存儲空間(以及可能的網絡帶寬),而是相反,僅能夠使用第二存儲中復制的結構來引用原始存儲中的文件。在步驟1中,列表L2被串行化為表示列表L2的副本的二進制大對象B1。在步驟2中,二進制大對象B1被反串行化為列表L2(2),它是列表L2的副本且現在被列表L5所持有。因為這是結構移動命令,所以也移動列表L3下的結構,即組織。與此相反,在前述關于圖8討論的淺移動命令中,僅移動列表L2。從而,在步驟3中,列表L3被串行化為表示列表L3的副本的二進制大對象B2,而在步驟4中,二進制大對象B2被反串行化為列表L3(2),它是列表L3的副本且現在被列表L2(2)所持有。也存在由原始列表L2直接或間接持有的若干非列表項(I1和I2),但是因為這些項不是結構化的,所以它們不被移動至存儲2。相反,在步驟5和6中,在存儲2中創(chuàng)建指向項I1和I2的代理項,而項I1和I2保留在存儲1中。同樣,因為原始列表L2和L3不再存在于存儲1中(僅他們的代理,將在以下描述),所以在步驟7中,移除列表L3和項I1之間的持有關系,在步驟9中移除列表L2和列表L3之間的持有關系,且在步驟10中,移除列表L2和項I2之間的持有關系。因為項I1和I2不由其它任何列表所持有,所以項I1和I2成為浮動項。同樣,因為列表L2和L3原始是由其它列表所持有的(分別是列表L1和L4),為了能夠由列表L1和L4列出,它們不能在不維持存儲1中對其的某些引用的情況下而被簡單地移除。這樣,在步驟8和11中,列表L2和L3的每一個使用存儲1中分別指向存儲2中的列表L2(2)和L3(2)的代理來替換。
結構移回列表-橫跨存儲參考圖11,用戶現在想要執(zhí)行與圖10中執(zhí)行的操作相反的操作。換言之,用戶現在想要將列表L2(2)結構移回至存儲1的列表L1下。在步驟1中,列表L2(2)被串行化為表示列表L2(2)的副本的二進制大對象B1,且在步驟2中,二進制大對象B1被反串行化為列表L2,且確定存儲1中是否存在指向列表L2的代理項。在該情況下的確存在,所以使用列表L2替換代理項。同樣,在步驟3中,列表L3(2)被串行化為表示列表L3(2)的副本的二進制大對象B2,且在步驟4中,二進制大對象B2被反串行化為列表L3且替換存儲1中的代理項L3。在步驟5和6中,在列表L2和項I2以及列表L3和向I1之間建立持有鏈接。系統(tǒng)建立這些持有鏈接以便反映列表L2(2)和項I2以及列表L3(2)和項I1之間的現有結構。在步驟7和9中,項I1和I2的代理項被擦去。在步驟8和10中,列表L2(2)和L3(2)被擦去。這些操作導致存儲2僅含有列表L5,而剩余的列表位于存儲1中。如可見的,所得的結構與圖10中所示操作之前存在的結構相同。
深移動列表-橫跨存儲結合圖12描述了此處討論的移動列表的第三種形式。在該實例中,用戶請求列表L2和列表L2下的所有對應的結構和項從存儲1的列表L1中移動至存儲2的列表L5中。在步驟1中,列表L2被串行化為表示列表L2的副本的二進制大對象B1,且在步驟2中,二進制大對象B1被反串行化為列表L2(2),它是存儲2中的列表2的副本。同樣,在列表L5和列表L2(2)之間建立持有鏈接。因為列表L2下的所有結構和項被移動至存儲2,因此對于剩余的結構和項進行類似的操作。這樣,在步驟3中,列表L3被串行化為表示列表L3的副本的二進制大獨享B2,且在步驟4中,二進制大對象B2被反串行化為列表L3(2)。在列表L2(2)和列表L2(2)之間建立持有鏈接,以反映存儲1中現有的結構。在步驟5中,項I2被串行化為表示項I2的副本的二進制大對象B3,且在步驟6中,二進制大對象B3被反串行化為項I2(2)。在列表L2(2)和項I2(2)之間建立持有鏈接,以反映存儲1中現有的結構。在步驟7中,項I被串行化為表示I1的副本的二進制大對象B4,并且在步驟8中,二進制大對象B4被反串行化為項I1(2)。在列表L3(2)和項I1(2)之間建立持有鏈接,以反映存儲1中的現有的結構。在步驟9和10中,從存儲1中擦去項I1和I2。因為列表L2和L3是由多個列表所持有的,它們不能簡單地從存儲1中完全移除。換言之,例如,完全移除列表L2的任何痕跡會導致L2不再由列表L6所列出,這可能不是用戶的意圖。從而,在步驟11和12中,列表L2和L3用存儲1中使用指向存儲2中它們各自目標列表L2(2)和L3(2)的代理所替換。同樣,移除列表L2和L3之間的持有鏈接,如同移除列表L1和L2之間的持有鏈接。這些操作的結果是,列表2以及由列表2直接或間接持有的所有結構和項(即,列表L3和項I1和I2)從存儲1移動至存儲2。
深移回列表-橫跨存儲參考圖13,用戶現在想要執(zhí)行與圖12中所執(zhí)行的功能相反的功能。換言之,用戶現在想要將列表L2(2)深移回至存儲1的列表L1下。在步驟1中,列表L2(2)被串行化為表示列表L2(2)的副本的二進制大對象B1。在步驟2中,使用從二進制大對象B1的反串行化所得的列表L2來替換指向列表L2的代理項。類似地,在步驟3中,列表L3(2)被串行化為表示列表L3(2)的副本的二進制大對象B2,且在步驟4中,使用從二進制大對象B2的反串行化所得的列表L3來替換指向列表L3的代理項。也為非列表項重復該過程。在步驟5中,項I2(2)被串行化為表示項I2(2)的副本的二進制大對象B3,且在步驟6中,二進制大對象B3被反串行化為項I2。同樣地,建立列表L2和項I2之間的持有關系來匹配列表L2(2)和項I2(2)之間先前的持有關系。在步驟7中,項I1(2)被串行化為表示項I1(2)的副本的二進制大對象B4,且在步驟8中,二進制大對象B4被反串行化為項I1。同樣地,建立列表L3和項I1之間的持有關系來匹配列表L3(2)和項I1(2)之間先前的持有關系。然后,在步驟9-12中,項I1(2)、I2(2)、L3(2)和L2(2)被擦去,因為它們移動且不由任何其它項所持有。如果這些項由另一個項所持有,那么它們可以使用代理項來替換而不是被擦去。結果與根據圖12執(zhí)行的原始深移動列表命令之前存在的結構相同。
淺復制列表-橫跨存儲參考圖14,用戶現在想要將列表L2從存儲1復制到存儲2,且將該新復制的列表在列表L5下組織。然而,用戶不想要復制列表L2下的每一項,僅是那些由列表L2所直接持有的項(列表項和非列表項)。這被稱為列表的淺復制。為了執(zhí)行該命令,在步驟1中,列表L2(將要被復制的列表)被串行化為表示列表L2的副本的二進制大對象B1。在步驟2中,二進制大對象B1被反串行化為新的列表L2(2),它是列表L2的完全相同的副本,除了它位于存儲2中而非存儲1中。同樣,按照用戶所需,在現有列表L5和列表L2(2)之間創(chuàng)建持有關系。如果用戶決定復制列表L2而不將它置于存儲2中的另一列表中,那么列表L2(2)將成為存儲2中的浮動項。在步驟3中,指向列表L3的代理項被創(chuàng)建并在列表L2(2)下持有。這是為了匹配原始列表L2和原始列表L3之間的持有關系。類似地,在步驟4中,指向項I2的代理項被創(chuàng)建并在列表L2(2)下持有。這是為了匹配原始項I2和原始列表L2之間的持有關系。結果是列表L2被復制,且指向列表L2下的原始項的代理項被置于列表L2的副本(即列表L2(2))下。以這種方式,系統(tǒng)僅制作用戶特別選擇來復制的項(即,列表L2)的副本,這樣,以最可能匹配用戶意圖的方式行動。
結構復制列表-橫跨存儲結合圖15描述了復制列表操作的第二種形式。在該實例中,用戶請求復制列表L2和列表L2下對應的結構,使得副本由存儲2中的列表L5所持有。從而,在步驟1中,列表L2被串行化為表示列表L2的副本的二進制大對象B1。在步驟2中,二進制大對象B1被反串行化為列表L2(2),且在列表L5和列表L2(2)之間建立持有關系。在步驟3中,列表L3被串行化為表示列表L3的副本的二進制大對象B2。在步驟4中,二進制大對象B2被反串行化為列表L3(2),且在列表L2(2)和列表L3(2)之間建立持有關系以匹配列表L2和列表L3之間的持有關系。在步驟5和6中,目標為項I1和I2的代理項被創(chuàng)建,且其每一個被置于持有關系中以分別匹配項I1和I2。
這樣,該操作的結果是列表L2、列表L2直接持有的非列表項以及列表L2下持有的結構被復制到存儲2中,而對于列表L2下所持有的但不是直接在列表L2下方的項,在存儲2中創(chuàng)建目標為存儲1中的原始項的代理項。
深復制列表-橫跨存儲結合圖16描述了復制列表操作的另一個形式。在該實例中,用戶請求列表L2以及列表L2下的所有項被深復制,使得副本在存儲2中的列表L5下被持有。該操作類似于結構復制,除了復制所有的項,不論它們是列表還是非列表。從而,在步驟1中,列表L2被串行化為表示列表L2的副本的二進制大對象B1。在步驟2中,二進制大對象B1被反串行化為列表L2(2),且在列表L5和列表L2(2)之間建立持有關系。在步驟3中,列表L3被串行化為表示列表L3的副本的二進制大對象B2。在步驟4中,二進制大對象B2被反串行化為列表L3(2),且在列表L2(2)和列表L3(2)之間建立持有關系以匹配列表L2和列表L3之間的持有關系。在步驟5和6中,項I1和I2被復制到存儲2上,而不是創(chuàng)建代理項。這樣,在步驟5中,項I2被串行化為表示項I2的副本的二進制大對象B3。在步驟6中,二進制大對象B3被反串行化為項I2(2),且在列表L2(2)下持有以匹配列表L2和項I2之間的持有關系。同樣地,在步驟7中,項I1被串行化為表示項I1的副本的二進制大對象B4。在步驟8中,二進制大對象B4被反串行化為項I1(2),項I1(2)在列表L3(2)下持有以匹配列表L3和項I1之間的持有關系。這樣,該操作的結果是列表L2以及列表L2下的所有項被復制到存儲2。
擦去圖17示出可以與關于擦去項和多個用戶對項的訪問的討論來結合使用的示例項結構。在允許多個用戶訪問同一項和不需其它用戶同意而允許單個用戶擦去或以其它方式移除這些項之間存在平衡。
在圖7示出的說明性結構中,根工作空間“\”直接持有表示分別授權給用戶1和用戶2的工作空間U1和U2。工作空間U1直接持有工作空間“UDR1”和“Shared”。工作空間U2直接持有工作空間“UDR2”。工作空間UDR1和Shared都直接持有列表L1。工作空間UDR2直接持有列表L2。列表L1和L2都直接持有項I1。
假定在該示例中,用戶1創(chuàng)建了列表L1和項I1,且通過建立L1和Shared之間的持有鏈接(即,通過將列表L1置于工作空間Shared中)來與用戶2共享這兩項。還假定用戶2隨后將項I1添加至列表L2。由此,用戶2對列表L1和項I1擁有全部權限。然而,假定用戶1對列表L2沒有權限。在這種情況下,存在對用戶1可用的各種組織和生存周期操作。例如,用戶1可以從列表L1中移除項I1。項I1將仍舊保留在列表L2以及工作空間UDRI和Shared中?;蛘?,用戶1可以從所有的列表中移除列表L1。在這種情況下,項I1將仍舊保留在列表L2中?;蛘撸脩?可以從工作空間UDR或者工作空間Shared中移除列表L1。在該情況下,從中移除列表L1的工作空間中,列表L1和項I1將不再可用。然而,這對其它工作空間沒有影響。
另一種選擇是,用戶1可以從所有的工作空間中移除列表L1。在該情況下,列表L1將一起從存儲中被擦去。用戶1可能放棄對項I1的興趣,而項I1將僅在列表L2中對用戶2可用。又一選擇是,用戶1可以放棄對項I1的興趣,可能是因為用戶1不再需要項I1且不在乎在其上發(fā)生的事。因此,項I2現在僅在列表L2中對用戶2可用。再一種選擇是,用戶1可以擦去項I1。在該情況下,刪除了從列表L1到項I1的持有鏈接。然而,從列表L2到項I1的鏈接可能懸掛(即,可能存在但是不指向任何項)。懸掛鏈接可以保留或可以在下一次打開列表L2時或任何時間被自動清除。
回收關于圖18討論項的回收,將分為五個標記的部分。如圖18的部分1所示,根工作空間“\”直接持有工作空間U1和U2,其每一個分別表示授權給用戶1和用戶2的工作空間。工作空間U1直接持有列表L1,列表L1又直接持有項I1。工作空間U2直接持有列表L2,列表L2也又直接持有項I1。這樣,項I1由列表L1和L2共享。
參考圖18的部分2,假定用戶1想要回收項I1。在該情況下,項I1可以從用戶1的觀點被回收(如由工作空間U1發(fā)出的虛線所示)。然而,從用戶2的觀點,項I2仍舊保留在列表L2中。參考圖18的部分3,如果用戶1清空回收站,那么用戶1放棄對項I1的所有興趣。然而,再一次,項I1仍舊保留在用戶2的列表L2中,因為用戶2沒有請求對項I1的任何操作。
下一步,參考圖18的部分4,假定在用戶1清空回收站之后,用戶2之后想要回收項I1。在該情況下,項I1將從用戶2的觀點在回收站中出現(如由工作空間U2發(fā)出的虛線所示)。參考圖18的部分5,當用戶2清空回收站時,項I1被完全地刪除了,因為沒有列表持有項I1。如果另一個列表持有項I1,那么項I1仍舊保留在該其它列表下被持有。
結論因此,描述了一種新穎的電子文件系統(tǒng)和在這樣的系統(tǒng)中管理項的方法。盡管如此處根據本發(fā)明的各方面所描述的說明性實施例是作為示例顯示的,但是可以理解,本發(fā)明不限于這些實施例。
權利要求
1.在含有能訪問第一和第二存儲的電子文件系統(tǒng)的計算機中,一種方法,包括以下步驟從所述第一存儲中選擇第一項,所述第一項組織在所述第一存儲中的第一列表下;響應于選擇第一項,確定所述第一項是否也組織在所述第一存儲中的第二列表下;基于所述第一項,在所述第二存儲中存儲第二項;以及響應于確定所述第一項組織在所述第二列表下,在所述第一存儲中創(chuàng)建目標為所述第二存儲中的第二項的第一代理項,所述第一代理項組織在所述第二列表下但不組織在所述第一列表下。
2.如權利要求1所述的方法,其特征在于,還包括從所述第一存儲移除所述第一項的步驟。
3.如權利要求2所述的方法,其特征在于,還包括生成作為所述第一項的副本的第二項的步驟。
4.如權利要求3所述的方法,其特征在于,所述生成第二項的步驟包括生成基于所述第一項的二進制大對象、將所述二進制大對象發(fā)送給所述第二存儲、并將所述二進制大對象轉化為所述第二項。
5.如權利要求1所述的方法,其特征在于,還包括以下步驟在所述第二存儲中選擇所述第二項;響應于選擇第二項,確定在所述第一存儲中是否存儲所述第一代理項;響應于確定存在所述第一代理項,從所述第一存儲中移除所述第一代理項;以及基于所述第二項在所述第一存儲中存儲第三項。
6.如權利要求5所述的方法,其特征在于,還包括生成作為所述第二項的副本的第三項。
7.如權利要求1所述的方法,其特征在于,所述第一項和第二項的每一項是文件。
8.如權利要求1所述的方法,其特征在于,所述第一項和第二項的每一項是列表。
9.如權利要求1所述的方法,其特征在于,所述第一項在所述第一和第二列表兩者下組織。
10.一種存儲計算機可執(zhí)行指令的計算機可讀介質,當執(zhí)行所述指令時,使計算機執(zhí)行如權利要求1所述的步驟。
11.一種存儲計算機可執(zhí)行指令的計算機可讀介質,當執(zhí)行所述指令時,使計算機執(zhí)行如權利要求5所述的步驟。
12.在含有能訪問第一和第二存儲的電子文件系統(tǒng)的計算機中,一種方法,包括以下步驟從所述第一存儲中選擇第一列表;基于所述第一列表在所述第二存儲中存儲第二列表;確定項是否組織在所述第一列表下;以及響應于確定所述項組織在所述第一列表下,在所述第二存儲中創(chuàng)建目標為所述第一存儲中的項的代理項,所述代理項組織在所述第二列表下。
13.如權利要求12所述的方法,其特征在于,所述項是文件。
14.如權利要求12所述的方法,其特征在于,所述第二列表是所述第一列表的副本。
15.如權利要求12所述的方法,其特征在于,還包括在所述創(chuàng)建代理項的步驟之后在所述第一存儲中維護所述第一列表的步驟。
16.如權利要求12所述的方法,其特征在于,所述確定的步驟包括確定所述項是否直接組織在所述第一列表下,且所述創(chuàng)建步驟是響應于所述項直接組織在所述第一列表下確定的。
17.如權利要求12所述的方法,其特征在于,所述確定步驟包括確定所述項是否是非列表項,且所述創(chuàng)建步驟還響應于所述項是非列表項的確定。
18.如權利要求17所述的方法,其特征在于,還包括以下步驟確定第三列表是否組織在所述第一列表下;以及響應于確定所述第三列表組織在所述第一列表下,基于所述第三列表,在所述第二存儲中創(chuàng)建第四列表,所述第四列表組織在所述第二列表下。
19.如權利要求18所述的方法,其特征在于,所述第四列表是所述第三列表的副本。
20.一種存儲計算機可執(zhí)行指令的計算機可讀介質,當執(zhí)行所述指令時,使計算機執(zhí)行如權利要求12所述的步驟。
21.在含有能訪問第一和第二存儲的電子文件系統(tǒng)的計算機中,一種方法,包括以下步驟從所述第一存儲中選擇第一列表,所述第一列表擁有組織在所述第一列表下的一個或多個列表;對組織在所述第一列表下的所述一個或多個列表的每一個,確定各個列表是否也直接組織在不同于所述第一列表的列表下;對組織在所述第一列表下的所述一個或多個列表的每一個,響應于確定各個列表不直接組織在不同于所述第一列表的列表下,將各個列表移動至所述第二存儲;對組織在所述第一列表下的所述一個或多個列表的每一個,響應于確定各個列表直接組織在不同于所述第一列表的列表下,將所述各個列表移動至所述第二存儲,并在所述第一存儲中創(chuàng)建目標為目前在所述第二存儲的各個列表的代理項,所述代理項直接組織在不同于所述第一列表的列表下。
22.如權利要求21所述的方法,其特征在于,所述第一列表擁有組織在所述第一列表下的一個或多個非列表項,所述方法還包括以下步驟對組織在所述第一列表下的所述一個或多個非列表項的每一個,將各個非列表項移動至所述第二存儲。
23.如權利要求22所述的方法,其特征在于,所述一個或多個非列表項中的每一個是文件。
24.一種存儲計算機可執(zhí)行指令的計算機可讀介質,當執(zhí)行所述指令時,使計算機執(zhí)行如權利要求21所述的步驟。
全文摘要
提供允許在有向無環(huán)圖(DAG)中組織項的電子文件系統(tǒng)組織結構。盡管項可以如在樹結構中那樣被分層組織,項也可以有多個直接父項。電子文件系統(tǒng)還可以訪問多個不同的存儲。另外,討論了用于當跨不同存儲處理和重新組織項時管理項的技術。例如,討論了用于管理擁有全部處于同一第一存儲中的多個直接父項的項的技術,其中該項被移動或復制到第二不同存儲。這些技術中的某一些可以更緊密地匹配用戶的意圖和/或從用戶的觀點具有可預測的結果。通過這樣做,在一個組織上執(zhí)行的動作不會以未預料到的或非預期的方式來影響其它組織。
文檔編號G06F17/30GK1776682SQ20051012717
公開日2006年5月24日 申請日期2005年11月15日 優(yōu)先權日2004年11月15日
發(fā)明者T·P·麥基, W·R·史密斯 申請人:微軟公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阿瓦提县| 临漳县| 平阳县| 交城县| 兰州市| 句容市| 太白县| 铁力市| 奉新县| 尉犁县| 涟水县| 桑日县| 博罗县| 察隅县| 巨野县| 临西县| 读书| 沅陵县| 栾川县| 剑阁县| 广平县| 宿迁市| 高平市| 尉氏县| 怀来县| 敦化市| 河南省| 买车| 钦州市| 潼南县| 同江市| 周口市| 玉山县| 呼图壁县| 桂平市| 萨迦县| 忻城县| 曲阜市| 揭西县| 新建县| 十堰市|