
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種數(shù)據(jù)同步方法和裝置。
背景技術(shù):
:現(xiàn)有技術(shù)中,主要有三種數(shù)據(jù)同步方式,具體如下:方式一:基于數(shù)據(jù)庫服務(wù)自帶的方式對自身多數(shù)據(jù)庫的數(shù)據(jù)同步。對于上述數(shù)據(jù)同步的方式,由于只有部分?jǐn)?shù)據(jù)庫自帶數(shù)據(jù)同步功能,所以限制了數(shù)據(jù)庫的選擇,較適合單一固定的產(chǎn)品,用戶無法根據(jù)其需求對要同步的數(shù)據(jù)進(jìn)行篩選,導(dǎo)致不同的數(shù)據(jù)庫之間數(shù)據(jù)同步的性能較差。并且,每次部署項(xiàng)目都需要對其進(jìn)行單獨(dú)部署,增加部署復(fù)雜度,且不同數(shù)據(jù)庫配置方式不同,增加部署成本。方式二:基于第三方平臺開發(fā)的多數(shù)據(jù)庫之間的數(shù)據(jù)同步。對于上述數(shù)據(jù)同步的方式,能較好的支持多數(shù)據(jù)之間的同步,但是不適合用于緩存降低數(shù)據(jù)庫壓力的系統(tǒng),數(shù)據(jù)的直接更新緩存獲取從而導(dǎo)致緩存垃圾數(shù)據(jù),并且此種同步方式對同步異構(gòu)表的支持不足,不便于不同系統(tǒng)之間集成。方式三:基于XML為數(shù)據(jù)介質(zhì)的網(wǎng)絡(luò)或者本地?cái)?shù)據(jù)同步方式。對于上述數(shù)據(jù)同步的方式,因?yàn)閄ML有嚴(yán)格的格式約定,存在對數(shù)據(jù)增量加入文件的方式支持不足,數(shù)據(jù)文件會龐大,占用磁盤空間較大的問題。而且,XML格式文件不支持文件續(xù)寫,無法滿足增量數(shù)據(jù)變更的實(shí)時(shí)續(xù)寫文件,從而影響變更同步的實(shí)時(shí)性。針對上述的問題,目前尚未提出有效的解決方案。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種數(shù)據(jù)同步方法和裝置,以至少解決現(xiàn)有技術(shù)中不同數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步的性能較差的技術(shù)問題。根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種數(shù)據(jù)同步方法,包括:讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,其中, 所述第一數(shù)據(jù)源用于提供數(shù)據(jù)同步所需的數(shù)據(jù)n為大于等于2的自然數(shù);讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,所述數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,應(yīng)用A1至應(yīng)用An構(gòu)成所述n個(gè)應(yīng)用,數(shù)據(jù)目錄D1至數(shù)據(jù)目錄Dn構(gòu)成所述n個(gè)應(yīng)用的數(shù)據(jù)目錄;解析所述應(yīng)用Ai的更新配置文件,得到所述應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的目錄和所述目標(biāo)數(shù)據(jù)的類型屬性;以及根據(jù)所述數(shù)據(jù)索引文件Ei中的變更信息,按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述第一數(shù)據(jù)源中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),第二數(shù)據(jù)源獲取所述第一數(shù)據(jù)源中轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù),完成數(shù)據(jù)同步,其中,所述第二數(shù)據(jù)源為存儲所述應(yīng)用A1至所述應(yīng)用An的數(shù)據(jù)源。進(jìn)一步地,所述數(shù)據(jù)索引文件Ei中的變更信息包括全量更新時(shí)間和增量文件行數(shù),根據(jù)所述數(shù)據(jù)索引文件Ei中的變更信息,按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述第一數(shù)據(jù)源中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),第二數(shù)據(jù)源獲取所述第一數(shù)據(jù)源中轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù),完成數(shù)據(jù)同步包括:讀取所述數(shù)據(jù)索引文件Ei中的所述全量更新時(shí)間;根據(jù)所述全量更新時(shí)間判斷是否進(jìn)行全量數(shù)據(jù)同步;在根據(jù)所述全量更新時(shí)間判斷出進(jìn)行所述全量數(shù)據(jù)同步的情況下,從所述第一數(shù)據(jù)源中讀取全量數(shù)據(jù)文件,并按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述全量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu),將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源;在根據(jù)所述全量更新時(shí)間判斷出不進(jìn)行所述全量數(shù)據(jù)同步的情況下,或在將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源之后,讀取所述數(shù)據(jù)索引文件Ei中的所述增量文件行數(shù);根據(jù)所述增量文件行數(shù)判斷是否進(jìn)行增量數(shù)據(jù)同步;以及在根據(jù)所述增量文件行數(shù)判斷出進(jìn)行所述增量數(shù)據(jù)同步的情況下,從所述第一數(shù)據(jù)源中讀取增量數(shù)據(jù)文件,并按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述增量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu),將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源。進(jìn)一步地,將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源包括:從所述第二數(shù)據(jù)源查詢所述目標(biāo)數(shù)據(jù)的所有鍵值;存儲所述所有鍵值至臨時(shí)文件;判斷轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的鍵值Kj’是否存在于所述臨時(shí)文件中,其中,j’依次取1至m1,m1為所述全量數(shù)據(jù)文件中鍵值的總數(shù)量;在判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’存在于所述臨時(shí)文件中的情況下,將所述第二數(shù)據(jù)源中所述鍵值Kj’表示的數(shù)據(jù)更新為轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中所述鍵值Kj’表示的數(shù)據(jù),并刪除所述臨時(shí)文件中的所述鍵值Kj’;在判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’不存在于所述臨時(shí)文件中的情況下,保存轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’表示的數(shù)據(jù)至所述第二數(shù)據(jù)源;以及從所述第二數(shù)據(jù)源中刪除所述臨時(shí)文件中剩余的 鍵值表示的數(shù)據(jù)。進(jìn)一步地,將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源包括:從所述第二數(shù)據(jù)源查詢所述目標(biāo)數(shù)據(jù)的所有鍵值;存儲所述所有鍵值至臨時(shí)文件;判斷轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的鍵值Kj”是否存在于所述臨時(shí)文件中,其中,j”依次取1至m2,m2為所述增量數(shù)據(jù)文件中鍵值的總數(shù)量;在判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”存在于所述臨時(shí)文件中的情況下,將所述第二數(shù)據(jù)源中所述鍵值Kj”表示的數(shù)據(jù)更新為轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中所述鍵值Kj”表示的數(shù)據(jù),并刪除所述臨時(shí)文件中的所述鍵值Kj”;在判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”不存在于所述臨時(shí)文件中的情況下,保存轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”表示的數(shù)據(jù)至所述第二數(shù)據(jù)源;以及從所述第二數(shù)據(jù)源中刪除所述臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù)。進(jìn)一步地,在讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,所述方法還包括:解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到需要生成的第一數(shù)據(jù)類型;判斷所述第二數(shù)據(jù)源中是否存在類型為所述第一數(shù)據(jù)類型的數(shù)據(jù);以及在判斷出所述第二數(shù)據(jù)源中存在類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第一數(shù)據(jù)源。進(jìn)一步地,在判斷出所述第二數(shù)據(jù)源中存在類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第一數(shù)據(jù)源包括:判斷第一全量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,所述第一全量數(shù)據(jù)文件為所述第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的全量數(shù)據(jù)文件;在判斷出所述第一全量數(shù)據(jù)文件的大小達(dá)到所述預(yù)設(shè)大小的情況下,在所述第一數(shù)據(jù)源中創(chuàng)建第二全量數(shù)據(jù)文件,并將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第二全量數(shù)據(jù)文件;以及在判斷出所述第一全量數(shù)據(jù)文件的大小未達(dá)到所述預(yù)設(shè)大小的情況下,將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第一全量數(shù)據(jù)文件。進(jìn)一步地,在讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,所述方法還包括:接收數(shù)據(jù)更新信息,其中,所述數(shù)據(jù)更新信息包括更新數(shù)據(jù)和所述更新數(shù)據(jù)的數(shù)據(jù)類型;解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到與所述更新數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的目標(biāo)數(shù)據(jù)格式;將所述更新數(shù)據(jù)的格式轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式;以及將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第一數(shù)據(jù)源。進(jìn)一步地,將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第一數(shù)據(jù)源包括: 判斷第一增量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,所述第一增量數(shù)據(jù)文件為所述第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的增量數(shù)據(jù)文件;在判斷出所述第一增量數(shù)據(jù)文件的大小達(dá)到所述預(yù)設(shè)大小的情況下,在所述第一數(shù)據(jù)源中創(chuàng)建第二增量數(shù)據(jù)文件,并將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第二增量數(shù)據(jù)文件;以及在判斷出所述第一增量數(shù)據(jù)文件的大小未達(dá)到所述預(yù)設(shè)大小的情況下,將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第一增量數(shù)據(jù)文件。進(jìn)一步地,所述目錄索引文件為CSV(逗號分隔值,Comma-SeparatedValues)格式,所述數(shù)據(jù)索引文件E1至數(shù)據(jù)索引文件En均為CSV格式。根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種數(shù)據(jù)同步裝置,包括:第一讀取單元,用于讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,其中,所述第一數(shù)據(jù)源用于提供數(shù)據(jù)同步所需的數(shù)據(jù),n為大于等于2的自然數(shù);第二讀取單元,用于讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,所述數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,應(yīng)用A1至應(yīng)用An構(gòu)成所述n個(gè)應(yīng)用,數(shù)據(jù)目錄D1至數(shù)據(jù)目錄Dn構(gòu)成所述n個(gè)應(yīng)用的數(shù)據(jù)目錄;第一解析單元,用于解析所述應(yīng)用Ai的更新配置文件,得到所述應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的目錄和所述目標(biāo)數(shù)據(jù)的類型屬性;以及同步單元,用于根據(jù)所述數(shù)據(jù)索引文件Ei中的變更信息,按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述第一數(shù)據(jù)源中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),第二數(shù)據(jù)源獲取所述第一數(shù)據(jù)源中轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù),完成數(shù)據(jù)同步,其中,所述第二數(shù)據(jù)源為存儲所述應(yīng)用A1至所述應(yīng)用An的數(shù)據(jù)源。進(jìn)一步地,所述數(shù)據(jù)索引文件Ei中的變更信息包括全量更新時(shí)間和增量文件行數(shù),所述同步單元包括:第一讀取子單元,用于讀取所述數(shù)據(jù)索引文件Ei中的所述全量更新時(shí)間;第一判斷子單元,用于根據(jù)所述全量更新時(shí)間判斷是否進(jìn)行全量數(shù)據(jù)同步;第一同步子單元,用于在所述第一判斷子單元根據(jù)所述全量更新時(shí)間判斷出進(jìn)行所述全量數(shù)據(jù)同步的情況下,從所述第一數(shù)據(jù)源中讀取全量數(shù)據(jù)文件,并按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述全量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu),將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源;第二讀取子單元,用于在所述第一判斷子單元根據(jù)所述全量更新時(shí)間判斷出不進(jìn)行所述全量數(shù)據(jù)同步的情況下,或在所述第一同步子單元將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源之后,讀取所述數(shù)據(jù)索引文件Ei中的所述增量文件行數(shù);第二判斷子單元,用于根據(jù)所述增量文件行數(shù)判斷是否進(jìn)行增量數(shù)據(jù)同步;以及第二同步子單元,用于在所述第二判斷子單元根據(jù)所述增量文件行數(shù)判斷出進(jìn)行所述增量數(shù)據(jù)同步的情況下,從所述第一數(shù)據(jù)源中讀取增量數(shù)據(jù)文件,并按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述增量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu),將轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件同步至所述第二數(shù)據(jù)源。進(jìn)一步地,所述第一同步子單元包括:第一查詢模塊,用于從所述第二數(shù)據(jù)源查詢所述目標(biāo)數(shù)據(jù)的所有鍵值;第一存儲模塊,用于存儲所述所有鍵值至臨時(shí)文件;第一判斷模塊,用于判斷轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的鍵值Kj’是否存在于所述臨時(shí)文件中,其中,j’依次取1至m1,m1為所述全量數(shù)據(jù)文件中鍵值的總數(shù)量;第一處理模塊,用于在所述第一判斷子模塊判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’存在于所述臨時(shí)文件中的情況下,將所述第二數(shù)據(jù)源中所述鍵值Kj’表示的數(shù)據(jù)更新為轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中所述鍵值Kj’表示的數(shù)據(jù),并刪除所述臨時(shí)文件中的所述鍵值Kj’;第二處理模塊,用于在所述第一判斷子模塊判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’不存在于所述臨時(shí)文件中的情況下,保存轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述全量數(shù)據(jù)文件中的所述鍵值Kj’表示的數(shù)據(jù)至所述第二數(shù)據(jù)源;以及第一刪除模塊,用于從所述第二數(shù)據(jù)源中刪除所述臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù)。進(jìn)一步地,所述第二同步子單元包括:第二查詢模塊,用于從所述第二數(shù)據(jù)源查詢所述目標(biāo)數(shù)據(jù)的所有鍵值;第二存儲模塊,用于存儲所述所有鍵值至臨時(shí)文件;第二判斷模塊,用于判斷轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的鍵值Kj”是否存在于所述臨時(shí)文件中,其中,j”依次取1至m2,m2為所述增量數(shù)據(jù)文件中鍵值的總數(shù)量;第三處理模塊,用于在所述第二判斷子模塊判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”存在于所述臨時(shí)文件中的情況下,將所述第二數(shù)據(jù)源中所述鍵值Kj”表示的數(shù)據(jù)更新為轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中所述鍵值Kj”表示的數(shù)據(jù),并刪除所述臨時(shí)文件中的所述鍵值Kj”;第四處理模塊,用于在所述第二判斷子模塊判斷出轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”不存在于所述臨時(shí)文件中的情況下,保存轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的所述增量數(shù)據(jù)文件中的所述鍵值Kj”表示的數(shù)據(jù)至所述第二數(shù)據(jù)源;以及第二刪除模塊,用于從所述第二數(shù)據(jù)源中刪除所述臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù)。進(jìn)一步地,所述裝置還包括:第二解析單元,用于在所述第一讀取單元讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到需要生成的第一數(shù)據(jù)類型;判斷單元,用于判斷所述第二數(shù)據(jù)源中是否存在類型為所述第一數(shù)據(jù)類型的數(shù)據(jù);以及第一寫入單元,用于在所述判斷單元判斷出所述第二數(shù)據(jù)源中存在類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第一數(shù)據(jù)源。進(jìn)一步地,所述第一寫入單元包括:第三判斷子單元,用于判斷第一全量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,所述第一全量數(shù)據(jù)文件為所述第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的全量數(shù)據(jù)文件;第一寫入子單元,用于在所述第三判斷子單元判斷出 所述第一全量數(shù)據(jù)文件的大小達(dá)到所述預(yù)設(shè)大小的情況下,在所述第一數(shù)據(jù)源中創(chuàng)建第二全量數(shù)據(jù)文件,并將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第二全量數(shù)據(jù)文件;以及第二寫入子單元,用于在所述第三判斷子單元判斷出所述第一全量數(shù)據(jù)文件的大小未達(dá)到所述預(yù)設(shè)大小的情況下,將所述第二數(shù)據(jù)源中類型為所述第一數(shù)據(jù)類型的數(shù)據(jù)寫入所述第一全量數(shù)據(jù)文件。進(jìn)一步地,所述裝置還包括:接收單元,用于在所述第一讀取單元讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,接收數(shù)據(jù)更新信息,其中,所述數(shù)據(jù)更新信息包括更新數(shù)據(jù)和所述更新數(shù)據(jù)的數(shù)據(jù)類型;第三解析單元,用于解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到與所述更新數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的目標(biāo)數(shù)據(jù)格式;轉(zhuǎn)換單元,用于將所述更新數(shù)據(jù)的格式轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式;以及第二寫入單元,用于將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第一數(shù)據(jù)源。進(jìn)一步地,所述第二寫入單元包括:第四判斷子單元,用于判斷第一增量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,所述第一增量數(shù)據(jù)文件為所述第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的增量數(shù)據(jù)文件;第三寫入子單元,用于在所述第四判斷子單元判斷出所述第一增量數(shù)據(jù)文件的大小達(dá)到所述預(yù)設(shè)大小的情況下,在所述第一數(shù)據(jù)源中創(chuàng)建第二增量數(shù)據(jù)文件,并將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第二增量數(shù)據(jù)文件;以及第四寫入子單元,用于在所述第四判斷子單元判斷出所述第一增量數(shù)據(jù)文件的大小未達(dá)到所述預(yù)設(shè)大小的情況下,將轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)格式的所述更新數(shù)據(jù)寫入所述第一增量數(shù)據(jù)文件。進(jìn)一步地,所述目錄索引文件為CSV格式,所述數(shù)據(jù)索引文件E1至數(shù)據(jù)索引文件En均為CSV格式。在本發(fā)明實(shí)施例中,采用讀取第一數(shù)據(jù)源中的目錄索引文件,得到所述目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,其中,所述第一數(shù)據(jù)源用于提供數(shù)據(jù)同步所需的數(shù)據(jù),n為大于等于2的自然數(shù);讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,所述數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,應(yīng)用A1至應(yīng)用An構(gòu)成所述n個(gè)應(yīng)用,數(shù)據(jù)目錄D1至數(shù)據(jù)目錄Dn構(gòu)成所述n個(gè)應(yīng)用的數(shù)據(jù)目錄;解析所述應(yīng)用Ai的更新配置文件,得到所述應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的目錄和所述目標(biāo)數(shù)據(jù)的類型屬性;以及根據(jù)所述數(shù)據(jù)索引文件Ei中的變更信息,按照所述目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換所述第一數(shù)據(jù)源中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),第二數(shù)據(jù)源獲取所述第一數(shù)據(jù)源中轉(zhuǎn)換所述數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù),完成數(shù)據(jù)同步,其中,所述第二數(shù)據(jù)源為存儲所述應(yīng)用A1至所述應(yīng)用An的數(shù)據(jù)源。通過以索引文件方式記錄數(shù)據(jù)的情 況,在進(jìn)行數(shù)據(jù)同步過程中,通過讀取索引文件的方式進(jìn)行數(shù)據(jù)更新,實(shí)現(xiàn)了數(shù)據(jù)快速、有序、高效地讀寫,達(dá)到了提高數(shù)據(jù)同步效率的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中不同的數(shù)據(jù)庫之間數(shù)據(jù)同步的性能較差的技術(shù)問題。附圖說明此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中目錄索引文件和數(shù)據(jù)索引文件的目錄結(jié)構(gòu)圖;圖3是根據(jù)本發(fā)明又一實(shí)施例的數(shù)據(jù)同步方法的流程圖;圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中進(jìn)行全量同步的流程圖;圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中進(jìn)行增量同步的流程圖;圖6是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中生成全量數(shù)據(jù)的流程圖;圖7是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中生成增量數(shù)據(jù)的流程圖;以及圖8是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步裝置的示意圖。具體實(shí)施方式為了使本
技術(shù)領(lǐng)域:
的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或 對于這些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。根據(jù)本發(fā)明實(shí)施例,提供了一種數(shù)據(jù)同步方法的方法實(shí)施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法的流程圖,如圖1所示,該方法主要包括如下步驟S102至步驟S108:步驟S102,讀取第一數(shù)據(jù)源中的目錄索引文件,得到目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,其中,第一數(shù)據(jù)源用于提供數(shù)據(jù)同步所需的數(shù)據(jù),目錄索引文件采用CSV格式,n為大于等于2的自然數(shù);步驟S104,讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,應(yīng)用A1至應(yīng)用An構(gòu)成n個(gè)應(yīng)用,數(shù)據(jù)目錄D1至數(shù)據(jù)目錄Dn構(gòu)成n個(gè)應(yīng)用的數(shù)據(jù)目錄,數(shù)據(jù)索引文件E1至數(shù)據(jù)索引文件En均采用CSV格式;步驟S106,解析應(yīng)用Ai的更新配置文件,得到應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的目錄和目標(biāo)數(shù)據(jù)的類型屬性,其中,更新配置文件存儲在需要同步的數(shù)據(jù)庫中,在本發(fā)明實(shí)施例中,第二數(shù)據(jù)源為需要進(jìn)行數(shù)據(jù)同步的數(shù)據(jù)庫,更新配置文件存在第一數(shù)據(jù)源中。對更新配置文件的解析則可以采用任意一種進(jìn)行配置文件解析的方式,此處不再贅述;步驟S108,根據(jù)數(shù)據(jù)索引文件Ei中的變更信息,按照目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換第一數(shù)據(jù)源中的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),第二數(shù)據(jù)源獲取第一數(shù)據(jù)源中轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù),完成數(shù)據(jù)同步,即,以數(shù)據(jù)索引文件Ei中的變更信息為基準(zhǔn),同步第一數(shù)據(jù)源中的數(shù)據(jù)至第二數(shù)據(jù)源,其中,第二數(shù)據(jù)源為存儲應(yīng)用A1至應(yīng)用An的數(shù)據(jù)源。本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法,通過以索引文件方式記錄數(shù)據(jù)的情況,在進(jìn)行數(shù)據(jù)同步過程中,通過讀取索引文件的方式進(jìn)行數(shù)據(jù)更新,實(shí)現(xiàn)了數(shù)據(jù)快速、有序、高效地讀寫,達(dá)到了提高數(shù)據(jù)同步效率的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中不同的數(shù)據(jù)庫之間數(shù)據(jù)同步的性能較差的技術(shù)問題。圖2是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中目錄索引文件和數(shù)據(jù)索引文件的目錄結(jié)構(gòu)圖,如圖2所示,在數(shù)據(jù)文件根目錄下的是目錄索引文件,目錄索引文件描述當(dāng)前數(shù)據(jù)同步的應(yīng)用目錄區(qū)分,每個(gè)目錄下都包含一份數(shù)據(jù)索引文件。目錄索引文件的作用是可以區(qū)分當(dāng)前數(shù)據(jù)來源于哪些應(yīng)用,并且避免應(yīng)用間數(shù)據(jù)文件的覆蓋;數(shù)據(jù)索 引文件的作用是記錄數(shù)據(jù)的全量、增量同步,同步的時(shí)間、區(qū)間以及同步文件名。在圖2中,示意性示出了目錄索引文件包括應(yīng)用1至應(yīng)用n的數(shù)據(jù)目錄,對于任一應(yīng)用的數(shù)據(jù)目錄來說,在該數(shù)據(jù)目錄下的是該應(yīng)用的數(shù)據(jù)索引文件,數(shù)據(jù)索引文件主要包括該應(yīng)用各種數(shù)據(jù)類型的目錄,其中,對于某一種數(shù)據(jù)類型目錄來說,在該目錄下又包括全量數(shù)據(jù)目錄和增量數(shù)據(jù)目錄,全量數(shù)據(jù)目錄下存儲的是全量數(shù)據(jù)文件,增量數(shù)據(jù)目錄下存儲的增量數(shù)據(jù)文件。其中,為了實(shí)現(xiàn)讀寫分離,避免某個(gè)數(shù)據(jù)目錄下數(shù)據(jù)文件在進(jìn)行數(shù)據(jù)讀取的時(shí)候又寫入新的數(shù)據(jù),設(shè)置在數(shù)據(jù)索引文件下的各種數(shù)據(jù)類型的目錄為隨機(jī)數(shù)據(jù)目錄。進(jìn)一步地,在本發(fā)明實(shí)施例中,目錄索引文件和數(shù)據(jù)索引文件均采用CSV格式,目錄索引文件的格式在下表1中示出,數(shù)據(jù)索引文件的格式在下表2中示出:表1應(yīng)用類型應(yīng)用編號應(yīng)用目錄更新時(shí)間排序號appTypeappCodeappDirupdateTimesort其中,對于目錄索引文件的格式作如下說明:應(yīng)用編號(appCode)必須保持唯一,一個(gè)應(yīng)用實(shí)例只有一條索引記錄。排序號(sort)是保證同步時(shí),讀取應(yīng)用數(shù)據(jù)能夠按照排序號的大小進(jìn)行順序讀取。表2其中,對于數(shù)據(jù)索引文件的格式作如下說明:數(shù)據(jù)類型(dataType)必須保持唯一,一種數(shù)據(jù)類型只有一條索引記錄。隨機(jī)目錄(syncDir)在數(shù)據(jù)生成過能中,用于讀寫分離,在重復(fù)生成數(shù)據(jù)文件的過程中,以隨機(jī)目錄分開,避免相同目錄的數(shù)據(jù)文件正在被讀取時(shí)造成沖突;在數(shù)據(jù)同步過能中,用于指明當(dāng)前需要同步的數(shù)據(jù)文件所在的目錄。全量更新時(shí)間(fullUpdateTime)表示最近一次全量數(shù)據(jù)文件生成的時(shí)間,為全量數(shù)據(jù)同步提供比較依據(jù)。全量目錄(fullDir)表示全量數(shù)據(jù)文件的目錄,屬于隨機(jī)目錄syncDir的子目錄。全量文件名(fullFileName)表示全量數(shù)據(jù)文件名的前綴。全量文件數(shù)(fullCount)表示該類全量數(shù)據(jù)文件的分片個(gè)數(shù),結(jié)合fullFileName組合確定全量數(shù)據(jù)文件名。例:fullCount=3,fullFileName=User;則全量數(shù)據(jù)文件名分別為:User.0.csv,User.1.csv,User.2.csv,文件序號從0開始。增量文件目錄(increDir)表示增量數(shù)據(jù)文件的目錄,也屬于syncDir的子目錄。增量文件名(increFileName)表示增量數(shù)據(jù)文件名的前綴。增量更新行號(increRowId)表示增量文件行數(shù),格式[分片數(shù).行號]。例:increRowId=3.3,表示有3個(gè)分片文件,且第1和第2個(gè)分片已滿,第3個(gè)分片文件有3行數(shù)據(jù);結(jié)合increFileName得到增量數(shù)據(jù)文件名分別為:User.0.csv,User.1.csv,User.2.csv,文件序號從0開始,規(guī)則同全量文件名相同。利用CSV數(shù)據(jù)格式進(jìn)行索引,實(shí)現(xiàn)了提供一種開放式且標(biāo)準(zhǔn)的數(shù)據(jù)格式,方便第三方系統(tǒng)解析和集成,同時(shí)結(jié)合索引的特點(diǎn)保證,保證數(shù)據(jù)快速,有序,高效的讀寫。圖3是根據(jù)本發(fā)明又一實(shí)施例的數(shù)據(jù)同步方法的流程圖,如圖3所示,該方法主要包括如下步驟S301至步驟S312:步驟S301,判斷是否有權(quán)限讀取第一數(shù)據(jù)源,其中,在判斷出有權(quán)限對第一數(shù)據(jù)源進(jìn)行讀取的情況下,依次執(zhí)行如下步驟S302至步驟S312,在判斷出沒有權(quán)限的情況下,則結(jié)束流程。具體地,判斷是否有權(quán)限讀取第一數(shù)據(jù)源可以采用任意一種進(jìn)行權(quán)限驗(yàn)證的方式,在本發(fā)明實(shí)施例中,進(jìn)行權(quán)限驗(yàn)證,主要是為了防止數(shù)據(jù)泄露或者被非法獲取,提高數(shù)據(jù)安全性。步驟S302,讀取第一數(shù)據(jù)源中的目錄索引文件,得到目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,具體地,同上述步驟S102。步驟S303,從第一數(shù)據(jù)源中讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,即,對每一個(gè)應(yīng)用的數(shù)據(jù)目錄均執(zhí)行數(shù)據(jù)索引文件讀取,相應(yīng)地,同樣還需執(zhí)行后續(xù)步驟S304至步驟S312,該步驟S303同上述步驟S104。步驟S304,解析應(yīng)用Ai的更新配置文件,得到應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)和目標(biāo)數(shù)據(jù)的類型屬性,其中,更新配置文件存儲在需要同步的數(shù)據(jù)庫中,在本發(fā)明實(shí)施例中,第二數(shù)據(jù)源為需要進(jìn)行數(shù)據(jù)同步的數(shù)據(jù)庫,更新配置文件存在第一數(shù)據(jù)源中。對更新配置文件的解析則可以采用任意一種進(jìn)行配置文件解析的方式,此處不再贅述,該步驟S304同上述步驟S106。步驟S305,判斷是否對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步,具體地,在本發(fā)明實(shí)施例 中,進(jìn)行全量同步與否的判斷主要是讀取索引文件Ei中的全量更新時(shí)間,然后根據(jù)全量更新時(shí)間判斷是否進(jìn)行全量數(shù)據(jù)同步,如果第一數(shù)據(jù)源中索引文件Ei的全量更新時(shí)間與第二數(shù)據(jù)源中索引文件Ei的全量更新時(shí)間不一致,則確定需要對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步,反之則不進(jìn)行全量數(shù)據(jù)同步。步驟S306,在判斷出需要對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步的情況下,從第一數(shù)據(jù)源中讀取全量數(shù)據(jù)文件,然后以應(yīng)用Ai中的目標(biāo)數(shù)據(jù)的類型屬性為基準(zhǔn),將全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源,具體地,可以按照步驟S307和步驟S308執(zhí)行。步驟S307,按照更新配置文件中,需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的類型屬性來轉(zhuǎn)換全量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu)。步驟S308,將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源。步驟S309,在將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源之后,或在判斷出不對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步的情況下,判斷是否對第二數(shù)據(jù)源進(jìn)行增量數(shù)據(jù)同步。具體地,在將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源之后,進(jìn)行增量同步與否的判斷主要是判斷增量更新行號是否大于零,在大于零的情況下,即確定需要進(jìn)行增量數(shù)據(jù)同步,反之,則不進(jìn)行增量數(shù)據(jù)同步;在判斷出不對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步的情況下,進(jìn)行增量同步與否的判斷主要是第二數(shù)據(jù)源中增量更新行號是否小于第一數(shù)據(jù)源中對應(yīng)的增量更新行號,如果小于的話,即確定需要進(jìn)行增量數(shù)據(jù)同步,反之,則不進(jìn)行增量數(shù)據(jù)同步。步驟S310,在判斷出需要對第二數(shù)據(jù)源進(jìn)行增量數(shù)據(jù)同步的情況下,從第一數(shù)據(jù)源中讀取增量數(shù)據(jù)文件,然后以應(yīng)用Ai中的目標(biāo)數(shù)據(jù)的類型屬性為基準(zhǔn),將增量數(shù)據(jù)文件同步至第二數(shù)據(jù)源,具體地,可以按照步驟S311和步驟S312執(zhí)行。步驟S311,按照更新配置文件中,需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)的類型屬性來轉(zhuǎn)換增量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu)。步驟S312,將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件同步至第二數(shù)據(jù)源。其中,步驟S305至步驟S312相當(dāng)于上述步驟S108。圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中進(jìn)行全量同步的流程圖,如圖4所示,將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源主要包括如下步驟S401至步驟S406:步驟S401,從第二數(shù)據(jù)源查詢目標(biāo)數(shù)據(jù)的所有鍵值,具體地,按照目標(biāo)數(shù)據(jù)的數(shù)據(jù)類型,對每一類數(shù)據(jù)依次進(jìn)行鍵值的查找,即,對每一類數(shù)據(jù)均執(zhí)行步驟S401至步 驟S406。步驟S402,存儲所有鍵值至臨時(shí)文件。步驟S403,判斷轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’是否存在于臨時(shí)文件中,其中,j’依次取1至m1,m1為全量數(shù)據(jù)文件中鍵值的總數(shù)量。步驟S404,在判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’存在于臨時(shí)文件中的情況下,將第二數(shù)據(jù)源中鍵值Kj’表示的數(shù)據(jù)更新為轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中鍵值Kj’表示的數(shù)據(jù),并刪除臨時(shí)文件中的鍵值Kj’,即,以第一數(shù)據(jù)源中的數(shù)據(jù)為基準(zhǔn),更新兩個(gè)數(shù)據(jù)源中均存在的鍵值所表示的數(shù)據(jù)。步驟S405,在判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’不存在于臨時(shí)文件中的情況下,保存轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’表示的數(shù)據(jù)至第二數(shù)據(jù)源,如果全量數(shù)據(jù)文件中的某個(gè)鍵值不存在于臨時(shí)文件中,則表示這個(gè)鍵值所表示的數(shù)據(jù)為新增數(shù)據(jù),此種情況,將新增的數(shù)據(jù)保存至第二數(shù)據(jù)源。步驟S406,從第二數(shù)據(jù)源中刪除臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù),即,刪除第二數(shù)據(jù)源中需要被刪除掉的數(shù)據(jù)。圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中進(jìn)行增量同步的流程圖,如圖5所示,將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源主要包括如下步驟S501至步驟S506:步驟S501,從第二數(shù)據(jù)源查詢目標(biāo)數(shù)據(jù)的所有鍵值,具體地,按照目標(biāo)數(shù)據(jù)的數(shù)據(jù)類型,對每一類數(shù)據(jù)依次進(jìn)行鍵值的查找,即,對每一類數(shù)據(jù)均執(zhí)行步驟S501至步驟S506。步驟S502,存儲所有鍵值至臨時(shí)文件。步驟S503,判斷轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”是否存在于臨時(shí)文件中,其中,j”依次取1至m2,m2為增量數(shù)據(jù)文件中鍵值的總數(shù)量。步驟S504,在判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”存在于臨時(shí)文件中的情況下,將第二數(shù)據(jù)源中鍵值Kj”表示的數(shù)據(jù)更新為轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中鍵值Kj”表示的數(shù)據(jù),并刪除臨時(shí)文件中的鍵值Kj”,即,以第一數(shù)據(jù)源中的數(shù)據(jù)為基準(zhǔn),更新兩個(gè)數(shù)據(jù)源中均存在的鍵值所表示的數(shù)據(jù)。步驟S505,在判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”不存在于臨時(shí)文件中的情況下,保存轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”表示的數(shù)據(jù)至第 二數(shù)據(jù)源,如果全量數(shù)據(jù)文件中的某個(gè)鍵值不存在于臨時(shí)文件中,則表示這個(gè)鍵值所表示的數(shù)據(jù)為新增數(shù)據(jù),此種情況,將新增的數(shù)據(jù)保存至第二數(shù)據(jù)源。步驟S506,從第二數(shù)據(jù)源中刪除臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù),即,刪除第二數(shù)據(jù)源中需要被刪除掉的數(shù)據(jù)。進(jìn)一步地,在對第一數(shù)據(jù)源中的目錄索引文件進(jìn)行讀取之前,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法還包括生成全量數(shù)據(jù)和增量數(shù)據(jù),圖6是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中生成全量數(shù)據(jù)的流程圖,圖7是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步方法中生成增量數(shù)據(jù)的流程圖,以下結(jié)合附圖具體說明:如圖6所示,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法中生成全量數(shù)據(jù)主要包括如下步驟S601至步驟S606:步驟S601,解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到需要生成的第一數(shù)據(jù)類型,然后判斷第二數(shù)據(jù)源中是否存在類型為第一數(shù)據(jù)類型的數(shù)據(jù),在解析步驟中,還可以解析得到第一數(shù)據(jù)格式,以便后續(xù)進(jìn)行數(shù)據(jù)同步的過程中,能夠?qū)?shù)據(jù)文件內(nèi)數(shù)據(jù)轉(zhuǎn)換為程序能夠識別的對象格式(即,第一數(shù)據(jù)格式)。其中,得到的第一數(shù)據(jù)類型可以包括多個(gè)不同的數(shù)據(jù)類型,判斷第二數(shù)據(jù)源中是否存在類型為第一數(shù)據(jù)類型的數(shù)據(jù)可以按照步驟S602和步驟S603執(zhí)行。步驟S602:對于每一種數(shù)據(jù)類型,向第二數(shù)據(jù)源進(jìn)行查找。步驟S603,判斷是否查找到該數(shù)據(jù)類型的數(shù)據(jù),在判斷出查找到某一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將第二數(shù)據(jù)源中該類型的數(shù)據(jù)寫入第一數(shù)據(jù)源,并返回步驟S602進(jìn)行下一數(shù)據(jù)類型的查找和判斷;在判斷出未查找到某一數(shù)據(jù)類型的數(shù)據(jù)的情況下,則直接跳過這一數(shù)據(jù)類型,返回步驟S602繼續(xù)進(jìn)行下一數(shù)據(jù)類型的查找和判斷。直至解析出的所有第一數(shù)據(jù)類型均查找結(jié)束,寫入第一數(shù)據(jù)源的數(shù)據(jù)即是生成的全量數(shù)據(jù)。具體地,將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第一數(shù)據(jù)源主要包括步驟S604至步驟S606:步驟S604,判斷第一全量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,第一全量數(shù)據(jù)文件為第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的全量數(shù)據(jù)文件,在本發(fā)明實(shí)施例中,可以將一個(gè)全量數(shù)據(jù)文件的上限大小設(shè)置為100W條,即,預(yù)設(shè)大小為100W條。步驟S605,在判斷出第一全量數(shù)據(jù)文件的大小達(dá)到預(yù)設(shè)大小的情況下,在第一數(shù)據(jù)源中創(chuàng)建第二全量數(shù)據(jù)文件,并將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第二全量數(shù)據(jù)文件,即,在第一全量數(shù)據(jù)文件的大小超過設(shè)置上限的情況下,進(jìn)行文件 分片。步驟S606,在判斷出第一全量數(shù)據(jù)文件的大小未達(dá)到預(yù)設(shè)大小的情況下,將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第一全量數(shù)據(jù)文件。如圖7所示,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法中生成增量數(shù)據(jù)主要包括如下步驟S701至步驟S706:步驟S701,接收數(shù)據(jù)更新信息,其中,數(shù)據(jù)更新信息包括更新數(shù)據(jù)和更新數(shù)據(jù)的數(shù)據(jù)類型,系統(tǒng)出現(xiàn)數(shù)據(jù)變更后,可以通過消息隊(duì)列(MessageQueue,簡稱MQ)的方式發(fā)送數(shù)據(jù)更新消息給第二數(shù)據(jù)源,以通知數(shù)據(jù)變更。步驟S702,解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到與更新數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的目標(biāo)數(shù)據(jù)格式。步驟S703,將更新數(shù)據(jù)的格式轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式,然后將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第一數(shù)據(jù)源。其中,將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第一數(shù)據(jù)源主要按照步驟S704至步驟S706執(zhí)行:步驟S704,判斷第一增量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,第一增量數(shù)據(jù)文件為第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的增量數(shù)據(jù)文件,在本發(fā)明實(shí)施例中,可以將一個(gè)增量數(shù)據(jù)文件的上限大小設(shè)置為100W條,即,預(yù)設(shè)大小為100W條。步驟S705,在判斷出第一增量數(shù)據(jù)文件的大小達(dá)到預(yù)設(shè)大小的情況下,在第一數(shù)據(jù)源中創(chuàng)建第二增量數(shù)據(jù)文件,并將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第二增量數(shù)據(jù)文件,即,在第一增量數(shù)據(jù)文件的大小超過設(shè)置上限的情況下,進(jìn)行文件分片。步驟S706,在判斷出第一增量數(shù)據(jù)文件的大小未達(dá)到預(yù)設(shè)大小的情況下,將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第一增量數(shù)據(jù)文件。在大數(shù)據(jù)同步過程中,如果單個(gè)文件太大的話,會降低解析性能,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法,考慮到大數(shù)據(jù)的同步,采用分文件的形式,存儲大數(shù)據(jù),經(jīng)過測試默認(rèn)推薦文件大小(100萬條/文件),100萬條/文件的大小對于一般的系統(tǒng)來說數(shù)據(jù)夠用,并且解析性能較高,達(dá)到了既能滿足小數(shù)據(jù)同步的實(shí)時(shí)效果,又能快速進(jìn)行大數(shù)據(jù)同步。進(jìn)一步地,在本發(fā)明實(shí)施例中,任一配置文件均可以采用XML配置文件作為元數(shù)據(jù)的格式約定文件,以滿足隨著應(yīng)用系統(tǒng)功能的不斷增加、不斷完善以及不同的定 制需要,所帶來的對數(shù)據(jù)的同步和生成也有不同的需求。XML配置文件具有很好的可讀性,并且配以XSD文件,幫助規(guī)范、正確的定制XML配置文件,并且具有代碼無侵入性的特點(diǎn),在定制項(xiàng)目的情況下,只改變XML就可以滿足數(shù)據(jù)的定制。格式約定說明:根節(jié)點(diǎn)<dataConvert>:唯一,用于定義數(shù)據(jù)文件的編碼格式、相對存儲路徑,索引文件等。數(shù)據(jù)節(jié)點(diǎn)<data>:是數(shù)據(jù)的基本格式單位,一種數(shù)據(jù)類型只能定義一個(gè)data節(jié)點(diǎn),dataConvert內(nèi)可以有多不同的data。并可以指定數(shù)據(jù)序列化的對象類型,進(jìn)行序列號和反序列化。屬性節(jié)點(diǎn)<fields>:包含多個(gè)<field>,定義數(shù)據(jù)的屬性鍵值對,作為序列化和反序列化的依據(jù),支持?jǐn)?shù)據(jù)的映射轉(zhuǎn)換,以滿足同步方的數(shù)據(jù)要求。默認(rèn)節(jié)點(diǎn)<defaultValues>:包含多個(gè)<defaultValue>未被fields定義的屬性鍵值對,為序列化時(shí)提供默認(rèn)值,不在需要同步方編碼處理。默認(rèn)節(jié)點(diǎn)<valueExcludes>:包含多個(gè)<valueExclude>不需要進(jìn)行數(shù)據(jù)同步的屬性鍵值對,以方便數(shù)據(jù)同步的定制配置。默認(rèn)節(jié)點(diǎn)<updateExcludes>:包含多個(gè)<updateExclude>需要定制同步更新模式的屬性,以方便數(shù)據(jù)同步時(shí)數(shù)據(jù)值沖突的解決和數(shù)據(jù)可用性的保證。隱含約束:數(shù)據(jù)類型的同步順序,按照data定義的先后順序執(zhí)行,解決依賴數(shù)據(jù)的入庫順序問題。不同步數(shù)據(jù)中屬性值空的屬性。數(shù)據(jù)內(nèi)容無變更時(shí)不同步。配置使用場景:一般情況下,數(shù)據(jù)生成一方的系統(tǒng)生成的數(shù)據(jù)建議不進(jìn)行轉(zhuǎn)換、過濾和映射等功能,統(tǒng)一由同步方根據(jù)需求去配置轉(zhuǎn)換、過濾和映射,因?yàn)槿绻卸鄠€(gè)不同的同步方時(shí),數(shù)據(jù)生成一方數(shù)據(jù)轉(zhuǎn)換、過濾和映射不能滿足各方需求。兩個(gè)系統(tǒng)之間進(jìn)行數(shù)據(jù)同步可以使用一份相同的XML配置文件進(jìn)行,數(shù)據(jù)生成 和同步。一方系統(tǒng)升級,需要升級XML配置文件,以滿足系統(tǒng)的數(shù)據(jù)同步需求,只需要在原來XML格式基礎(chǔ)上進(jìn)行追加,不改變原配置相關(guān)屬性,即可兼容不同系統(tǒng)需要。如果升級的系統(tǒng)去同步老系統(tǒng)的配置,只需要升級的系統(tǒng)中與老系統(tǒng)中有差異的配置項(xiàng)在升級的系統(tǒng)中非必填,即可同步接入。利用XML配置文件對數(shù)據(jù)進(jìn)行同步過程中,主要是對數(shù)據(jù)進(jìn)行映射、轉(zhuǎn)換和過濾等功能,達(dá)到了如下技術(shù)效果:(1)解決不同數(shù)據(jù)源之間對象不一致的問題,提高兼容性具體地,可以通過XML配置的數(shù)據(jù)節(jié)點(diǎn)<data>標(biāo)簽映射進(jìn)入數(shù)據(jù)源對象的屬性,并且可以支持MAP方式。通過默認(rèn)節(jié)點(diǎn)<defaultValue>標(biāo)簽設(shè)置數(shù)據(jù)默認(rèn)值,滿足部分?jǐn)?shù)據(jù)源對象數(shù)據(jù)必須有值,但是數(shù)據(jù)同步并無該數(shù)據(jù)。(2)值映射,使進(jìn)入數(shù)據(jù)源的數(shù)據(jù)符合數(shù)據(jù)源的約定要求通過在屬性節(jié)點(diǎn)<fields>定義mapping映射的方式,把同步的數(shù)據(jù)值轉(zhuǎn)換成數(shù)據(jù)源所需值,以符合系統(tǒng)原有定義。(3)值過濾,使數(shù)據(jù)源無法處理的值不入庫或模式:通過valueExclude設(shè)置過濾值,只要符合其中一個(gè)值,該條數(shù)據(jù)過濾。并模式:通過valueExclude設(shè)置過濾值,符合所有條件,該條數(shù)據(jù)才能被過濾。(4)屬性值沖突解決,可以根據(jù)系統(tǒng)不同的業(yè)務(wù)需求,處理數(shù)據(jù)沖突的同步文件。默認(rèn)模式:無需配置,以數(shù)據(jù)文件為準(zhǔn)屬性全部同步。Blank模式:配置updateExclude的屬性模式,空或者null值時(shí),屬性不更新。零值模式:配置updateExclude的屬性模式,0值時(shí),屬性不更新。沖突模式:配置updateExclude的屬性模式,同步屬性值沖突時(shí)不更新,以當(dāng)前系統(tǒng)為準(zhǔn)。強(qiáng)制模式:配置updateExclude的屬性模式,忽略數(shù)據(jù)同步的數(shù)據(jù)。配置文件的使用實(shí)現(xiàn)了數(shù)據(jù)的定制化和同步的數(shù)據(jù)源集成的簡化,同步雙方以相同的基本格式定義,在無系統(tǒng)自定義需求的前提下,可以使用同一份配置,即可集成數(shù)據(jù)同步文件生成和數(shù)據(jù)同步;同時(shí)對于有定制需求的系統(tǒng),又可以通過配置進(jìn)行無 代碼侵入的方式快速實(shí)現(xiàn)定制。數(shù)據(jù)源系統(tǒng)的集成涉及各種不確定因素,通過多個(gè)模式的配置,可以解決大部分系統(tǒng)的自定義需求,簡化和方便系統(tǒng)集成的數(shù)據(jù)同步,包括新系統(tǒng)集成和已運(yùn)行系統(tǒng)的集成。本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)同步裝置,以下對本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步裝置做具體介紹:圖8是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)同步裝置的示意圖,如圖8所示,該數(shù)據(jù)同步裝置主要包括第一讀取單元10、第二讀取單元20、第一解析單元30和同步單元40,其中:第一讀取單元10用于讀取第一數(shù)據(jù)源中的目錄索引文件,得到目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄,其中,第一數(shù)據(jù)源用于提供數(shù)據(jù)同步所需的數(shù)據(jù),目錄索引文件采用CSV格式,n為大于等于2的自然數(shù)。第二讀取單元20用于讀取數(shù)據(jù)目錄Di所包含的數(shù)據(jù)索引文件Ei,其中,數(shù)據(jù)索引文件Ei包括應(yīng)用Ai中數(shù)據(jù)的變更信息,i依次取1至n,應(yīng)用A1至應(yīng)用An構(gòu)成n個(gè)應(yīng)用,數(shù)據(jù)目錄D1至數(shù)據(jù)目錄Dn構(gòu)成n個(gè)應(yīng)用的數(shù)據(jù)目錄,數(shù)據(jù)索引文件E1至數(shù)據(jù)索引文件En均采用CSV格式。第一解析單元30用于解析應(yīng)用Ai的更新配置文件,得到應(yīng)用Ai中需要進(jìn)行數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)和目標(biāo)數(shù)據(jù)的類型屬性,其中,更新配置文件存儲在需要同步的數(shù)據(jù)庫中,在本發(fā)明實(shí)施例中,第二數(shù)據(jù)源為需要進(jìn)行數(shù)據(jù)同步的數(shù)據(jù)庫,更新配置文件存在第一數(shù)據(jù)源中。對更新配置文件的解析則可以采用任意一種進(jìn)行配置文件解析的方式,此處不再贅述。同步單元40用于以數(shù)據(jù)索引文件Ei中的變更信息和應(yīng)用Ai中的目標(biāo)數(shù)據(jù)的類型屬性為基準(zhǔn),同步第一數(shù)據(jù)源中的數(shù)據(jù)至第二數(shù)據(jù)源,其中,第二數(shù)據(jù)源為存儲應(yīng)用A1至應(yīng)用An的數(shù)據(jù)源。本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步裝置,通過以索引文件方式記錄數(shù)據(jù)的情況,在進(jìn)行數(shù)據(jù)同步過程中,通過讀取索引文件的方式進(jìn)行數(shù)據(jù)更新,實(shí)現(xiàn)了數(shù)據(jù)快速、有序、高效地讀寫,達(dá)到了提高數(shù)據(jù)同步效率的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中不同的數(shù)據(jù)庫之間數(shù)據(jù)同步的性能較差的技術(shù)問題。在本發(fā)明實(shí)施例中,目錄索引文件和數(shù)據(jù)索引文件均采用CSV格式,利用CSV數(shù)據(jù)格式進(jìn)行索引,實(shí)現(xiàn)了提供一種開放式且標(biāo)準(zhǔn)的數(shù)據(jù)格式,方便第三方系統(tǒng)解析和集成,同時(shí)結(jié)合索引的特點(diǎn)保證,保證數(shù)據(jù)快速,有序,高效的讀寫。進(jìn)一步地,同步單元40主要包括具有以下功能的多個(gè)子單元:第一讀取子單元,用于讀取數(shù)據(jù)索引文件Ei中的全量更新時(shí)間。第一判斷子單元,用于根據(jù)全量更新時(shí)間判斷是否進(jìn)行全量數(shù)據(jù)同步。第一同步子單元,用于在第一判斷子單元根據(jù)全量更新時(shí)間判斷出進(jìn)行全量數(shù)據(jù)同步的情況下,從第一數(shù)據(jù)源中讀取全量數(shù)據(jù)文件,并以應(yīng)用Ai中的目標(biāo)數(shù)據(jù)的類型屬性為基準(zhǔn),將全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源;其中,如果第一數(shù)據(jù)源中索引文件Ei的全量更新時(shí)間與第二數(shù)據(jù)源中索引文件Ei的全量更新時(shí)間不一致,則確定需要對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步,反之則不進(jìn)行全量數(shù)據(jù)同步。第一同步子單元主要是按照目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換全量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu),然后將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源。第二讀取子單元,用于在第一判斷子單元根據(jù)全量更新時(shí)間判斷出不進(jìn)行全量數(shù)據(jù)同步的情況下,或在第一同步子單元將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件同步至第二數(shù)據(jù)源之后,讀取數(shù)據(jù)索引文件Ei中的增量文件行數(shù)。第二判斷子單元,用于根據(jù)增量文件行數(shù)判斷是否進(jìn)行增量數(shù)據(jù)同步,其中,進(jìn)行增量同步與否的判斷主要是判斷增量更新行號是否大于零,在大于零的情況下,即確定需要進(jìn)行增量數(shù)據(jù)同步,反之,則不進(jìn)行增量數(shù)據(jù)同步;在判斷出不對第二數(shù)據(jù)源進(jìn)行全量數(shù)據(jù)同步的情況下,進(jìn)行增量同步與否的判斷主要是第二數(shù)據(jù)源中增量更新行號是否小于第一數(shù)據(jù)源中對應(yīng)的增量更新行號,如果小于的話,即確定需要進(jìn)行增量數(shù)據(jù)同步,反之,則不進(jìn)行增量數(shù)據(jù)同步。第二同步子單元,用于在第二判斷子單元根據(jù)增量文件行數(shù)判斷出進(jìn)行增量數(shù)據(jù)同步的情況下,從第一數(shù)據(jù)源中讀取增量數(shù)據(jù)文件,并以應(yīng)用Ai中的目標(biāo)數(shù)據(jù)的類型屬性為基準(zhǔn),將增量數(shù)據(jù)文件同步至第二數(shù)據(jù)源。第二同步子單元主要是按照目標(biāo)數(shù)據(jù)的類型屬性轉(zhuǎn)換增量數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu);然后將轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件同步至第二數(shù)據(jù)源。進(jìn)一步地,第一同步子單元主要包括具有以下功能的多個(gè)模塊:第一查詢模塊,用于從第二數(shù)據(jù)源查詢目標(biāo)數(shù)據(jù)的所有鍵值,具體地,第一查詢子模塊按照目標(biāo)數(shù)據(jù)的數(shù)據(jù)類型,對每一類數(shù)據(jù)依次進(jìn)行鍵值的查找,即,對每一類數(shù)據(jù)均執(zhí)行第一同步模塊的多個(gè)子模塊的功能。第一存儲模塊,用于存儲所有鍵值至臨時(shí)文件。第一判斷模塊,用于判斷轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’是否存在于 臨時(shí)文件中,其中,j’依次取1至m1,m1為全量數(shù)據(jù)文件中鍵值的總數(shù)量。第一處理模塊,用于在第一判斷模塊判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’存在于臨時(shí)文件中的情況下,將第二數(shù)據(jù)源中鍵值Kj’表示的數(shù)據(jù)更新為轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中鍵值Kj’表示的數(shù)據(jù),并刪除臨時(shí)文件中的鍵值Kj’,即,以第一數(shù)據(jù)源中的數(shù)據(jù)為基準(zhǔn),更新兩個(gè)數(shù)據(jù)源中均存在的鍵值所表示的數(shù)據(jù)。第二處理模塊,用于在第一判斷模塊判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’不存在于臨時(shí)文件中的情況下,保存轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的全量數(shù)據(jù)文件中的鍵值Kj’表示的數(shù)據(jù)至第二數(shù)據(jù)源,如果全量數(shù)據(jù)文件中的某個(gè)鍵值不存在于臨時(shí)文件中,則表示這個(gè)鍵值所表示的數(shù)據(jù)為新增數(shù)據(jù),此種情況,將新增的數(shù)據(jù)保存至第二數(shù)據(jù)源。第一刪除模塊,用于從第二數(shù)據(jù)源中刪除臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù),即,刪除第二數(shù)據(jù)源中需要被刪除掉的數(shù)據(jù)。第二同步子單元主要包括具有以下功能的多個(gè)模塊:第二查詢模塊,用于從第二數(shù)據(jù)源查詢目標(biāo)數(shù)據(jù)的所有鍵值,具體地,第二查詢模塊按照目標(biāo)數(shù)據(jù)的數(shù)據(jù)類型,對每一類數(shù)據(jù)依次進(jìn)行鍵值的查找,即,對每一類數(shù)據(jù)均執(zhí)行第二同步模塊的多個(gè)子模塊的功能。第二存儲模塊,用于存儲所有鍵值至臨時(shí)文件。第二判斷模塊,用于判斷轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”是否存在于臨時(shí)文件中,其中,j”依次取1至m2,m2為增量數(shù)據(jù)文件中鍵值的總數(shù)量。第三處理模塊,用于在第二判斷模塊判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”存在于臨時(shí)文件中的情況下,將第二數(shù)據(jù)源中鍵值Kj”表示的數(shù)據(jù)更新為轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中鍵值Kj”表示的數(shù)據(jù),并刪除臨時(shí)文件中的鍵值Kj”,即,以第一數(shù)據(jù)源中的數(shù)據(jù)為基準(zhǔn),更新兩個(gè)數(shù)據(jù)源中均存在的鍵值所表示的數(shù)據(jù)。第四處理模塊,用于在第二判斷模塊判斷出轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”不存在于臨時(shí)文件中的情況下,保存轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)后的增量數(shù)據(jù)文件中的鍵值Kj”表示的數(shù)據(jù)至第二數(shù)據(jù)源,如果全量數(shù)據(jù)文件中的某個(gè)鍵值不存在于臨時(shí)文件中,則表示這個(gè)鍵值所表示的數(shù)據(jù)為新增數(shù)據(jù),此種情況,將新增的數(shù)據(jù)保存至第二數(shù)據(jù)源。第四刪除模塊,用于從第二數(shù)據(jù)源中刪除臨時(shí)文件中剩余的鍵值表示的數(shù)據(jù),即,刪除第二數(shù)據(jù)源中需要被刪除掉的數(shù)據(jù)。進(jìn)一步地,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步裝置還包括第二解析單元、判斷單元和第一寫入單元,其中:第二解析單元用于在第一讀取單元讀取第一數(shù)據(jù)源中的目錄索引文件,得到目錄索引文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到需要生成的第一數(shù)據(jù)類型,在該解析過程中,還可以解析得到第一數(shù)據(jù)格式,以便后續(xù)進(jìn)行數(shù)據(jù)同步的過程中,能夠?qū)?shù)據(jù)文件內(nèi)數(shù)據(jù)轉(zhuǎn)換為程序能夠識別的對象格式(即,第一數(shù)據(jù)格式)。判斷單元用于判斷第二數(shù)據(jù)源中是否存在類型為第一數(shù)據(jù)類型的數(shù)據(jù)。第一寫入單元用于在判斷單元判斷出第二數(shù)據(jù)源中存在類型為第一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第一數(shù)據(jù)源。其中,得到的第一數(shù)據(jù)類型可以包括多個(gè)不同的數(shù)據(jù)類型,判斷第二數(shù)據(jù)源中是否存在類型為第一數(shù)據(jù)類型的數(shù)據(jù)的過程中,對于每一種數(shù)據(jù)類型,向第二數(shù)據(jù)源進(jìn)行查找,然后判斷是否查找到該數(shù)據(jù)類型的數(shù)據(jù),在判斷出查找到某一數(shù)據(jù)類型的數(shù)據(jù)的情況下,將第二數(shù)據(jù)源中該類型的數(shù)據(jù)寫入第一數(shù)據(jù)源,并返回進(jìn)行下一數(shù)據(jù)類型的查找和判斷;在判斷出未查找到某一數(shù)據(jù)類型的數(shù)據(jù)的情況下,則直接跳過這一數(shù)據(jù)類型,返回繼續(xù)進(jìn)行下一數(shù)據(jù)類型的查找和判斷。直至解析出的所有第一數(shù)據(jù)類型均查找結(jié)束,寫入第一數(shù)據(jù)源的數(shù)據(jù)即是生成的全量數(shù)據(jù)。具體地,第一寫入單元包括具有如下功能的多個(gè)子單元:第三判斷子單元用于判斷第一全量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,第一全量數(shù)據(jù)文件為第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的全量數(shù)據(jù)文件,在本發(fā)明實(shí)施例中,可以將一個(gè)全量數(shù)據(jù)文件的上限大小設(shè)置為100W條,即,預(yù)設(shè)大小為100W條。第一寫入子單元用于在第三判斷子單元判斷出第一全量數(shù)據(jù)文件的大小達(dá)到預(yù)設(shè)大小的情況下,在第一數(shù)據(jù)源中創(chuàng)建第二全量數(shù)據(jù)文件,并將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第二全量數(shù)據(jù)文件,即,在第一全量數(shù)據(jù)文件的大小超過設(shè)置上限的情況下,進(jìn)行文件分片。第二寫入子單元用于在第三判斷子單元判斷出第一全量數(shù)據(jù)文件的大小未達(dá)到預(yù)設(shè)大小的情況下,將第二數(shù)據(jù)源中類型為第一數(shù)據(jù)類型的數(shù)據(jù)寫入第一全量數(shù)據(jù)文件。本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步裝置還包括接收單元、第三解析單元、轉(zhuǎn)換單元和第二寫入單元,其中:接收單元用于在第一讀取單元讀取第一數(shù)據(jù)源中的目錄索引文件,得到目錄索引 文件所包含的n個(gè)應(yīng)用的數(shù)據(jù)目錄之前,接收數(shù)據(jù)更新信息,其中,數(shù)據(jù)更新信息包括更新數(shù)據(jù)和更新數(shù)據(jù)的數(shù)據(jù)類型,系統(tǒng)出現(xiàn)數(shù)據(jù)變更后,可以通過消息隊(duì)列(MessageQueue,簡稱MQ)的方式發(fā)送數(shù)據(jù)更新消息給第二數(shù)據(jù)源,以通知數(shù)據(jù)變更。第三解析單元用于解析預(yù)設(shè)的數(shù)據(jù)生成配置文件,得到與更新數(shù)據(jù)的數(shù)據(jù)類型對應(yīng)的目標(biāo)數(shù)據(jù)格式;轉(zhuǎn)換單元用于將更新數(shù)據(jù)的格式轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式。第二寫入單元用于將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第一數(shù)據(jù)源。具體地,第二寫入單元包括具有如下功能的多個(gè)子單元:第四判斷子單元,用于判斷第一增量數(shù)據(jù)文件的大小是否達(dá)到預(yù)設(shè)大小,其中,第一增量數(shù)據(jù)文件為第一數(shù)據(jù)源中當(dāng)前進(jìn)行數(shù)據(jù)寫入的增量數(shù)據(jù)文件,在本發(fā)明實(shí)施例中,可以將一個(gè)增量數(shù)據(jù)文件的上限大小設(shè)置為100W條,即,預(yù)設(shè)大小為100W條。第三寫入子單元,用于在第四判斷子單元判斷出第一增量數(shù)據(jù)文件的大小達(dá)到預(yù)設(shè)大小的情況下,在第一數(shù)據(jù)源中創(chuàng)建第二增量數(shù)據(jù)文件,并將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第二增量數(shù)據(jù)文件,即,在第一增量數(shù)據(jù)文件的大小超過設(shè)置上限的情況下,進(jìn)行文件分片。第四寫入子單元,用于在第四判斷子單元判斷出第一增量數(shù)據(jù)文件的大小未達(dá)到預(yù)設(shè)大小的情況下,將轉(zhuǎn)換為目標(biāo)數(shù)據(jù)格式的更新數(shù)據(jù)寫入第一增量數(shù)據(jù)文件。在大數(shù)據(jù)同步過程中,如果單個(gè)文件太大的話,會降低解析性能,本發(fā)明實(shí)施例所提供的數(shù)據(jù)同步方法,考慮到大數(shù)據(jù)的同步,采用分文件的形式,存儲大數(shù)據(jù),經(jīng)過測試默認(rèn)推薦文件大小(100萬條/文件),100萬條/文件的大小對于一般的系統(tǒng)來說數(shù)據(jù)夠用,并且解析性能較高,達(dá)到了既能滿足小數(shù)據(jù)同步的實(shí)時(shí)效果,又能快速進(jìn)行大數(shù)據(jù)同步。進(jìn)一步地,在本發(fā)明實(shí)施例中,任一配置文件均可以采用XML配置文件作為元數(shù)據(jù)的格式約定文件,以滿足隨著應(yīng)用系統(tǒng)功能的不斷增加、不斷完善以及不同的定制需要,所帶來的對數(shù)據(jù)的同步和生成也有不同的需求。上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。在本發(fā)明的上述實(shí)施例中,對各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲在一個(gè)計(jì)算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、只讀存儲器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲器(RAM,RandomAccessMemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3