数据交换平台的需求总结与初步设计
一、?????需求總結(jié)
功能性需求:
1、 從某時(shí)刻開(kāi)始,轉(zhuǎn)儲(chǔ)某些特定的表。開(kāi)始時(shí)間、時(shí)間頻率、表字段、源表和目的表執(zhí)行前后sql語(yǔ)句等數(shù)據(jù)可配置。
2、 轉(zhuǎn)儲(chǔ)頻率可以自由設(shè)定,時(shí)間精確到秒級(jí),任務(wù)精確到表。
3、 滿足多個(gè)表捆綁在一起,按既定的先后順序執(zhí)行。避免由于數(shù)據(jù)不一致性給后續(xù)工作帶來(lái)的影響。
4、 實(shí)時(shí)控制每一個(gè)表是否轉(zhuǎn)儲(chǔ),暫停或開(kāi)始。并且不影響其他數(shù)據(jù)表轉(zhuǎn)儲(chǔ)。
5、 轉(zhuǎn)儲(chǔ)過(guò)程中,可以按照既定的配置,對(duì)某個(gè)或某些字段進(jìn)行加密或解密。
6、 各個(gè)表的轉(zhuǎn)儲(chǔ)要求互相獨(dú)立,互不影響。
7、 源數(shù)據(jù)庫(kù)和目的數(shù)據(jù)庫(kù)均支持mysql和oracle,留接口擴(kuò)展其他數(shù)據(jù)源。
8、 添加一個(gè)表的轉(zhuǎn)儲(chǔ)工作,要求只修改配置數(shù)據(jù),不修改軟件代碼,或重啟軟件。(測(cè)試手段? 配置數(shù)據(jù)是否完整,執(zhí)行測(cè)試結(jié)果)
9、 對(duì)各個(gè)數(shù)據(jù)庫(kù)的操作,只使用鏈接,保證db賬號(hào)密碼的安全不泄露。
10、???支持程序參數(shù),只執(zhí)行某個(gè)任務(wù)號(hào)下的某個(gè)或某些表的轉(zhuǎn)儲(chǔ)工作。
11、???轉(zhuǎn)儲(chǔ)表結(jié)束后,記錄日志到配置數(shù)據(jù)庫(kù)proc_use_times表,方便開(kāi)展后續(xù)工作。(添加為可配置)
12、???實(shí)時(shí)監(jiān)控表轉(zhuǎn)儲(chǔ)情況,并且,需要向技術(shù)人員下發(fā)每日提醒短信。(轉(zhuǎn)儲(chǔ)程序生成轉(zhuǎn)儲(chǔ)提醒日志,監(jiān)控程序解析日志,并下發(fā)短信)
13、???軟件日志記錄全面準(zhǔn)確,方便維護(hù)人員查閱和排錯(cuò)。
?
性能需求:
14、???數(shù)據(jù)實(shí)時(shí)交換平臺(tái)的定位,是業(yè)務(wù)流轉(zhuǎn)的一部分。對(duì)業(yè)務(wù)來(lái)講,是承上啟下的一部分,以數(shù)據(jù)準(zhǔn)確為根本原則。數(shù)據(jù)定時(shí)轉(zhuǎn)儲(chǔ)的定位,是數(shù)據(jù)備份、數(shù)據(jù)統(tǒng)計(jì)分析的一部分。
15、???對(duì)實(shí)時(shí)轉(zhuǎn)儲(chǔ)工作的完成,要求準(zhǔn)時(shí)、準(zhǔn)確、高效、穩(wěn)定,容錯(cuò)性能高。
16、???錯(cuò)誤處理機(jī)制完備,盡可能減少對(duì)業(yè)務(wù)的影響。
# 上線前,完成大數(shù)據(jù)量測(cè)試和各種功能測(cè)試,盡可能減少上線后問(wèn)題的出現(xiàn)。
# 實(shí)時(shí)轉(zhuǎn)儲(chǔ)過(guò)程中,如果某任務(wù)轉(zhuǎn)儲(chǔ)失敗,則保留處理現(xiàn)場(chǎng),并立刻通知相關(guān)人員處理。當(dāng)前任務(wù)不再繼續(xù)執(zhí)行。
?
二、數(shù)據(jù)庫(kù)設(shè)計(jì)
源表要求:
| 字段1 | 。。。 | 字段N | sync_status |
擴(kuò)展一個(gè)控制字段sync_status,協(xié)助實(shí)時(shí)轉(zhuǎn)儲(chǔ)使用。
sync_status:默認(rèn)值為0。
0表示未轉(zhuǎn)儲(chǔ),1表示轉(zhuǎn)儲(chǔ)中,2表示轉(zhuǎn)儲(chǔ)成功,3表示轉(zhuǎn)儲(chǔ)失敗。
?
三、軟件設(shè)計(jì)
A.????各模塊功能簡(jiǎn)單介紹:
控制進(jìn)程 -- 取配置數(shù)據(jù),初始化共享內(nèi)存,管理多個(gè)任務(wù)進(jìn)程。
任務(wù)進(jìn)程 – 通過(guò)共享內(nèi)存與控制進(jìn)程通信。ssync2o、ssync2m(控制進(jìn)程fork出任務(wù)進(jìn)程)
寫(xiě)入進(jìn)程 – 由任務(wù)進(jìn)程fork產(chǎn)生。寫(xiě)入目的庫(kù)完成后退出(最多10個(gè))。
?
共享內(nèi)存 – 執(zhí)行時(shí)動(dòng)態(tài)數(shù)據(jù)、任務(wù)詳細(xì)參數(shù)
?
配置數(shù)據(jù)庫(kù) – 配置數(shù)據(jù)所在數(shù)據(jù)庫(kù)
源數(shù)據(jù)庫(kù) – 源數(shù)據(jù)表所在數(shù)據(jù)庫(kù)
目的數(shù)據(jù)庫(kù) – 目的數(shù)據(jù)庫(kù)所在數(shù)據(jù)庫(kù)
?
進(jìn)程守護(hù)腳本 – 守護(hù)控制進(jìn)程。在控制進(jìn)程異常時(shí),將其啟動(dòng),并報(bào)警。1分鐘檢查一次。
日志打包腳本– 每天凌晨打包昨天日志并轉(zhuǎn)移。打包后的日志只保存最近3個(gè)月。
任務(wù)監(jiān)控進(jìn)程– 通過(guò)讀取共享內(nèi)存,整理每天轉(zhuǎn)儲(chǔ)簡(jiǎn)報(bào),通知相關(guān)同事。
任務(wù)實(shí)時(shí)數(shù)據(jù)展示程序– 通過(guò)共享內(nèi)存,實(shí)時(shí)展示任務(wù)執(zhí)行情況,或查看歷史任務(wù)執(zhí)行情況。
退出程序 – 控制信號(hào)燈,達(dá)到退出控制進(jìn)程的目的。
數(shù)據(jù)庫(kù)連接池維護(hù)進(jìn)程– 以啟動(dòng)進(jìn)程的方式,為本操作系統(tǒng)的應(yīng)用進(jìn)程提供連接數(shù)據(jù)庫(kù)服務(wù)。達(dá)到統(tǒng)一管理,最優(yōu)化分配資源的目的。(先期考慮使用lib文件,后續(xù)在升級(jí)為服務(wù))
?
lib文件 – libPassWord.a、libxxtencrypt.a(已實(shí)現(xiàn))
數(shù)據(jù)庫(kù)配置過(guò)程 – 修改現(xiàn)有的過(guò)程,完成對(duì)實(shí)時(shí)轉(zhuǎn)儲(chǔ)任務(wù)的添加。后續(xù)考慮用可視化界面實(shí)現(xiàn)。
?
B.????主進(jìn)程操作步驟:
1、 啟動(dòng)控制進(jìn)程,讀取以上8張配置表,將數(shù)據(jù)組織到共享內(nèi)存中。此后,定時(shí)每小時(shí)讀取T_EXTRACTION_TASK表中IS_ADD_DEL=1或2的任務(wù),添加或刪除到調(diào)度隊(duì)列,并更新IS_ADD_DEL=0。
2、 為每一個(gè)調(diào)度添加一個(gè)屬性:下次執(zhí)行時(shí)間和執(zhí)行狀態(tài)。初始值為當(dāng)前時(shí)間加上時(shí)間頻率。
3、 遍歷調(diào)度隊(duì)列。遍歷結(jié)束后,sleep(1)。
4、 當(dāng)某調(diào)度的下次執(zhí)行時(shí)間大于當(dāng)前時(shí)間時(shí),fork任務(wù)進(jìn)程執(zhí)行任務(wù)的實(shí)時(shí)轉(zhuǎn)儲(chǔ)。(fork兩次,避免生成僵尸進(jìn)程。任務(wù)進(jìn)程執(zhí)行任務(wù)結(jié)束后,通過(guò)共享內(nèi)存返回執(zhí)行結(jié)果。)
5、 任務(wù)進(jìn)程按照配置信息,執(zhí)行任務(wù),完成之后退出。
6、 控制進(jìn)程更新調(diào)度下次執(zhí)行時(shí)間為+=時(shí)間頻率。
7、 執(zhí)行操作3。
?
備注:
# 當(dāng)前時(shí)間、下次執(zhí)行時(shí)間、時(shí)間頻率:單位為秒。
# 程序初次啟動(dòng):指程序自啟動(dòng)后,未讀取配置數(shù)據(jù)。
# 控制進(jìn)程和任務(wù)進(jìn)程,通過(guò)共享內(nèi)存通信。
?
# 調(diào)度的下次執(zhí)行時(shí)間嚴(yán)格按照時(shí)間頻率向后推移。
# 調(diào)度與任務(wù)是一對(duì)多的關(guān)系。一個(gè)調(diào)度下的任務(wù),順序執(zhí)行。不同調(diào)度下的任務(wù),異步執(zhí)行。
?
# 調(diào)度的關(guān)鍵屬性:下次執(zhí)行時(shí)間、時(shí)間頻率
# 任務(wù)的關(guān)鍵屬性:任務(wù)狀態(tài)(0未執(zhí)行,1執(zhí)行中,2執(zhí)行完畢),任務(wù)類(lèi)型(1--ssync2o、2--ssync2m)
?
C.????子任務(wù)轉(zhuǎn)儲(chǔ)步驟:
1、 當(dāng)任務(wù)信號(hào)燈打開(kāi),從共享內(nèi)存中獲取任務(wù)數(shù)據(jù)。校驗(yàn)數(shù)據(jù)是否合理有效。
2、 初始化任務(wù)執(zhí)行環(huán)境,如:創(chuàng)建配置數(shù)據(jù)庫(kù)連接、源數(shù)據(jù)庫(kù)連接、目的數(shù)據(jù)庫(kù)連接等。
3、 更新配置數(shù)據(jù)庫(kù)task_detail表中子任務(wù)鎖。如果已鎖,則停止轉(zhuǎn)儲(chǔ)。
4、 執(zhí)行子任務(wù)前sql,包括源數(shù)據(jù)庫(kù)和目的數(shù)據(jù)庫(kù)。(將源表sync_status=0的數(shù)據(jù)更改為1)
5、 讀取源表中sync_status=1的行數(shù)據(jù),合理組織源表數(shù)據(jù)。
6、 根據(jù)配置要求,對(duì)源表數(shù)據(jù)分批寫(xiě)入目的庫(kù)。通過(guò)Fork子進(jìn)程實(shí)現(xiàn)。
7、 根據(jù)配置要求,子進(jìn)程對(duì)數(shù)據(jù)做相應(yīng)特殊加工處理,如:加解密。處理完成之后,寫(xiě)入目的數(shù)據(jù)庫(kù)。
8、 父進(jìn)程繼續(xù)操作6.
9、父進(jìn)程通過(guò)共享內(nèi)存獲得子進(jìn)程轉(zhuǎn)儲(chǔ)執(zhí)行情況,更新源表數(shù)據(jù):sync_status=2(成功)或3(失敗)。
10、執(zhí)行子任務(wù)后sql,包括源數(shù)據(jù)庫(kù)和目的數(shù)據(jù)庫(kù)。
11、更新配置數(shù)據(jù)庫(kù)子任務(wù)鎖。
12、打掃現(xiàn)場(chǎng),釋放資源。繼續(xù)操作1。
目的表不包含這控制字段:sync_status。
D. ??共享內(nèi)存
任務(wù)詳細(xì)參數(shù)的共享內(nèi)存結(jié)構(gòu):
要需包含:配置表的數(shù)據(jù),即任務(wù)的詳細(xì)信息,包含源庫(kù)id、目的庫(kù)id,源表名稱(chēng)和表結(jié)構(gòu),目的表名稱(chēng)和表結(jié)構(gòu),執(zhí)行前后sql,等。
總結(jié)
以上是生活随笔為你收集整理的数据交换平台的需求总结与初步设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CENT OS 8 Stream 安装部
- 下一篇: java通过poi-tl模板引擎生成表格