16-218中的改變并將這些改變傳播到其它組數(shù)據(jù)來完成。例如,同步裝置206 可以使用長(zhǎng)輪詢技術(shù)來從在線存儲(chǔ)系統(tǒng)102接收數(shù)據(jù)216的改變并將這些改變應(yīng)用于數(shù)據(jù) 218。同步裝置206還可以允許應(yīng)用210檢測(cè)數(shù)據(jù)218的改變并將這些改變上載到在線存 儲(chǔ)系統(tǒng)102以用于與數(shù)據(jù)216同步。
[0032] 在一個(gè)或多個(gè)實(shí)施例中,數(shù)據(jù)216-218的同步基于應(yīng)用210到API 204可用的文 件級(jí)操作,諸如讀取操作、寫入操作、更新操作和/或關(guān)閉操作。這些操作可以看起來是在 與這些操作相關(guān)聯(lián)的調(diào)用被應(yīng)用210做出之后立即完成的。與此同時(shí),API 204可以基于 在線存儲(chǔ)系統(tǒng)102的可用性和/或電子設(shè)備202和在線存儲(chǔ)系統(tǒng)102之間的網(wǎng)絡(luò)連接,把 操作傳播給在線存儲(chǔ)系統(tǒng)102和/或從在線存儲(chǔ)系統(tǒng)102獲取與數(shù)據(jù)216-218相關(guān)聯(lián)的更 新。
[0033] 另外,同步裝置206可以使用與包含數(shù)據(jù)216的文件系統(tǒng)214的元數(shù)據(jù)220與緩存 212中的對(duì)應(yīng)一組元數(shù)據(jù)222同步。元數(shù)據(jù)220-222可以代表與數(shù)據(jù)216-218相關(guān)聯(lián)的目 錄層級(jí)和路徑。例如,元數(shù)據(jù)220-222可以描述文件系統(tǒng)214中的目錄中可被電子設(shè)備202 和/或應(yīng)用210訪問的內(nèi)容(例如文件、子目錄等)。類似數(shù)據(jù)216-218,元數(shù)據(jù)220-222 可以通過檢測(cè)每組元數(shù)據(jù)的改變并將改變傳播到其它組元數(shù)據(jù)而被同步。
[0034] 另外,元數(shù)據(jù)220-222的同步可以基于應(yīng)用210到API 204可用的文件系統(tǒng)級(jí)的 操作,諸如打開操作、創(chuàng)建操作、刪除操作和/或移動(dòng)操作。在這樣的操作能夠被應(yīng)用210 使用之前,同步裝置206可以通過獲取作為來自在線存儲(chǔ)系統(tǒng)102的元數(shù)據(jù)220的拷貝的 元數(shù)據(jù)222和/或獲取作為來自電子設(shè)備20上的緩存212和/或其它本地存儲(chǔ)裝置的元 數(shù)據(jù)222的拷貝的元數(shù)據(jù)220來執(zhí)行元數(shù)據(jù)220-222的第一同步。在第一同步完成之后, 同步裝置206可以使能從電子設(shè)備202對(duì)文件系統(tǒng)214和/或數(shù)據(jù)216的訪問并通過如下 步驟來同步對(duì)元數(shù)據(jù)220-222的改變:從包含改變的這組元數(shù)據(jù)獲取改變并將改變應(yīng)用于 另一組元數(shù)據(jù)。
[0035] 為了促進(jìn)應(yīng)用210進(jìn)行的數(shù)據(jù)216-218和元數(shù)據(jù)220-222的魯棒同步,與API 204 相關(guān)聯(lián)的通信裝置208可以向應(yīng)用210提供電子設(shè)備202和在線存儲(chǔ)系統(tǒng)102之間的數(shù)據(jù) 216-218的同步狀態(tài)224和/或元數(shù)據(jù)220-222的文件系統(tǒng)同步狀態(tài)226。同步狀態(tài)224 可以指定與和數(shù)據(jù)216-218的同步相關(guān)聯(lián)的操作有關(guān)的不同狀態(tài)的數(shù)目。例如,對(duì)于要在 電子設(shè)備202和在線存儲(chǔ)系統(tǒng)102之間同步的數(shù)據(jù)216-218的每個(gè)文件和/或其它單元, 同步狀態(tài)224可以包括下載狀態(tài)、上載狀態(tài)、空閑狀態(tài)、傳輸進(jìn)展、已緩存狀態(tài)和/或錯(cuò)誤狀 ??τ O
[0036] 類似地,文件系統(tǒng)同步狀態(tài)226可以指示與元數(shù)據(jù)220-222的同步相關(guān)聯(lián)的操 作有關(guān)的各種狀態(tài)。例如,對(duì)于要在電子設(shè)備202和在線存儲(chǔ)系統(tǒng)102之間同步的元數(shù) 據(jù)220-222,文件系統(tǒng)同步狀態(tài)226可以包括元數(shù)據(jù)同步狀態(tài)、在線狀態(tài)、運(yùn)行狀態(tài)、就緒狀 態(tài),和/或改變狀態(tài)。
[0037] 更具體地,與數(shù)據(jù)216-218的同步相關(guān)聯(lián)的上述操作和/或狀態(tài)可以使用用于文 件狀態(tài)的接口和用于文件的接口來實(shí)現(xiàn)。用于文件狀態(tài)的接口可以包括以下示例性實(shí)現(xiàn):
[0038]
[0040] 在該接口內(nèi),"DBFileState"類型可以包括三個(gè)值中的一個(gè): "DBFileStateDownloading"值,其指示同步狀態(tài)224是當(dāng)前在下載(例如,下載狀態(tài)); "DBFileStateldle"值,其指示同步狀態(tài)224是當(dāng)前空閑狀態(tài)(例如,空閑狀態(tài));或 "DBFileStateUploading"值,其指示同步狀態(tài)224是當(dāng)前在上載(例如,上載狀態(tài))。接口 還可以在同步狀態(tài)224中包括或不包括:使用命名為"cached"的Boolean值的緩存狀態(tài) (例如,文件的緩存),使用命名為"progress"的浮點(diǎn)值的與"DBFileState"相關(guān)聯(lián)的下載 和/或上載相關(guān)聯(lián)的傳輸進(jìn)展,以及使用由"error"表示的錯(cuò)誤代碼的與下載和/或上載 相關(guān)聯(lián)的錯(cuò)誤狀態(tài)。
[0041] 類似地,用于文件的接口可以包括如下示例性實(shí)現(xiàn):
[0042]
[0046] 在該接 口內(nèi),一組方法調(diào)用 "readHandle "、"readData" 和"readString" 可以用來 從文件讀取數(shù)據(jù)(例如,數(shù)據(jù)216-218)。類似地,一組方法調(diào)用"writeContentsOfFile"、 "writeData"和"writeString"可以用來從緩存212中的文件的拷貝、緩存212中的一組字 節(jié)、字符串和/或緩存212的文件的更新的版本來寫在線存儲(chǔ)系統(tǒng)102上的文件。"close" 方法調(diào)用可以被調(diào)用來關(guān)閉文件和防止對(duì)文件的后續(xù)讀取和/或?qū)懭胫钡轿募辉俅未?開為止。該接口還可以使用"open"值來指定文件是否是打開的,使用"status"來指示如 上所述的文件的"DBFileStatus",以及使用"newerStatus"來指示文件的更新的版本的 "DBFileStatus"。換而言之,接口可以促進(jìn)電子設(shè)備202和在線存儲(chǔ)系統(tǒng)102之間的文件 的不同版本的同步和/或管理。
[0047] 并且,與元數(shù)據(jù)220-222的同步相關(guān)聯(lián)的上述操作和/或狀態(tài)可以使用用于文件 系統(tǒng)(例如,文件系統(tǒng)214)的接口來實(shí)現(xiàn)。用于文件系統(tǒng)的接口可以包括如下示例性實(shí) 現(xiàn):
[0054] 在該接 口內(nèi),"DBSyncStatus" 類型可以使用 "DBSyncStatusDownloading" 位來指 示文件系統(tǒng)是否當(dāng)前在從在線存儲(chǔ)系統(tǒng)102下載到電子設(shè)備202 (例如,下載狀態(tài))以及使 用"DBSyncStatusUploading"位來指示文件系統(tǒng)是否當(dāng)前在從電子設(shè)備202上載到在線存 儲(chǔ)系統(tǒng)1〇2(例如,上載狀態(tài))。"DBSyncStatus"也可以包括"DBSyncStatusSyncing"位 來指定用于文件系統(tǒng)的元數(shù)據(jù)220-222的同步是否在發(fā)生(例如,元數(shù)據(jù)同步狀態(tài))以及 "DBSyncStatusOnline"位來指定文件系統(tǒng)和/或電子設(shè)備202是否當(dāng)前在線(例如,在線 狀態(tài))。因此,"DBSyncStatus"可以用于提供文件系統(tǒng)同步狀態(tài)226的一部分。
[0055] 該接口也可以包括對(duì)用于同步元數(shù)據(jù)220-222的操作的方法調(diào)用。這樣的方法調(diào) 用可以包括對(duì)打開現(xiàn)有文件的打開操作的" openFi I e "方法調(diào)用,對(duì)創(chuàng)建新文件的創(chuàng)建操作 的"createFile"方法調(diào)用,以及對(duì)創(chuàng)建新目錄的創(chuàng)建操作的"createPath"方法調(diào)用。這 些方法調(diào)用還可以包括對(duì)刪除指定路徑處的文件和/或目錄的刪除操作的"deletePath" 方法調(diào)用,和對(duì)將文件或目錄移動(dòng)到指定路徑的移動(dòng)操作的"movePath"方法調(diào)用。由于移 動(dòng)操作與明確的方法調(diào)用相關(guān)聯(lián),因此API 204可以能夠跟蹤唯一的文件隨時(shí)間變化的位 置和移動(dòng)。另一方面,用于訪問在線存儲(chǔ)系統(tǒng)102的客戶端應(yīng)用可能沒有能力執(zhí)行這樣的 跟蹤,因?yàn)榭蛻舳藨?yīng)用通過從一個(gè)位置刪除文件或目錄以及在另一位置創(chuàng)建文件或目錄來 執(zhí)行移動(dòng)操作。
[0056] 該接口可以使用一組屬性來指定文件系統(tǒng)同步狀態(tài)226的其它部分,包括指示上 述元數(shù)據(jù)220-222的第一同步的完成(例如,就緒狀態(tài))的"completedFirstSync"屬性以 及指示文件系統(tǒng)是否在運(yùn)行(例如,運(yùn)行狀態(tài))的"running"屬性。該接口還可以包括提 供與"DBSyncStatus"相關(guān)聯(lián)的狀態(tài)的"status"屬性。
[0057] 最終,該接口可以提供與文件系統(tǒng)中的路徑、目錄和/或文件相關(guān)聯(lián)的一個(gè)或多 個(gè)改變狀態(tài)。具體地,該接口可以包括使得能夠通知對(duì)文件系統(tǒng)中的具體路徑的改變的 "forPath"改變狀態(tài)。該接口還可以包括使能對(duì)路徑以及直接位于路徑之下的文件和/或 目錄的改變的通知的"forPathAndChildren"改變狀態(tài)和/或使能對(duì)路徑和位于路徑下的 某處的所有文件和/或文件夾的改變的通知的"forPathAndDescendants"改變狀態(tài)。
[0058] 應(yīng)用210和/或同步裝置206可以使用由同步狀態(tài)224和文件系統(tǒng)同步狀態(tài)226 提供的信息來同步數(shù)據(jù)216-218。例如,如果同步狀態(tài)224包括已緩存狀態(tài),則同步裝置206 可以從緩存212訪問數(shù)據(jù)218。如果同步狀態(tài)224不包括已緩存狀態(tài),則同步裝置206可以 從在線存儲(chǔ)系統(tǒng)102訪問數(shù)據(jù)216。如果數(shù)據(jù)216-218的更新的版本可用,則同步裝置206 可以從緩存212和/或在線存儲(chǔ)系統(tǒng)102訪問更新的版本。最終,如果數(shù)據(jù)216-218不可 用,則同步裝置206可以指示錯(cuò)誤狀態(tài)。
[0059] 換而言之,應(yīng)用210可以使用單個(gè)API 204來訪問電子設(shè)備202上的本地存儲(chǔ)裝 置(例如,緩存212)和在線存儲(chǔ)系統(tǒng)102兩者。并且,同步狀態(tài)224和文件系統(tǒng)同步狀態(tài) 226可以暴露與數(shù)據(jù)216-218和元數(shù)據(jù)220-222的同步有關(guān)的信息,其允許應(yīng)用210管理數(shù) 據(jù)216-218和元數(shù)據(jù)220-222的改變、數(shù)據(jù)216-218的更新的版本和/或與同步相關(guān)聯(lián)的 錯(cuò)誤。換而言之,API 204可以提高在應(yīng)用210和在線存儲(chǔ)系統(tǒng)102之間同步數(shù)據(jù)216-218 和/或元數(shù)據(jù)220-222的效率、容易度和/或效果。
[0060] 本領(lǐng)域技術(shù)