999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種數(shù)據(jù)同步技術(shù)研究與應(yīng)用

2010-01-01 00:00:00
電腦知識與技術(shù) 2010年1期

摘要:數(shù)據(jù)同步是分布式開發(fā)環(huán)境中面臨的一個(gè)實(shí)際問題,通過對數(shù)據(jù)同步類型和數(shù)據(jù)復(fù)制技術(shù)的分析,提出了一種基于同構(gòu)數(shù)據(jù)庫中差異記錄統(tǒng)計(jì)的數(shù)據(jù)同步技術(shù)解決方案,并分析和描述了該方案的具體的工作流程及其框架結(jié)構(gòu),最后通過實(shí)例證明了該方案的準(zhǔn)確性和可靠性。

關(guān)鍵詞:數(shù)據(jù)同步;數(shù)據(jù)庫;分布式系統(tǒng);數(shù)據(jù)復(fù)制;SqlBulkCopy

中圖分類號:TP311.11文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2010)01-15-03

Research and Application of Data Synchronization

ZHOU Hu

(Department of information and technology, xuzhou vocational technology academy of finance economics.Xuzhou 221003,china )

Abstract: Data Synchronization is a real problem in distributed development environment, based on the type of data synchronization and data replication technology analysis, a structure-based database with records of statistical differences solution is proposed, and this paper analyze its structure and work flow, the solution presented here is being investigated through an example.

Key words: Data Synchronization;DataBase;Distributed System;Data Replication;SqlBulkCopy

在分布式應(yīng)用環(huán)境中,通常有大量的基礎(chǔ)數(shù)據(jù)在各個(gè)系統(tǒng)中共享使用,為了保證共享數(shù)據(jù)的一致性,通常將所有需要共享的數(shù)據(jù)保存在一個(gè)數(shù)據(jù)庫中,供其它子系統(tǒng)訪問,這種方法便于共享數(shù)據(jù)的集中式管理和維護(hù),保證了數(shù)據(jù)的一致性并減少了數(shù)據(jù)冗余[1]。但是,在特殊應(yīng)用環(huán)境中,當(dāng)客戶端采集數(shù)據(jù)后無法和服務(wù)器進(jìn)行連接時(shí),此時(shí)必須將客戶端采集的數(shù)據(jù)手工和服務(wù)器進(jìn)行數(shù)據(jù)同步。在以往的數(shù)據(jù)同步解決方案中,通常需要人工把數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出,將數(shù)據(jù)發(fā)送到目的端,再由人工將數(shù)據(jù)導(dǎo)入到目的數(shù)據(jù)庫中,整個(gè)過程不但繁瑣,而且還影響數(shù)據(jù)的完整性。

本文在分析了數(shù)據(jù)同步的原理和功能的基礎(chǔ)上,提出了一種基于差異記錄統(tǒng)計(jì)的技術(shù)方案,并通過一個(gè)實(shí)例驗(yàn)證該方案的可行性。

1 數(shù)據(jù)同步相關(guān)技術(shù)

隨著信息化建設(shè)的發(fā)展,越來越多的應(yīng)用中涉及到數(shù)據(jù)的同步,不同的應(yīng)用環(huán)境下應(yīng)用數(shù)據(jù)同步的類型和實(shí)現(xiàn)方式也不盡相同。

1.1 數(shù)據(jù)同步類型

根據(jù)應(yīng)用的環(huán)境不同,數(shù)據(jù)同步主要分為以下幾種類型[2]:

1) 雙向同步。雙向同步是最常見也最具有代表性的一種同步,它總是由客戶機(jī)首先發(fā)起,然后客戶端和服務(wù)器互換更新信息。

2) 慢同步。慢同步是雙向同步的一種。在慢同步中,客戶機(jī)則把自己所有的數(shù)據(jù)都發(fā)給服務(wù)器,服務(wù)器逐一比較接收到的數(shù)據(jù)和自己的數(shù)據(jù),以確定客戶端哪些數(shù)據(jù)需要更新,然后把這些更新信息發(fā)送給客戶端。

3) 客戶端單向同步。客戶端單向只由客戶機(jī)向服務(wù)器發(fā)送上次同步之后自己更新的信息,而服務(wù)器不把自己的更新信息發(fā)送給客戶端。

4) 客戶端刷新同步。客戶端刷新同步屬于客戶端單向同步的一種。客戶機(jī)把自己所有的數(shù)據(jù)都發(fā)給服務(wù)器,并刷新服務(wù)器上的數(shù)據(jù)。

5) 服務(wù)器單向同步。客戶機(jī)從服務(wù)器那里得到上次同步之后服務(wù)器所有的更新信息,但不向服務(wù)器發(fā)送自己的更新信息。

6) 服務(wù)器刷新同步。屬于服務(wù)器單向同步的一種。服務(wù)器把所有的數(shù)據(jù)都發(fā)給客戶端,并刷新客戶端的數(shù)據(jù)。

在實(shí)際應(yīng)用過程中,根據(jù)具體的需求選擇相應(yīng)的數(shù)據(jù)同步類型。

1.2 數(shù)據(jù)復(fù)制

數(shù)據(jù)復(fù)制是將一組數(shù)據(jù)從一個(gè)數(shù)據(jù)源拷貝到多個(gè)數(shù)據(jù)源的技術(shù),是將一份數(shù)據(jù)發(fā)布到多個(gè)存儲(chǔ)站點(diǎn)上的有效方式[3]。使用復(fù)制技術(shù),用戶可以將一份數(shù)據(jù)發(fā)布到多臺服務(wù)器上,從而使不同的服務(wù)器用戶都可以在權(quán)限的許可的范圍內(nèi)共享這份數(shù)據(jù)。在.netFramework2.0中,ado.net提供了SqlBulkCopy技術(shù),很容易的實(shí)現(xiàn)了兩個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)復(fù)制。

以上根據(jù)應(yīng)用的環(huán)境分析了數(shù)據(jù)同步的類型,本文針對在居民健康檔案信息采集系統(tǒng)中應(yīng)用數(shù)據(jù)同步的特殊性,我們采用SqlBulkCopy數(shù)據(jù)復(fù)制技術(shù),實(shí)現(xiàn)一種基于差異記錄統(tǒng)計(jì)的雙向數(shù)據(jù)同步方案。

2 數(shù)據(jù)同步模型

在客戶端單向服務(wù)器端發(fā)送同步數(shù)據(jù)中包括客戶端新增的數(shù)據(jù)、更新的數(shù)據(jù)和刪除的數(shù)據(jù)。

2.1 同步新增加的數(shù)據(jù)

對于客戶端新增的數(shù)據(jù)和服務(wù)器端新增數(shù)據(jù),如果客戶端在第一次和服務(wù)器端進(jìn)行客戶端單向同步,直接將客戶端的所有數(shù)據(jù)發(fā)送到服務(wù)器端,然后將服務(wù)器的數(shù)據(jù)發(fā)送到客戶端,但是要去除客戶端發(fā)送的數(shù)據(jù)。

如果客戶端已經(jīng)進(jìn)行過一次數(shù)據(jù)同步,此時(shí)客戶端在進(jìn)行數(shù)據(jù)同步時(shí),為了盡可能的保證最小數(shù)據(jù)量的傳輸,我們只是將增量數(shù)據(jù)進(jìn)行同步,但是如何統(tǒng)計(jì)出所有的增量數(shù)據(jù)呢?

為了統(tǒng)計(jì)出客戶端的增量數(shù)據(jù),我們首先在需要同步數(shù)據(jù)的表中設(shè)計(jì)一個(gè)自動(dòng)增加列“ID”列和一個(gè)標(biāo)識記錄的主鍵“GUID”列,其中自動(dòng)增加列的增量是“1”,然后設(shè)計(jì)一個(gè)專門用來記錄數(shù)據(jù)同步后ID列的編號的表“tbl_synchronization”,每次數(shù)據(jù)同步結(jié)束后,客戶端表中都要保存表的名稱、客戶端和服務(wù)器端標(biāo)識和本次同步后表中的最大ID編號。

當(dāng)客戶端進(jìn)行新增數(shù)據(jù)同步時(shí),主要分為以下幾個(gè)步驟:1) 創(chuàng)建遠(yuǎn)程數(shù)據(jù)庫連接,獲取遠(yuǎn)程服務(wù)器端標(biāo)識,標(biāo)識不能重復(fù),如果獲取失敗則返回;2) 從客戶端數(shù)據(jù)庫表“tbl_synchronization”中獲取當(dāng)前需要同步的本地表中最大的Local_ID編號、Remote_ID編號以及服務(wù)器端使用max()函數(shù)獲取需要同步的表中的當(dāng)前最大ID編號Rcid,如果本地表“tbl_synchronization”中最大的Local_ID編號不存在,則將本地表中的所有記錄都發(fā)送到服務(wù)器端,服務(wù)器端將所有編號小于Remote_ID編號的記錄發(fā)送到客戶端,否則通過條件限制將本地表中ID大于當(dāng)前最大的Local_ID編號的所有記錄發(fā)送到服務(wù)器端,服務(wù)器端將所有大于Remote_ID編號并小于Rcid編號的記錄發(fā)送到客戶端;3) 客戶端和服務(wù)器端進(jìn)行數(shù)據(jù)同步;4) 分別向各自的同步表中添加同步信息記錄。例如,現(xiàn)有以下兩個(gè)表,表1是客戶端中需要同步的數(shù)據(jù),表2是服務(wù)器端的數(shù)據(jù)。

表1 客戶端表tblTest數(shù)據(jù) 表2 服務(wù)器端表tblTest數(shù)據(jù)

現(xiàn)將表1的數(shù)據(jù)同步到表2中,并且為第一次進(jìn)行數(shù)據(jù)同步。首先進(jìn)行遠(yuǎn)程數(shù)據(jù)庫連接,連接成功返回服務(wù)器端標(biāo)識“server”,然后到本地的數(shù)據(jù)庫表“tbl_synchronization”中執(zhí)行下面查詢語句:

Select max(Local_ID) from tbl_synchronization where server_ID=’server’and tbl_name=’tblTest’ and sy_type=0。由于兩個(gè)為第一次同步,所以“tbl_synchronization”表中最大的“Local_ID”不存在,直接將本地tbltest中的所有數(shù)據(jù)發(fā)送到服務(wù)器端,但是在發(fā)送數(shù)據(jù)前,必須通過max()函數(shù)獲取服務(wù)器端tblTest表中最大ID編號Rcid。同樣,對于服務(wù)器端也是將服務(wù)器端數(shù)據(jù)庫表tblTest中所有數(shù)據(jù)發(fā)送到客戶端,但是由于操作在客戶端已經(jīng)將數(shù)據(jù)發(fā)送到服務(wù)器端數(shù)據(jù)庫之后進(jìn)行的,所以在服務(wù)器端通過以下查詢語句進(jìn)行條件限制:Select * from tblTest where ID

表3 客戶端tbl_synchronization表表4 服務(wù)器端tbl_synchronization表

如果將表1和表2中的數(shù)據(jù)分別添加2條增量數(shù)據(jù)和1條增量數(shù)據(jù),連接數(shù)據(jù)庫之后,獲取本地?cái)?shù)據(jù)庫表“tbl_synchronization”中最大Local_ID值為“9”,同時(shí)Remote_ID值為“9”,服務(wù)器數(shù)據(jù)庫表“tblTest”中最大ID值為“10”,然后執(zhí)行下面語句獲取本地tblTest表中增量數(shù)據(jù):Select * from tblTest where ID>9,當(dāng)服務(wù)器端接收數(shù)據(jù)完成后,執(zhí)行以下語句獲取服務(wù)器端tblTest表中增量數(shù)據(jù):Select * from tblTest where ID>9 and ID<=10,當(dāng)數(shù)據(jù)同步完成后,將同步信息添加到“tbl_synchronization”表中。

2.2 同步更新和刪除數(shù)據(jù)

考慮到系統(tǒng)的特殊性,在需要同步數(shù)據(jù)的表中增加一個(gè)標(biāo)志列“is_delete”,如果需要?jiǎng)h除操作,只是修改標(biāo)志列的值為“1”,默認(rèn)情況下為“0”。我們只是隱藏了對刪除操作的處理,可以視為修改數(shù)據(jù)。同步修改數(shù)據(jù)主要是當(dāng)客戶端數(shù)據(jù)修改后,在進(jìn)行數(shù)據(jù)同步時(shí)將服務(wù)器對應(yīng)的數(shù)據(jù)也進(jìn)行修改。為了記錄客戶端數(shù)據(jù)修改操作,我們設(shè)計(jì)一個(gè)專門用來記錄所有修改操作的表tbl_update。也就是當(dāng)用戶進(jìn)行更新和刪除操作時(shí),將用戶進(jìn)行修改操作的Sql語句保存下來。

當(dāng)進(jìn)行同步更新數(shù)據(jù)時(shí),首先將客戶端的“tbl_update”表和服務(wù)器端的“tbl_update”表內(nèi)容進(jìn)行同步,同步完成后首先將同步信息寫入“tbl_synchronization”表中,將服務(wù)器端獲取客戶端發(fā)送的增量T_sql語句取出并執(zhí)行,同樣客戶端將服務(wù)器端發(fā)送的增量T_sql語句取出并執(zhí)行。

3 實(shí)例研究

現(xiàn)在我們通過一個(gè)具體的例子來說明在c#中如何編程實(shí)現(xiàn)數(shù)據(jù)同步。主要實(shí)現(xiàn)同步客戶端和服務(wù)器端的增量數(shù)據(jù)和修改數(shù)據(jù)。

3.1 同步增量數(shù)據(jù)

在進(jìn)行同步增量數(shù)據(jù)之前,首先使用SqlBulkCopy實(shí)現(xiàn)兩臺數(shù)據(jù)庫的批量復(fù)制操作,關(guān)鍵代碼如程序1所示。

SourceConn.ConnectionString = SourceConnectionstr;//源數(shù)據(jù)庫連接串

TargetConn.ConnectionString = TargetConnectionstr;//目標(biāo)數(shù)據(jù)庫連接串

System.Data.SqlClient.SqlCommand cmd = SourceConn.CreateCommand();

System.Data.SqlClient.SqlCommand cmd1 = TargetConn.CreateCommand();

cmd.CommandType = CommandType.Text;

cmd.CommandText = SourceSQLstr;//源查詢語句

cmd1.CommandType = CommandType.Text;

cmd1.CommandText = Destistr;//目標(biāo)查詢語句

SourceConn.Open();

TargetConn.Open();

using (System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader())

{

if (rdr.HasRows)

{ using (System.Data.SqlClient.SqlBulkCopy bc = new System.Data.SqlClient.SqlBulkCopy(TargetConn))

{ //超時(shí)之前操作所允許完成的秒數(shù)

bc.BulkCopyTimeout = 360;

bc.DestinationTableName = TargetTableName; //目標(biāo)服務(wù)器上的表名

bc.WriteToServer(rdr);

}}}

using (System.Data.SqlClient.SqlDataReader rdr = cmd1.ExecuteReader())

{

if (rdr.HasRows)

{using (System.Data.SqlClient.SqlBulkCopy bc = new System.Data.SqlClient.SqlBulkCopy(SourceConn))

{//超時(shí)之前操作所允許完成的秒數(shù)

bc.BulkCopyTimeout = 360;

bc.DestinationTableName = TargetTableName; //目標(biāo)服務(wù)器上的表名

bc.WriteToServer(rdr);

} }}

return true;

}

程序1 數(shù)據(jù)批量復(fù)制方法

用戶在執(zhí)行“同步增量數(shù)據(jù)”操作時(shí),首先判斷兩端數(shù)據(jù)庫是否能正常連接,連接完成后首先讀取數(shù)據(jù)庫中的所有表信息,然后根據(jù)用戶選擇需要同步的表,根據(jù)表名稱讀取該表的同步信息,通過對同步信息的分析,獲取本次同步數(shù)據(jù)的SQL語句,調(diào)用數(shù)據(jù)復(fù)制方法,復(fù)制完成后,回寫同步信息。

3.2 同步更新數(shù)據(jù)

對于同步更新數(shù)據(jù),首先我們必須將兩個(gè)數(shù)據(jù)庫中“tbl_update”表內(nèi)容進(jìn)行增量數(shù)據(jù)同步,同步完成后將增量的“T_sql”內(nèi)容取出并執(zhí)行即可。

以上通過對數(shù)據(jù)同步過程中差異數(shù)據(jù)的統(tǒng)計(jì),并結(jié)合了SqlBulkCopy技術(shù)實(shí)現(xiàn)了同構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)復(fù)制,實(shí)現(xiàn)了增量數(shù)據(jù)同步和更新數(shù)據(jù)同步功能。

4 結(jié)束語

本文在分析了基于差異記錄統(tǒng)計(jì)的數(shù)據(jù)同步方案的原理及實(shí)現(xiàn)方法,該方案能夠方便的實(shí)現(xiàn)數(shù)據(jù)同步功能,具有操作簡單,速度快等特點(diǎn)。并且在“居民健康檔案信息管理系統(tǒng)”中得到了很好的應(yīng)用。

參考文獻(xiàn):

[1] 宋毅紅,辛永利.多個(gè)同質(zhì)數(shù)據(jù)庫的實(shí)時(shí)合并研究與實(shí)現(xiàn)[J].航空計(jì)算技術(shù),2006(9).

[2] 姜君.嵌入式系統(tǒng)數(shù)據(jù)同步協(xié)議[EB/OL].http://www.ibm.com/developerworks/cn/linux/embed/syncml/index.html,2001.

[3] 崔偉,汪詩林.分布式系統(tǒng)中數(shù)據(jù)同步機(jī)制的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(5).

[4] 王曉國,朱煒,黃韶坤,等.一個(gè)使用數(shù)據(jù)合并工具及其實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2003(3).

主站蜘蛛池模板: 欧美成人午夜在线全部免费| 国产凹凸一区在线观看视频| 日韩专区第一页| 国产精品美女免费视频大全| 欧美视频二区| 男女男精品视频| 久久久黄色片| 日韩精品专区免费无码aⅴ| 免费A级毛片无码免费视频| 亚洲色图欧美激情| 久久精品嫩草研究院| 亚洲第一天堂无码专区| 精品国产美女福到在线直播| 国产精品美女在线| 国产精品香蕉在线| 国产对白刺激真实精品91| 国产高清精品在线91| 久久精品无码国产一区二区三区| 一级一级一片免费| 欧美日韩国产在线人| 国产一区二区三区日韩精品| 国产手机在线ΑⅤ片无码观看| 亚洲无码高清视频在线观看| 亚洲午夜天堂| 亚洲中文字幕在线观看| 2048国产精品原创综合在线| 亚洲综合色婷婷中文字幕| 久久青草视频| 久久久久久久97| 人妻夜夜爽天天爽| 国产一级毛片yw| 青草视频免费在线观看| 青青青草国产| 这里只有精品在线| 亚洲最大情网站在线观看| 国产激情无码一区二区APP| 91综合色区亚洲熟妇p| 国产亚洲欧美在线专区| 国精品91人妻无码一区二区三区| 美女被躁出白浆视频播放| 99视频在线免费观看| 国产精选小视频在线观看| 欧美a在线看| 一本久道热中字伊人| 人人妻人人澡人人爽欧美一区| 天天综合色网| 香蕉国产精品视频| 中文天堂在线视频| 亚洲精品片911| 色婷婷综合激情视频免费看 | 国产精品无码影视久久久久久久| 狠狠躁天天躁夜夜躁婷婷| 91小视频版在线观看www| 国产精品福利社| 国内精品免费| 国产免费a级片| 亚洲美女一区| 五月天综合婷婷| 国产91精品调教在线播放| 精品三级在线| 亚洲最大福利视频网| 国产一级片网址| AV片亚洲国产男人的天堂| 青青青国产在线播放| 成人a免费α片在线视频网站| 色综合久久久久8天国| 国产男女免费完整版视频| 一本久道久久综合多人| 亚洲欧美精品日韩欧美| 久久国产精品国产自线拍| 欧美成人第一页| 色色中文字幕| 国模极品一区二区三区| 美女被操91视频| 国产精品男人的天堂| 欧美亚洲另类在线观看| 亚洲欧洲日产国产无码AV| 午夜欧美在线| 欧美色视频在线| 中字无码av在线电影| 在线播放国产99re| 色噜噜久久|