亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)遷移的方法和裝置的制造方法_4

文檔序號(hào):9579300閱讀:來(lái)源:國(guó)知局
換算法,將步驟401中獲取的待遷移數(shù)據(jù)轉(zhuǎn)換為符合 數(shù)據(jù)目的端數(shù)據(jù)模型的數(shù)據(jù)。所述數(shù)據(jù)轉(zhuǎn)換算法是預(yù)先生成的,其生成過(guò)程包括步驟402-1 和402-2,下面對(duì)這兩個(gè)步驟進(jìn)行說(shuō)明。
[0149] 步驟402-1:從所述預(yù)先生成的配置文件中讀取采用領(lǐng)域?qū)S谜Z(yǔ)言描述的數(shù)據(jù)轉(zhuǎn) 換規(guī)則。
[0150] 關(guān)于數(shù)據(jù)轉(zhuǎn)換規(guī)則、領(lǐng)域?qū)S谜Z(yǔ)言的描述請(qǐng)參見第一實(shí)施例中步驟101中的相關(guān) 部分,此處不再贅述。
[0151] 在本實(shí)施例的一個(gè)具體例子中,預(yù)先采用自定義的用于描述數(shù)據(jù)轉(zhuǎn)換規(guī)則的DSL 語(yǔ)言--數(shù)據(jù)轉(zhuǎn)換規(guī)則配置語(yǔ)言(關(guān)于其語(yǔ)法規(guī)則,請(qǐng)參見第一實(shí)施例步驟101中的說(shuō) 明),在xml配置文件中寫入了數(shù)據(jù)轉(zhuǎn)換規(guī)則,在本步驟中,從該xml配置文件中讀取所述數(shù) 據(jù)轉(zhuǎn)換規(guī)則,為步驟402-2做好準(zhǔn)備。
[0152] 步驟402-2:解析所述數(shù)據(jù)轉(zhuǎn)換規(guī)則,生成采用抽象語(yǔ)法樹存儲(chǔ)的與所述數(shù)據(jù)轉(zhuǎn) 換規(guī)則對(duì)應(yīng)的數(shù)據(jù)轉(zhuǎn)換算法。
[0153] 解析數(shù)據(jù)轉(zhuǎn)換規(guī)則,通常包括詞法分析和語(yǔ)法分析這兩個(gè)過(guò)程,完成這兩個(gè)過(guò)程 的處理后,可以生成一顆抽象語(yǔ)法樹,該抽象語(yǔ)法樹中存儲(chǔ)了所述數(shù)據(jù)轉(zhuǎn)換規(guī)則對(duì)應(yīng)的數(shù) 據(jù)轉(zhuǎn)換算法。也可以這樣理解,對(duì)數(shù)據(jù)轉(zhuǎn)換規(guī)則進(jìn)行解析的過(guò)程,就是將采用文本形式描述 的數(shù)據(jù)轉(zhuǎn)換規(guī)則轉(zhuǎn)換成在內(nèi)存結(jié)構(gòu)中存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)換算法的過(guò)程。所述解析過(guò)程與第一實(shí) 施例基本相同,請(qǐng)參見第一實(shí)施例步驟102中的相關(guān)說(shuō)明。
[0154] 通過(guò)預(yù)先執(zhí)行上述步驟402-1和402-2生成數(shù)據(jù)轉(zhuǎn)換算法后,就可以執(zhí)行本步驟 的數(shù)據(jù)轉(zhuǎn)換操作了。與第一實(shí)施例中描述的計(jì)算過(guò)程類似,本步驟中通過(guò)遍歷用于存儲(chǔ)數(shù) 據(jù)轉(zhuǎn)換算法的抽象語(yǔ)法樹,并在每一個(gè)節(jié)點(diǎn)執(zhí)行相應(yīng)的操作,計(jì)算出數(shù)據(jù)轉(zhuǎn)換表達(dá)式的值, 并將該值賦值給對(duì)應(yīng)的目標(biāo)數(shù)據(jù),從而完成該目標(biāo)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換操作。具體的計(jì)算過(guò)程 請(qǐng)參見第一實(shí)施例步驟103的相關(guān)說(shuō)明,此處不再贅述。
[0155] 如果所述數(shù)據(jù)轉(zhuǎn)換規(guī)則包含多條數(shù)據(jù)轉(zhuǎn)換語(yǔ)句,也就是說(shuō)在步驟402-2中生成了 不止一棵抽象語(yǔ)法樹,那么在本步驟中,以當(dāng)前讀取的一行待遷移數(shù)據(jù)作為輸入,針對(duì)每一 棵抽象語(yǔ)法樹,依次執(zhí)行上述計(jì)算過(guò)程,從而根據(jù)該待遷移數(shù)據(jù)中的字段,計(jì)算出符合目的 端數(shù)據(jù)模型的各個(gè)目標(biāo)字段的值,完成了本條待遷移數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換操作。
[0156] 在本實(shí)施例的一個(gè)具體例子中,執(zhí)行數(shù)據(jù)遷移的源端數(shù)據(jù)表中包括序號(hào)、姓名、語(yǔ) 文成績(jī)、數(shù)學(xué)成績(jī)這樣四個(gè)字段,目的端數(shù)據(jù)表中包括姓名(name)、語(yǔ)文成績(jī)(Chinese)、 數(shù)學(xué)成績(jī)(math)和總成績(jī)(sum)這樣四個(gè)字段,xml文件中配置的數(shù)據(jù)轉(zhuǎn)換規(guī)則為"name =FI;chinese=F2;math=F3;sum= (Long)F2+(Long)F3"。采用本實(shí)施例提供的方法, 在上述預(yù)先執(zhí)行的步驟402-2中生成了與上述數(shù)據(jù)轉(zhuǎn)換規(guī)則對(duì)應(yīng)的四棵抽象語(yǔ)法樹,在本 步驟中以當(dāng)前讀取的一行待遷移數(shù)據(jù)作為輸入,針對(duì)每一棵抽象語(yǔ)法樹進(jìn)行計(jì)算,得到了 name、Chinese、math和sum這樣四個(gè)目標(biāo)字段的值,從而根據(jù)待遷移數(shù)據(jù)得到了符合目的 端數(shù)據(jù)模型的目標(biāo)數(shù)據(jù)。
[0157] 在具體實(shí)施中,如果采用了生產(chǎn)者和消費(fèi)者模式,S卩:在步驟401中將待遷移數(shù)據(jù) 寫入了數(shù)據(jù)緩沖區(qū)中,那么本步驟需要從所述數(shù)據(jù)緩沖區(qū)中逐行讀取待遷移數(shù)據(jù),如果所 述待遷移數(shù)據(jù)在數(shù)據(jù)緩沖區(qū)中是采用一行字符串的形式存儲(chǔ)的,則還需要從讀取的字符串 中提取出各個(gè)字段(例如,利用數(shù)據(jù)緩沖區(qū)提供的類似get(index)接口,從字符串?dāng)?shù)據(jù)中 提取出與index對(duì)應(yīng)的字段),然后以各個(gè)字段組成的待遷移數(shù)據(jù)為輸入,利用抽象語(yǔ)法樹 存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)換算法計(jì)算出符合數(shù)據(jù)目的端數(shù)據(jù)模型的數(shù)據(jù)。
[0158] 在具體實(shí)施中,如果待遷移的數(shù)據(jù)量比較大,即使采用了上述生產(chǎn)者和消費(fèi)者模 式,因?yàn)楸静襟E的數(shù)據(jù)轉(zhuǎn)換操作涉及抽象語(yǔ)法樹的遍歷以及相應(yīng)的計(jì)算處理,相對(duì)比較耗 時(shí),有可能成為系統(tǒng)的瓶頸。基于上述考慮,為了提高整個(gè)系統(tǒng)的處理性能,可以采用多線 程并發(fā)執(zhí)行的實(shí)施方式,具體說(shuō),在執(zhí)行本步驟之前,可以按照預(yù)先生成的配置文件中指定 的并發(fā)數(shù)目,創(chuàng)建相應(yīng)數(shù)目的工作線程,由這些工作線程并發(fā)執(zhí)行上述從數(shù)據(jù)緩沖區(qū)讀取 數(shù)據(jù)以及轉(zhuǎn)換數(shù)據(jù)的操作,在提高CPU利用率的同時(shí),提高整個(gè)系統(tǒng)的效率。
[0159] 步驟403 :將執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)寫入數(shù)據(jù)目的端。
[0160] 在具體實(shí)施中,為了將執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)寫入數(shù)據(jù)目的端,通常需要先與數(shù) 據(jù)目的端的數(shù)據(jù)庫(kù)建立數(shù)據(jù)連接,或者是打開數(shù)據(jù)目的端的相關(guān)數(shù)據(jù)文件,其處理方式與 步驟401描述的相關(guān)部分類似,此處不再贅述。
[0161] 如果所述數(shù)據(jù)目的端是數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,在建立數(shù)據(jù)連接后就可以向數(shù)據(jù)表中 寫入轉(zhuǎn)換后的數(shù)據(jù)。例如,對(duì)于數(shù)據(jù)目的端是關(guān)系型數(shù)據(jù)庫(kù)的情況,可以調(diào)用JDBC提供的 函數(shù)實(shí)現(xiàn),具體說(shuō),在當(dāng)前建立的數(shù)據(jù)連接的基礎(chǔ)上,倉(cāng)ll建一個(gè)Statement對(duì)象,并調(diào)用該 對(duì)象的execute(sql)方法,其中參數(shù)sql是向數(shù)據(jù)表中寫入數(shù)據(jù)的SQLinsert語(yǔ)句;如 果數(shù)據(jù)目的端是NoSQL數(shù)據(jù)庫(kù),則通??梢哉{(diào)用NoSQL數(shù)據(jù)庫(kù)系統(tǒng)提供的Put()函數(shù)或者 類似的函數(shù),通過(guò)指定rowkey、列簇、列名等信息,將轉(zhuǎn)換后的數(shù)據(jù)寫入對(duì)應(yīng)的數(shù)據(jù)表中。 execute(sql)方法,query表示查詢
[0162] 如果數(shù)據(jù)目的端不是上述數(shù)據(jù)庫(kù),而是文件系統(tǒng),則在打開數(shù)據(jù)目的端對(duì)應(yīng)的數(shù) 據(jù)文件后,按照文件系統(tǒng)預(yù)先設(shè)定好的數(shù)據(jù)格式,調(diào)用系統(tǒng)提供的fVriteO或者類似函數(shù) 將執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)寫入所述數(shù)據(jù)文件中。
[0163] 在具體實(shí)施過(guò)程中,如果數(shù)據(jù)目的端沒(méi)有部署在實(shí)施了本實(shí)施例技術(shù)方案的本地 設(shè)備上,那么向數(shù)據(jù)目的端寫入數(shù)據(jù)的操作通常包括發(fā)送數(shù)據(jù)、傳輸數(shù)據(jù)、接收數(shù)據(jù)、寫入 數(shù)據(jù)這樣幾個(gè)環(huán)節(jié),如果要寫入數(shù)據(jù)目的端的數(shù)據(jù)量比較大,每一條數(shù)據(jù)都經(jīng)過(guò)上述環(huán)節(jié) 才能完成寫入操作,那么時(shí)間開銷會(huì)比較大,影響數(shù)據(jù)遷移過(guò)程的整體性能。出于上述考 慮,本實(shí)施例技術(shù)方案提供了一種批量寫入的優(yōu)選實(shí)施方式。
[0164] 具體說(shuō),本步驟在將執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)寫入數(shù)據(jù)目的端之前,先判斷所述數(shù) 據(jù)的規(guī)模是否大于或者等于配置文件中指定的批量導(dǎo)入閾值;若是,則將所述數(shù)據(jù)采用批 量導(dǎo)入的方式寫入數(shù)據(jù)目的端;若否,則將所述數(shù)據(jù)暫時(shí)存儲(chǔ)在本地內(nèi)存或者其他存儲(chǔ)介 質(zhì)中。
[0165] 在本實(shí)施例的一個(gè)具體例子中,預(yù)先設(shè)置好的xml配置文件片段如下所示:
[0166]
[0167] 其中,預(yù)先配置的batch-size即為本步驟所述的批量導(dǎo)入閾值,該項(xiàng)的值為512, 表示每完成512行數(shù)據(jù)的轉(zhuǎn)換操作,執(zhí)行一次向數(shù)據(jù)目的端的寫入操作。采用這種批處理 方式,可以減少通過(guò)網(wǎng)絡(luò)傳輸執(zhí)行寫入操作的時(shí)間開銷。
[0168] 除了batch-size外,上述xml文件中的concurrentcy-項(xiàng)對(duì)應(yīng)在上述步驟402 中的多線程的并發(fā)數(shù)目,其中的error-limit-項(xiàng)則用于控制錯(cuò)誤日志寫入操作,相關(guān)說(shuō) 明請(qǐng)參見下文描述。需要說(shuō)明的是,上述xml文件片段是從完整配置文件中截取的一部分, 而且其中的具體取值都僅僅是示意性的,在具體實(shí)施過(guò)程中,可以根據(jù)實(shí)際需要,配置其他 參數(shù)以及取值。
[0169] 在具體實(shí)施過(guò)程中,由于待遷移數(shù)據(jù)往往來(lái)自不同的業(yè)務(wù)端,數(shù)據(jù)量巨大、數(shù)據(jù)類 型繁多,數(shù)據(jù)的完整性、一致性難以得到保證,因此在向數(shù)據(jù)目的端寫入轉(zhuǎn)換后的數(shù)據(jù)時(shí), 不可避免地可能出現(xiàn)寫入數(shù)據(jù)失敗的現(xiàn)象,例如:通過(guò)JDBC接口向數(shù)據(jù)目的端寫入數(shù)據(jù) 時(shí),如果其中某個(gè)字段不符合目的端對(duì)該字段的類型定義,JDBC會(huì)報(bào)告數(shù)據(jù)寫入錯(cuò)誤。
[0170] 這種情況下,可以將寫入過(guò)程中發(fā)生的錯(cuò)誤寫入日志中,以供后續(xù)對(duì)部分未遷移 成功的數(shù)據(jù)進(jìn)行修改并重新導(dǎo)入時(shí)參考,有助于問(wèn)題數(shù)據(jù)的定位和維護(hù)。從文件的存儲(chǔ)和 便于管理的角度考慮,日志文件的大小通常有一定的限制,為了避免因?yàn)橛涗浬鲜鲥e(cuò)誤信 息導(dǎo)致日志文件過(guò)大,可以在配置文件中指定錯(cuò)誤記錄閾值(參見上面示例xml文件片段 中的error-limit),并對(duì)在本次數(shù)據(jù)遷移過(guò)程中發(fā)生的數(shù)據(jù)寫入錯(cuò)誤進(jìn)行累積,當(dāng)發(fā)生的 錯(cuò)誤次數(shù)小于或者等于該閾值,將所述錯(cuò)誤及相關(guān)信息寫入日志文件中,否則不記錄所述 錯(cuò)誤及相關(guān)信息。
[0171] 通過(guò)上面的描述可以看出,采用本實(shí)施例提供的方法在不同數(shù)據(jù)模型的數(shù)據(jù)源之 間進(jìn)行數(shù)據(jù)遷移,只需要在配置文件中用領(lǐng)域特定語(yǔ)言描述數(shù)據(jù)轉(zhuǎn)換規(guī)則,不需要修改數(shù) 據(jù)轉(zhuǎn)換部分的代碼,從而實(shí)現(xiàn)了數(shù)據(jù)轉(zhuǎn)換部分代碼的復(fù)用,減少開發(fā)人員的工作量,而且由 于采用自定義的領(lǐng)域特定語(yǔ)言描述數(shù)據(jù)轉(zhuǎn)換規(guī)則,通俗易懂,學(xué)習(xí)成本低,即使是負(fù)責(zé)數(shù)據(jù) 遷移的業(yè)務(wù)人員也可以根據(jù)需要對(duì)配置文件中的數(shù)據(jù)轉(zhuǎn)換規(guī)則進(jìn)行配置或修改,從而減少 開發(fā)人員的工作量。
[0172] 在上述的實(shí)施例中,提供了一種用于數(shù)據(jù)遷移的方法,與之相對(duì)應(yīng)的,本申請(qǐng)還提 供一種用于數(shù)據(jù)遷移的裝置。請(qǐng)參看圖5,其為本申請(qǐng)的一種用于數(shù)據(jù)遷移的裝置的實(shí)施例 示意圖。由于裝置實(shí)施例基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法 實(shí)施例的部分說(shuō)明即可。下述描述的裝置實(shí)施例僅僅是示意性的。
[0173] 本實(shí)施例的一種用于數(shù)據(jù)遷移的裝置,包括:數(shù)據(jù)讀取單元501,用于從數(shù)據(jù)源端 讀取待遷移數(shù)據(jù);數(shù)據(jù)轉(zhuǎn)換單元502,用于根據(jù)已生成的數(shù)據(jù)轉(zhuǎn)換算法將所述待遷移數(shù)據(jù) 轉(zhuǎn)換為符合數(shù)據(jù)目的端數(shù)據(jù)模型的數(shù)據(jù),所述數(shù)據(jù)轉(zhuǎn)換算法是根據(jù)預(yù)先生成的配置文件中 的、采用領(lǐng)域?qū)S谜Z(yǔ)言描述的數(shù)據(jù)轉(zhuǎn)換規(guī)則生成的;數(shù)據(jù)寫入單元503,用于將執(zhí)行轉(zhuǎn)換操 作后的數(shù)據(jù)寫入數(shù)據(jù)目的端。
[0174] 可選的,所述裝置還包括:
[0175] 規(guī)則讀取單元,用于從所述預(yù)先生成的配置文件中讀取采用領(lǐng)域?qū)S谜Z(yǔ)言描述的 數(shù)據(jù)轉(zhuǎn)換規(guī)則;
[0176] 算法生成單元,用于解析所述數(shù)據(jù)轉(zhuǎn)換規(guī)則,生成與所述數(shù)據(jù)轉(zhuǎn)換規(guī)則對(duì)應(yīng)的數(shù) 據(jù)轉(zhuǎn)換算法。
[0177] 可選的,所述算法生成單元生成的數(shù)據(jù)轉(zhuǎn)換算法,是采用抽象語(yǔ)法樹存儲(chǔ)的。
[0178] 可選的,所述裝置還包括:
[0179] 數(shù)據(jù)緩沖單元,用于將從數(shù)據(jù)源端讀取的待遷移數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)緩沖區(qū)中;
[0180] 相應(yīng)的,所述數(shù)據(jù)轉(zhuǎn)換單元具體用于,從所述數(shù)據(jù)緩沖區(qū)中讀取待遷移數(shù)據(jù),并將 其轉(zhuǎn)換為符合數(shù)據(jù)目的端數(shù)據(jù)模型的數(shù)據(jù)。
[0181] 可選的,所述裝置還包括:
[0182] 線程創(chuàng)建單元,用于按照所述配置文件中指定的并發(fā)數(shù)目,創(chuàng)建相應(yīng)數(shù)目的工作 線程;
[0183] 相應(yīng)的,所述數(shù)據(jù)轉(zhuǎn)換單元執(zhí)行的讀取數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù)的操作由上述工作線程并 發(fā)執(zhí)行。
[0184] 可選的,所述裝置還包括:
[0185] 判斷單元,用于判斷所述執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)的規(guī)模是否大于或者等于所述配 置文件中指定的批量導(dǎo)入閾值;若是,則觸發(fā)所述數(shù)據(jù)寫入單元?jiǎng)幼?;若否,則緩存所述執(zhí) 行轉(zhuǎn)換操作后的數(shù)據(jù)。
[0186] 可選的,所述裝置還包括:
[0187] 錯(cuò)誤監(jiān)測(cè)記錄單元,用于監(jiān)測(cè)在將執(zhí)行轉(zhuǎn)換操作后的數(shù)據(jù)寫入數(shù)據(jù)目的端的步驟 中是否發(fā)生錯(cuò)誤;若發(fā)生錯(cuò)誤,記錄所述錯(cuò)
當(dāng)前第4頁(yè)1 2 3 4 5 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1