資料轉移方案時間戳方式

2021-03-04 09:44:36 字數 3212 閱讀 1458

——時間戳方式

文件修訂記錄

更改型別:*s – start a - added m - modified d - deleted

隨著醫院業務的發展,醫院業務產生的資料量與日俱增,醫院幾年內產生的資料都儲存在現有his業務資料庫中,業務資料庫負荷不斷增大,一張業務表甚至會儲存幾百萬條記錄,這造成業務應用過程中檢索資料速度太慢,直接影響了醫院的效率。

為減輕現有業務資料庫的壓力,提高醫院執行效率,現提出建立一套歷史資料庫,將現有業務資料庫中過期的資料轉移到歷史庫,減少業務庫的資料量,提高his系統的執行效率;另一方面,為減輕報表查詢對業務操作的影響,分離業務操作和報表查詢關聯資料庫,業務查詢關聯業務資料庫,報表查詢關聯歷史資料庫,歷史庫需要滿足對資料的實時查詢的需求,必須保持業務庫資料與歷史庫資料的同步。另外,歷史資料庫在滿足業務庫轉移資料需求的同時,還要遵循一定的標準和規則,為後期的資料探勘和決策支援提供基礎。

根據轉移方式的不同,業務庫與歷史庫之間的資料轉移可以分兩個階段:初始化轉移和增量轉移。初始化轉移採用全量抽取的方式(也可看作時間戳方式),抽取一定時間戳前所有的資料,增量轉移採用基於時間戳的增量抽取方式,抽取一定時間戳區間的資料。

採用上述轉移方案,需要在現有業務庫表中新增時間戳字段。抽取原理如下:

【備註】:

sql server中提供的timestamp資料型別是二進位制數字,它是資料庫中自動生成的唯一二進位制數字。timestamp通常用作給錶行加版本戳的機制。存大小為8個位元組。

timestamp資料型別只是遞增的數字,不保留日期或時間。

timestamp是單個資料庫的計數器,不是伺服器的計數器。

每個資料庫都有乙個計數器,當對資料庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。該計數器是資料庫時間戳。這可以跟蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。

乙個表只能有乙個 timestamp 列。每次修改或插入包含 timestamp 列的行時,就會在 timestamp 列中插入增量資料庫時間戳值。這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。

對行的任何更新都會更改 timestamp 值,從而更改鍵值。如果該列屬於主鍵,那麼舊的鍵值將無效,進而引用該舊值的外來鍵也將不再有效。如果該錶在動態游標中引用,則所有更新均會更改游標中行的位置。

如果該列屬於索引鍵,則對資料行的所有更新還將導致索引更新。

使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以後是否發生了更改。如果對行進行了更改,就會更新該時間戳值。如果沒有對行進行更改,則該時間戳值將與以前讀取該行時的時間戳值一致。

若要返回資料庫的當前時間戳值,請使用 @@dbts。

為業務庫中每個資料庫表新增時間戳字段,包括jc、mz、yj、ys、zy庫,並記錄每個庫轉移的開始時間戳和結束時間戳。建議建立乙個轉移時間戳表,用於儲存每次轉移使用的時間戳區間。

初始化轉移採用全量抽取的方式。全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成歷史庫標準格式。

遍歷所有資料庫的所有表,如果庫表中記錄的時間戳在當前庫時間戳,則轉移資料記錄,如果庫表中記錄的時間戳大於記錄的資料庫最大資料庫則不進行轉移。

例如:jc庫當前記錄的最大時間戳為:0x00000000001267c8,查詢yhlx表中時間戳小於記錄的最大時間戳的記錄,如下:

select * from test..yhlx where version < 0x00000000001267c8

然後將抽取出的記錄資料進行規範化轉換並插入到歷史庫中。

增量抽取只抽取自上次抽取以來資料庫中要抽取的表中新增或修改的資料。如何捕獲變化的資料是增量抽取的關鍵。時間戳是一種基於快照比較的變化資料捕獲方式,在源表上增加乙個時間戳字段,系統中更新修改表資料的時候,系統會自動修改時間戳字段的值。

增量抽取時,讀取資料庫當前的最大時間戳,根據轉移時間戳表中上一次轉移的最大時間戳獲取本次增量抽取的時間戳區間。轉移程式根據時間戳區間轉移業務庫變化的資料。

1) 在為資料庫新增時間戳前,記錄當前資料庫的時間戳:select @@dbts。預設2000(0x00000000000007d0)。

2) 為資料庫表新增時間戳,新增完成後,記錄當前資料的新的時間戳:select @@dbts。

3) 將1)、2)得到的時間戳儲存到轉移時間戳表中,包括庫名、開始時間戳、結束時間戳、轉移成功標誌等。其中,1)得到的時間戳作為開始時間戳,2)得到的時間戳作為結束時間戳。

4) 資料初始化轉移。轉移程式按照轉移時間戳表進行資料轉移,同步時間戳區間的變更資料。轉移成功後,更新轉移時間戳轉移成功標誌,並向轉移時間戳表中插入一條記錄,將當前的結束時間戳作為新紀錄的開始時間戳。

如果轉移失敗,則只更新轉移標誌。

5) 增量轉移時,首先當前當前庫的最大時間戳select @@dbts,遍歷轉移時間戳表獲取當前開始時間戳最大的記錄,並將獲取的最大時間戳儲存到該記錄的結束時間戳中,同時置轉移標誌為空。轉移程式按照按照當前庫最新的轉移時間戳記錄進行資料轉移嗎,同步時間戳區間的變更資料。轉移成功與失敗的處理方式同4)。

1. 更新兩次轉移記錄表

1) 在為資料庫新增時間戳前,記錄當前資料庫的時間戳:。

2) 為資料庫新增時間戳之後記錄資料庫最大時間戳為,儲存到轉移時間戳表中。

3) 初始化轉移,轉移程式遍歷資料庫表中的資料庫記錄,依據轉移時間戳表轉移時間戳在~之間的資料。

轉移後,更新轉移成功失敗標誌。

4) 每次增量轉移前,獲取當前庫最大時間戳為。查詢轉移時間戳表判斷當前庫上次轉移是否成功,如果轉移標誌為「成功」,將當前庫的開始時間戳置為,結束時間戳置為,轉移標誌置為空;

如果轉移標誌為「失敗」,當前庫的開始時間戳不做更改,結束時間戳置為,轉移標誌置為空。

轉移程式遍歷資料庫表中的資料庫記錄,依據轉移時間戳表轉移時間戳在~或~之間的資料。轉移後,更新轉移成功失敗標誌。

2. 更新一次轉移記錄表

1) 初始化轉移:獲取當前庫最大時間戳,遍歷每張表抽取時間戳小於的所有記錄。進行資料轉移,將抽取出來的資料同步到歷史庫中。

如果同步成功,更新當前庫時間戳字段為。如果同步失敗,不更新,可以採取人工更新,或者第二天字段同步資料時將昨天失敗和今天發生變更的資料一塊同步。

2) 增量轉移:每次增量轉移前,獲取當前庫最大時間戳,假設轉移時間戳表中儲存的當前庫時間戳為,遍歷每張表抽取時間戳以為開始,小於的所有記錄。進行資料轉移,將抽取出來的資料同步到歷史庫中。

如果同步成功,更新當前庫時間戳字段為;

如果同步失敗,不更新,可以採取人工更新,或者第二天自動同步資料時將昨天失敗的和今天發生變化的資料一塊同步。

如何恢復蘋果5資料轉移時造成的損壞檔案

用習慣了ios系統,還是很不錯的啊 很快,我就將三星裡面的通訊錄什麼的全部的倒出來了,然後弄到iphone裡面,只是在匯出 的時候出現了一些問題,不知道為什麼,剛剛還好好的 檔案,匯出來之後就變成了破損檔案,上網查了一下,很多朋友說是因為匯出的操作不對,還有說是自己用的工具不對,當然,我對這些評價不...

危險廢物轉移實施方案

本公司在其生產過程中產生一定數量的含鉻汙泥。依據公司具體生產情況,預計每年有1噸左右危險廢物需要安全處置。含鉻汙泥 廢物類別為hw21,形態為半固態。經公司研究決定,按照 合同法 固體危險廢物環境汙染防治法 及危險廢物安全處置的相關規定,將公司產生的危險廢物交由有危險廢物經營許可證的重慶天志環保 處...

資料結構主講教師答疑時間表

很多人的理想是要改變這個世界,但卻很少有人願意去改變自己。資料結構與算答疑時間表 本學期答疑面向電院大平台2年級所有同學,有2種形式 面對面答疑,網上答疑 面對面答疑 由主教教師承擔 答疑時間 每週周二或週三下午 2點至 4點 第五周十一休息停一次 以下是答疑地點安排 周次星期月 日答疑教師地點 第...