本申請涉及互聯(lián)網(wǎng)
技術(shù)領(lǐng)域:
,尤其涉及一種文檔查詢、文檔存儲方法及裝置。
背景技術(shù):
:目前,對數(shù)據(jù)進(jìn)行版本化的存儲,可滿足用戶獲取不同版本數(shù)據(jù)的需求。在相關(guān)技術(shù)中,一種常見的版本化存儲方案是:通過存儲用戶對文檔的每一次編輯動作所對應(yīng)的行為數(shù)據(jù),并存儲最新版本的文檔內(nèi)容。當(dāng)用戶需要獲取某一指定版本的文檔內(nèi)容時,可根據(jù)最新版本的文檔內(nèi)容,以及用戶在所述指定版本之后對文檔的編輯動作所對應(yīng)的行為數(shù)據(jù),進(jìn)行反向合并,以得到所述指定版本的文檔內(nèi)容并反饋給用戶。然而,若采用上述相關(guān)技術(shù)對一個已有的業(yè)務(wù)數(shù)據(jù)庫進(jìn)行版本化存儲,由于需要存儲用戶每一編輯動作所對應(yīng)的行為數(shù)據(jù),通常需對已有的業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)進(jìn)行變更,才能使得用戶獲取到不同版本的數(shù)據(jù),這勢必影響到已有的業(yè)務(wù)數(shù)據(jù)庫的使用并造成開發(fā)成本較高。技術(shù)實現(xiàn)要素:有鑒于此,本申請?zhí)峁┮环N文檔查詢、文檔存儲方法及裝置。為實現(xiàn)上述目的,本申請?zhí)峁┘夹g(shù)方案如下:根據(jù)本申請的第一方面,提出了一種文檔存儲方法,包括:接收來自用戶終端的攜帶目標(biāo)文檔id、目標(biāo)版本號信息及目標(biāo)文檔內(nèi)容的文檔提交請求;將業(yè)務(wù)數(shù)據(jù)庫中存儲的與所述目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為所述目標(biāo)文檔內(nèi)容;在確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中時,生成一與所述目標(biāo)文檔內(nèi)容關(guān)聯(lián)的版本號信息;將與所述版本號信息關(guān)聯(lián)的所述目標(biāo)文檔內(nèi)容寫入到所述版本化數(shù)據(jù)庫中。根據(jù)本申請的第二方面,提出了一種文檔查詢方法,包括:接收來自用戶終端的包含待查文檔id的查詢請求;當(dāng)所述查詢請求中包含待查版本號信息時,從版本化數(shù)據(jù)庫中查找所述待查文檔id下與所述待查版本號信息對應(yīng)的文檔內(nèi)容;當(dāng)所述查詢請求中不包含待查版本號信息時,從業(yè)務(wù)數(shù)據(jù)庫中查找所述待查文檔id對應(yīng)的文檔內(nèi)容;向所述用戶終端發(fā)送查找到的所述文檔內(nèi)容。根據(jù)本申請的第三方面,提出了一種文檔存儲裝置,包括:提交請求接收單元,用于接收來自用戶終端的攜帶目標(biāo)文檔id、目標(biāo)版本號信息及目標(biāo)文檔內(nèi)容的文檔提交請求;第一寫入單元,用于將業(yè)務(wù)數(shù)據(jù)庫中存儲的與所述目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為所述目標(biāo)文檔內(nèi)容;生成單元,用于在確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中時,生成一與所述目標(biāo)文檔內(nèi)容關(guān)聯(lián)的版本號信息;第二寫入單元,用于將與所述版本號信息關(guān)聯(lián)的所述目標(biāo)文檔內(nèi)容寫入到所述版本化數(shù)據(jù)庫中。根據(jù)本申請的第四方面,提出了一種文檔查詢裝置,包括:查詢請求接收單元,用于接收來自用戶終端的包含待查文檔id的查詢請求;第一查詢單元,用于當(dāng)所述查詢請求中包含待查版本號信息時,從版本化數(shù)據(jù)庫中查找所述待查文檔id下與所述待查版本號信息對應(yīng)的文檔內(nèi)容;第二查詢單元,用于當(dāng)所述查詢請求中不包含待查版本號信息時,從業(yè)務(wù)數(shù)據(jù)庫中查找所述待查文檔id對應(yīng)的文檔內(nèi)容;文檔內(nèi)容發(fā)送單元,用于向所述用戶終端發(fā)送查找到的所述文檔內(nèi)容。本申請實施例中,在不改變原有業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)的前提下,通過為業(yè)務(wù)數(shù)據(jù)庫配設(shè)一版本化數(shù)據(jù)庫來實現(xiàn)文檔的版本控制,其中,在數(shù)據(jù)存儲時,在業(yè)務(wù)數(shù)據(jù)庫中存儲最新版本的文檔內(nèi)容,在版本化數(shù)據(jù)庫中,為每一次文檔內(nèi)容的更新生成一版本號信息,并形成該版本號信息和被更新文檔內(nèi)容的唯一關(guān)聯(lián)關(guān)系。通過上述文檔寫入過程,可以為用戶提供對任意版本的文檔內(nèi)容的查詢功能。由于不需要更改業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),使得業(yè)務(wù)數(shù)據(jù)庫能夠正常工作不受影響,并且一定程度上降低開發(fā)成本,文檔查詢效率較高。附圖說明圖1是本申請一實施例中的一種系統(tǒng)架構(gòu)圖;圖2是本申請一實施例中的另一種系統(tǒng)架構(gòu)圖;圖3是本申請一實施例中的一種文檔存儲方法的流程圖;圖4是本申請一實施例中的一種版本化數(shù)據(jù)庫中的數(shù)據(jù)存儲結(jié)構(gòu);圖5是本申請一示例性實施例的一種文檔查詢方法的流程圖;圖6是本申請一示例性實施例的一種電子設(shè)備的結(jié)構(gòu)示意圖;圖7是本申請一示例性實施例的一種文檔存儲裝置的框圖;圖8是本申請一示例性實施例的一種電子設(shè)備的結(jié)構(gòu)示意圖;圖9是本申請一示例性實施例的一種文檔查詢裝置的框圖。具體實施方式目前,用于對數(shù)據(jù)庫進(jìn)行版本化管理的一種常見技術(shù)是:通過增量方式存儲用戶對文檔(所述“文檔”包括文本文檔數(shù)據(jù)、或音頻數(shù)據(jù)、或多媒體數(shù)據(jù)等電子文檔)的每一次編輯動作所對應(yīng)的行為數(shù)據(jù),當(dāng)用戶需要獲取某一指定版本的文檔內(nèi)容時,可根據(jù)最新版本的文檔內(nèi)容,以及用戶在所述指定版本之后對文檔的編輯動作所對應(yīng)的行為數(shù)據(jù),進(jìn)行反向合并,以得到所述指定版本的文檔內(nèi)容并反饋給用戶。舉例說明,用戶的行為數(shù)據(jù)所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下表1所示:表1:字段名類型說明idvarchar(32)主鍵idchange_contentvarchar(1024)變更的內(nèi)容resource_idvarchar(32)變更的模型idchange_rowvarchar(32)變更的行號change_timetimestamp變更時間versionstring變更后的版本號created_timetimestamp數(shù)據(jù)創(chuàng)建時間commit_msgvarchar(1024)變更說明假設(shè)某一文檔包括v1和v2兩個版本,其中,v2是最新版本,v1版本是v2版本之前的某一歷史版本。如果從v1版本到v2版本,用戶對v1版本的文檔的一次編輯動作是:將該文檔內(nèi)的內(nèi)容:“已存在的文檔”修改為“修改后的文檔”。相應(yīng)地,最終數(shù)據(jù)庫中需要存儲最新版本:v2的文檔內(nèi)容之外,還需要插入一條用戶的行為數(shù)據(jù),如:(‘1001’,‘修改后的文檔’,‘1’,‘1000’,‘2016-08-0112:12:12’,‘1000’,‘2016-08-0112:12:12’)。此后,如果用戶需要查詢v1版本的文檔內(nèi)容,則需要查詢到上述最新版本:v2的文檔內(nèi)容,并且還需要根據(jù)用戶的每一次編輯動作的發(fā)生時間,找出用戶在v1版本之后對上述文檔編輯動作所對應(yīng)的行為數(shù)據(jù),在查詢到這些數(shù)據(jù)之后,可以做反向的合并(如:將v2版本中的內(nèi)容“修改后的文檔”變更為編輯之前的“已存在的文檔”),以得到v1版本的內(nèi)容??梢姡谏鲜黾夹g(shù)中,由于需要通過相對復(fù)雜的反向合并邏輯,才能得到需要獲取的指定版本的文檔內(nèi)容,需消耗較多的計算資源,查詢效率較低。此外,這一技術(shù)由于需要按照指定格式存儲每一個行為數(shù)據(jù),若應(yīng)用到對已有的一個數(shù)據(jù)庫進(jìn)行版本化控制,則勢必需要變更已有的數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),造成開發(fā)成本的提高,并且還會一定程度上影響到已有數(shù)據(jù)庫的正常使用。該技術(shù)一旦應(yīng)用到對某數(shù)據(jù)庫的版本化管理,就很難移植到其他數(shù)據(jù)庫中進(jìn)行版本化管理,通常,需要另外為其他數(shù)據(jù)庫開發(fā)一套版本化管理應(yīng)用,造成可移植性較差。鑒于上述問題,本申請實施例提出了一種文檔存儲、文檔查詢方法及裝置。圖1是本申請一實施例中的一種用于實現(xiàn)文檔版本化管理的系統(tǒng)架構(gòu)圖。本實施例中,該系統(tǒng)可包括:服務(wù)器10,用戶終端20,業(yè)務(wù)數(shù)據(jù)庫30及版本化數(shù)據(jù)庫40。其中,用戶終端20可與服務(wù)器10進(jìn)行網(wǎng)絡(luò)通信,服務(wù)器10分別與業(yè)務(wù)數(shù)據(jù)庫30、版本化數(shù)據(jù)庫40進(jìn)行網(wǎng)絡(luò)連接,以實現(xiàn)對業(yè)務(wù)數(shù)據(jù)庫30、版本化數(shù)據(jù)庫40的數(shù)據(jù)寫入、數(shù)據(jù)讀取過程。其中,用戶終端20可以是電腦、手機(jī)、pda等,業(yè)務(wù)數(shù)據(jù)庫30可以是已有的一種用以實現(xiàn)某種特定業(yè)務(wù)、且按照某些既定的數(shù)據(jù)結(jié)構(gòu)存儲相關(guān)數(shù)據(jù)的數(shù)據(jù)庫,版本化數(shù)據(jù)庫40可以是用于存儲文檔的多個歷史版本的數(shù)據(jù)庫,版本化數(shù)據(jù)庫40可用于存儲每一版本的快照,所述“快照”是指針對某個版本內(nèi)的當(dāng)前內(nèi)容的一種展現(xiàn),每一個版本都對應(yīng)著一個快照,快照可被查看但不可被修改。本申請實施例中,所述版本化數(shù)據(jù)庫40可通過分布式版本控制系統(tǒng)git來實現(xiàn)。圖2是本申請一實施例中的另一種用于實現(xiàn)文檔版本化管理的系統(tǒng)架構(gòu)圖。與上述圖1所示的系統(tǒng)的不同之處在于:該系統(tǒng)可以至少包括第一業(yè)務(wù)數(shù)據(jù)庫30a和第二業(yè)務(wù)數(shù)據(jù)庫30b。其中,第一業(yè)務(wù)數(shù)據(jù)庫30a和第二業(yè)務(wù)數(shù)據(jù)庫30b可以實現(xiàn)不同的業(yè)務(wù)??梢岳猛粋€版本化數(shù)據(jù)庫40實現(xiàn)上述第一業(yè)務(wù)數(shù)據(jù)庫30a和第二業(yè)務(wù)數(shù)據(jù)庫30b的版本化管理。也就是說,該版本化數(shù)據(jù)庫40可以被應(yīng)用于對一個或多個不同類型的業(yè)務(wù)數(shù)據(jù)庫的版本化控制當(dāng)中,而不需改變每一個業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)存儲結(jié)構(gòu)。通過上述系統(tǒng)可以看出,需要進(jìn)行版本化管理的文檔可被保存為兩份,一份是用于存儲在業(yè)務(wù)數(shù)據(jù)庫30中的最新版本的文檔內(nèi)容,另一份是用于存儲在版本化數(shù)據(jù)庫40中的與各個版本對應(yīng)的文檔內(nèi)容,從而保證在不改變原有的業(yè)務(wù)數(shù)據(jù)庫30的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,實現(xiàn)對文檔內(nèi)容的版本化控制。這種存儲方式不會對原有的業(yè)務(wù)數(shù)據(jù)庫造成侵入,使得版本化數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)兩者保持相互獨立。其中,業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)訪問接口可以使用jdbc(javadatabaseconnectivity,java數(shù)據(jù)庫連接)等進(jìn)行數(shù)據(jù)的訪問,版本化數(shù)據(jù)庫的數(shù)據(jù)訪問使用jgit(一個輕量級的純java的類庫)來進(jìn)行訪問。以下將詳細(xì)介紹文檔存儲過程和文檔查詢過程。圖3是本申請一實施例中的一種文檔存儲方法的流程圖,該方法應(yīng)用于上述服務(wù)器10,該方法可包括如下步驟101至步驟104,其中:在步驟101中,接收來自用戶終端20的攜帶目標(biāo)文檔id及目標(biāo)文檔內(nèi)容的文檔提交請求。用戶可在用戶終端20獲取某一文檔并對該文檔的內(nèi)容進(jìn)行編輯,在編輯完成之后,可以提交到服務(wù)器10進(jìn)行存儲。每一文檔通過一文檔id進(jìn)行標(biāo)識。本申請一實施例中,在每次用戶對文檔進(jìn)行編輯完成并進(jìn)行提交之后,可以執(zhí)行“單寫”和“雙寫”兩種寫入過程。其中,“單寫”是指用戶提交的文檔內(nèi)容只需要被寫入業(yè)務(wù)數(shù)據(jù)庫30中;而“雙寫”是指用戶提交的文檔內(nèi)容不但需要寫入業(yè)務(wù)數(shù)據(jù)庫30,還需要被寫入版本化數(shù)據(jù)庫40中。至于如何判斷需要進(jìn)行“單寫”或“雙寫”操作,可以根據(jù)預(yù)先設(shè)定的條件來判定。具體地,用于判斷“雙寫”還是“單寫”的條件可以是:配置對一種或多種特定的文檔類型或文檔id集合的執(zhí)行“雙寫”,例如,若用戶提交的文檔類型是:數(shù)據(jù)庫配置文件,則只需要執(zhí)行“單寫”;或者,配置對用戶的一種或多種特定的操作行為(如:文檔提交行為)進(jìn)行雙寫,等等。為此,本申請一實施例中,在上述步驟101之后,還包括:當(dāng)所述目標(biāo)文檔id對應(yīng)的文檔類型屬于需要執(zhí)行雙寫操作的預(yù)設(shè)文檔類型之一時,確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中。當(dāng)確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫時,進(jìn)入下述步驟102、步驟103,否則,只進(jìn)入步驟102。本申請一實施例中,可為所需提交的文檔添加相應(yīng)的注釋信息,所述注釋信息可以包括用戶在上一版本的文檔內(nèi)容的基礎(chǔ)上作了哪些修改,從而使得用戶在后續(xù)獲取到某一版本的文檔內(nèi)容時,可以通過該注釋信息快速查看到該文檔所作的修改之處。其中,該注釋信息可以由機(jī)器根據(jù)用戶的編輯動作生成,也可以由用戶手動添加。另外,在服務(wù)器接收到來自用戶終端20的文檔提交請求之后,還可以獲取所述用戶終端對應(yīng)的用戶信息,所述用戶信息可以包括:用戶id、用戶的聯(lián)系方式(如郵箱)等。從而在版本化存儲的同時,將用戶信息與被提交的目標(biāo)版本進(jìn)行關(guān)聯(lián),使得后續(xù)用戶可以查看到某一版本是由哪位用戶提交的。以分布式版本控制系統(tǒng)git為例,在進(jìn)行數(shù)據(jù)存儲之前,還可包括:參數(shù)校驗步驟。“參數(shù)校驗”是指:所有數(shù)據(jù)都要進(jìn)行內(nèi)容的校驗和(checksum)計算,并將此計算結(jié)果作為數(shù)據(jù)的唯一標(biāo)識和索引。通過校驗可以及時檢測到:文檔在傳輸時變得不完整、或者磁盤損壞導(dǎo)致文件數(shù)據(jù)缺失等情況。分布式版本控制系統(tǒng)git可以使用sha-1算法計算數(shù)據(jù)的校驗和,通過對文檔內(nèi)容計算出一個sha-1哈希值,作為指紋字符串(可由40個十六進(jìn)制字符組成),所有保存在版本化數(shù)據(jù)庫中的數(shù)據(jù)都是用上述指紋字符串來索引的,而不是靠文件名。在步驟102中,將業(yè)務(wù)數(shù)據(jù)庫中存儲的與目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為所述目標(biāo)文檔內(nèi)容。本實施例中,業(yè)務(wù)數(shù)據(jù)庫用于存儲最新版本的文檔數(shù)據(jù)??梢愿鶕?jù)文檔id,查詢業(yè)務(wù)數(shù)據(jù)庫是否存儲有與文檔id對應(yīng)的更早版本;如果有,則將與目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為所述目標(biāo)文檔內(nèi)容,若沒有,則直接寫入所述目標(biāo)文檔內(nèi)容。其中,可以按照業(yè)務(wù)數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)存儲格式,將接收到的目標(biāo)文檔內(nèi)容轉(zhuǎn)化為所述數(shù)據(jù)存儲格式并進(jìn)行存儲。在步驟103中,在確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中時,生成一與所述目標(biāo)文檔內(nèi)容關(guān)聯(lián)的版本號信息。本申請實施例中,用戶對文檔的某些操作行為是不需要用戶終端向服務(wù)器傳入版本號信息的,如:修改、新增、刪除文檔等行為。當(dāng)用戶提交文檔,并確定需要執(zhí)行“雙寫”操作之后,系統(tǒng)可以創(chuàng)建一個版本號信息,并將該版本號信息與待寫入的目標(biāo)文檔內(nèi)容形成唯一的對應(yīng)關(guān)系;反之,當(dāng)確定不需要執(zhí)行“雙寫”時,則不會有版本號信息,上述目標(biāo)文檔信息只會被寫入業(yè)務(wù)數(shù)據(jù)庫中。其中,所述版本號信息可以是系統(tǒng)根據(jù)該目標(biāo)文檔id已經(jīng)存在的一個或多個歷史版本號信息,按照一定規(guī)則進(jìn)行遞增而生成的。如:v1,v2,v3。在步驟104中,將與所述版本號信息關(guān)聯(lián)的所述目標(biāo)文檔內(nèi)容寫入到所述版本化數(shù)據(jù)庫中。所述版本化數(shù)據(jù)庫中,針對用戶的每一次文檔提交動作,都會對應(yīng)生成唯一的版本號信息(在指定的文檔id下的唯一性),并將與唯一版本號信息對應(yīng)的文檔內(nèi)容(也稱“快照”)寫入到版本化數(shù)據(jù)庫(如:git)中,快照內(nèi)容一旦形成便不可以修改,從而使得用戶可以通過該版本化數(shù)據(jù)庫,查詢到任意版本對應(yīng)的文檔內(nèi)容。圖4是本申請一實施例中的版本化數(shù)據(jù)庫中的數(shù)據(jù)存儲結(jié)構(gòu)。本實施例中,所述數(shù)據(jù)存儲結(jié)構(gòu)可包括:commit對象,tree對象及blob對象。其中,commit對象對應(yīng)于用戶的一次提交文檔的動作,一個版本對應(yīng)于一個commit對象,commit對象通過commitid索引。commit對象存儲著一個版本的入口,每個commit對象可以鏈表方式相互關(guān)聯(lián),從而可以通過一個commit對象可以到達(dá)另一個commit對象。tree對象是commit對象下的對象,每個commit對象里都對應(yīng)一個主tree對象,每個主tree對象下可以包含一個或多個子tree對象或blob對象。blob對象可以用于存放實際的文檔內(nèi)容,每一個blob對象里面對應(yīng)著用戶自定義的一種數(shù)據(jù)結(jié)構(gòu),比如,一個blob對象可包括:文檔id,文檔內(nèi)容、創(chuàng)建時間、作者等信息。當(dāng)需要獲取某版本的文檔內(nèi)容時,便可以根據(jù)用戶提供的待查版本號,就可以通過待查版本號確定與之對應(yīng)的commitid,然后通過commitid查找到此版本下的主tree對象,然后通過主tree對象確定對應(yīng)的blob對象,并根據(jù)blob對象渲染成可展示的文檔內(nèi)容,向推送到用戶終端上進(jìn)行展示。可見,本申請實施例提供的版本化數(shù)據(jù)庫中,數(shù)據(jù)存儲結(jié)構(gòu)是針對每一版本生成一個與該版本對應(yīng)的文檔內(nèi)容(或稱“快照”),相比于增量方式存儲用戶每一次編輯動作對應(yīng)的行為數(shù)據(jù),由于邏輯并不復(fù)雜,使得查詢某版本的文檔內(nèi)容的過程可在更短的時間內(nèi)完成,效率更高。當(dāng)然,版本化數(shù)據(jù)庫中的具體數(shù)據(jù)存儲結(jié)構(gòu)可以不限于上述實施例。本申請一實施例中,還可以實現(xiàn)將業(yè)務(wù)數(shù)據(jù)庫中的某文檔的內(nèi)容回溯到該文檔的某一歷史版本的功能。為此,所述方法還可包括步驟s10~s30,其中:在s10中,接收針對目標(biāo)文檔id的回滾命令,所述回滾命令包含回滾版本號信息。所述回滾命令可以是由用戶終端來發(fā)送,所述回滾版本號信息可以是用戶輸入的。在s20中,從版本化數(shù)據(jù)庫中查詢目標(biāo)文檔id下與所述回滾版本號信息對應(yīng)的文檔內(nèi)容。在s30中,將業(yè)務(wù)數(shù)據(jù)庫中存儲的所述目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為與所述回滾版本號信息對應(yīng)的文檔內(nèi)容。基于以上文檔存儲方法的內(nèi)容,以下將介紹一種文檔查詢方法。圖5是本申請一實施例中的一種文檔查詢方法的流程圖,該方法應(yīng)用于上述服務(wù)器10,該方法可包括如下步驟201至步驟205,其中:在步驟201中,接收來自用戶終端的包含待查文檔id的查詢請求。在步驟202中,判斷查詢請求中是否包含待查版本號信息。若包含待查版本號信息,則進(jìn)入步驟203,若不包含待查版本號信息,則進(jìn)入步驟204。本申請實施例中,當(dāng)存在待查版本號信息時,還可檢查該待查版本號信息是否符合預(yù)設(shè)的格式要求,如,預(yù)設(shè)的格式要求是:v100~v200,若待查版本號信息為:“100”,則不符合預(yù)設(shè)的格式要求,需進(jìn)入步驟204。在步驟203中,當(dāng)所述查詢請求中包含待查版本號信息時,從版本化數(shù)據(jù)庫中查找所述待查文檔id下與所述待查版本號信息對應(yīng)的文檔內(nèi)容;其中,所述版本化數(shù)據(jù)庫中存儲有與每一版本號信息對應(yīng)的文檔內(nèi)容。在步驟204中,當(dāng)所述查詢請求中不包含待查版本號信息時,從業(yè)務(wù)數(shù)據(jù)庫中查找所述待查文檔id對應(yīng)的文檔內(nèi)容;其中,所述業(yè)務(wù)數(shù)據(jù)庫中存儲有每一文檔的最新版本。本申請實施例中,由于每一版本號信息唯一地與一個commitid對應(yīng),故可以通過待查版本號信息查找到與之對應(yīng)的commitid,并查詢到與commit_id對應(yīng)的tree對象及blob內(nèi)的文檔內(nèi)容。在步驟205中,向用戶終端發(fā)送上述步驟203或步驟204查找到的所述文檔內(nèi)容,以在用戶終端上進(jìn)行展示。本申請實施例中,在不改變原有業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)的前提下,通過為業(yè)務(wù)數(shù)據(jù)庫配設(shè)一版本化數(shù)據(jù)庫來實現(xiàn)文檔的版本控制,其中,在數(shù)據(jù)存儲時,在業(yè)務(wù)數(shù)據(jù)庫中存儲最新版本的文檔內(nèi)容,在版本化數(shù)據(jù)庫存儲有與每一版本號信息對應(yīng)的文檔內(nèi)容,從而實現(xiàn)對任意版本的文檔內(nèi)容的查詢。由于不需要更改業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),使得業(yè)務(wù)數(shù)據(jù)庫能夠正常工作不受影響,并且一定程度上降低開發(fā)成本,文檔查詢效率較高。另外,在文檔查詢的過程中,當(dāng)用戶需要獲取最新版本的文檔內(nèi)容時,則直接會從業(yè)務(wù)數(shù)據(jù)庫中獲取最新版本的數(shù)據(jù),而無需查詢版本化數(shù)據(jù)庫,以在多個版本中找出最新版本的文檔內(nèi)容,這樣,顯然可在更短時間內(nèi)獲取到最新版本的數(shù)據(jù)。本申請實施例提供的文檔版本控制技術(shù),復(fù)用性、擴(kuò)展性較佳,適用范圍廣,可以實現(xiàn)通過一種成熟的版本化管理系統(tǒng)快速對一個已有業(yè)務(wù)數(shù)據(jù)庫的版本控制。在大大降低系統(tǒng)的復(fù)雜度的同時,還可以針對版本化管理擴(kuò)展更多的功能,如,對文檔分支的處理,不同版本之間的差異比較,不同版本的合并,等等。圖6示出了根據(jù)本申請的一示例性實施例的電子設(shè)備的示意結(jié)構(gòu)圖。該電子設(shè)備可以是商戶平臺服務(wù)器或支付平臺服務(wù)器,請參考圖6,在硬件層面,該電子設(shè)備包括處理器、內(nèi)部總線、網(wǎng)絡(luò)接口、內(nèi)存以及非易失性存儲器,當(dāng)然還可能包括其他業(yè)務(wù)所需要的硬件。處理器從非易失性存儲器中讀取對應(yīng)的計算機(jī)程序到內(nèi)存中然后運行,在邏輯層面上形成文檔存儲裝置。當(dāng)然,除了軟件實現(xiàn)方式之外,本申請并不排除其他實現(xiàn)方式,比如邏輯器件抑或軟硬件結(jié)合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。請參考圖7,在一種軟件實施方式中,一種文檔存儲裝置,包括:提交請求接收單元301,用于接收來自用戶終端的攜帶目標(biāo)文檔id、目標(biāo)版本號信息及目標(biāo)文檔內(nèi)容的文檔提交請求;第一寫入單元302,用于將業(yè)務(wù)數(shù)據(jù)庫中存儲的與所述目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為所述目標(biāo)文檔內(nèi)容;生成單元303,用于在確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中時,生成一與所述目標(biāo)文檔內(nèi)容關(guān)聯(lián)的版本號信息;第二寫入單元304,用于將與所述版本號信息關(guān)聯(lián)的所述目標(biāo)文檔內(nèi)容寫入到所述版本化數(shù)據(jù)庫中。本申請一可選實施例中,所述裝置還包括:判斷單元,用于當(dāng)所述目標(biāo)文檔id對應(yīng)的文檔類型屬于需要執(zhí)行雙寫操作的預(yù)設(shè)文檔類型之一時,確定需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中。當(dāng)然,在其他實施例中,所述判斷單元還可以具體用于:根據(jù)用戶操作行為,確定是否需要將所述目標(biāo)文檔內(nèi)容寫入版本化數(shù)據(jù)庫中。本申請一可選實施例中,所述版本化數(shù)據(jù)庫采用分布式版本控制系統(tǒng)git實現(xiàn)。本申請一可選實施例中,所述裝置還包括:命令接收單元,用于接收針對目標(biāo)文檔id的回滾命令,所述回滾命令包含回滾版本號信息;內(nèi)容查詢單元,用于從所述版本化數(shù)據(jù)庫中查詢所述目標(biāo)文檔id下與所述回滾版本號信息對應(yīng)的文檔內(nèi)容;回滾單元,用于將所述業(yè)務(wù)數(shù)據(jù)庫中存儲的所述目標(biāo)文檔id對應(yīng)的文檔內(nèi)容更新為與所述回滾版本號信息對應(yīng)的文檔內(nèi)容。圖8示出了根據(jù)本申請的一示例性實施例的電子設(shè)備的示意結(jié)構(gòu)圖。該電子設(shè)備可以是商戶平臺服務(wù)器或支付平臺服務(wù)器,請參考圖8,在硬件層面,該電子設(shè)備包括處理器、內(nèi)部總線、網(wǎng)絡(luò)接口、內(nèi)存以及非易失性存儲器,當(dāng)然還可能包括其他業(yè)務(wù)所需要的硬件。處理器從非易失性存儲器中讀取對應(yīng)的計算機(jī)程序到內(nèi)存中然后運行,在邏輯層面上形成文檔查詢裝置。當(dāng)然,除了軟件實現(xiàn)方式之外,本申請并不排除其他實現(xiàn)方式,比如邏輯器件抑或軟硬件結(jié)合的方式等等,也就是說以下處理流程的執(zhí)行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。請參考圖9,在一種軟件實施方式中,一種文檔查詢裝置,包括:查詢請求接收單元401,用于接收來自用戶終端的包含待查文檔id的查詢請求;第一查詢單元402,用于當(dāng)所述查詢請求中包含待查版本號信息時,從版本化數(shù)據(jù)庫中查找所述待查文檔id下與所述待查版本號信息對應(yīng)的文檔內(nèi)容;所述版本化數(shù)據(jù)庫中存儲有與每一版本號信息對應(yīng)的文檔內(nèi)容;第二查詢單元403,用于當(dāng)所述查詢請求中不包含待查版本號信息時,從業(yè)務(wù)數(shù)據(jù)庫中查找所述待查文檔id對應(yīng)的文檔內(nèi)容;所述業(yè)務(wù)數(shù)據(jù)庫中存儲有每一文檔的最新版本;文檔內(nèi)容發(fā)送單元404,用于向所述用戶終端發(fā)送查找到的所述文檔內(nèi)容。需說明的是,本文所記載的方法實施例的內(nèi)容和裝置實施例的內(nèi)容,在不相沖突的情況下,可以互為補(bǔ)充。上述實施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計算機(jī)芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。一種典型的實現(xiàn)設(shè)備為計算機(jī),計算機(jī)的具體形式可以是個人計算機(jī)、膝上型計算機(jī)、蜂窩電話、相機(jī)電話、智能電話、個人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件收發(fā)設(shè)備、游戲控制臺、平板計算機(jī)、可穿戴設(shè)備或者這些設(shè)備中的任意幾種設(shè)備的組合。為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當(dāng)然,在實施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機(jī)可讀介質(zhì)的示例。計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。本申請可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。本說明書中的各個實施例均采用遞進(jìn)的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。當(dāng)前第1頁12