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

基于Socket的數據自動復制技術設計與實現

2016-02-11 02:36:27陳亮雄歐陽顯良楊靜學林奕霖李晝陽
廣東水利水電 2016年12期
關鍵詞:數據庫

陳亮雄,歐陽顯良,楊靜學,林奕霖,李晝陽

(廣東省水利水電科學研究院,廣東省水動力學應用研究重點實驗室,廣東 廣州 510635)

基于Socket的數據自動復制技術設計與實現

陳亮雄,歐陽顯良,楊靜學,林奕霖,李晝陽

(廣東省水利水電科學研究院,廣東省水動力學應用研究重點實驗室,廣東 廣州 510635)

研究采用TCP/IP協議的Socket通信,開發了C/S應用軟件,實現了自動復制數據庫中的特定數據行記錄及其指定的相關附加文件,保證了數據共享時,數據“一數一源”,以滿足水利信息化行業的特定需求。文章介紹了差異化數據復制技術的設計思路、Socket通信及復制流程、關鍵技術問題及系統實現,為相關行業業務系統開發提供參考。

Socket;數據庫;數據同步;自動復制;水利信息化

省級業務應用系統與流域管理局、地市一級的業務應用系統之間,要實現部分表格、部分數據、部分文件的自動復制、更新,涉及到數據庫同步技術。數據庫同步技術是2個數據庫之間表數據復制的一種技術,提供數據的數據庫稱為源數據庫,接收數據的數據庫稱為目的數據庫,源數據庫表中的數據發生增加、修改或刪除時,目的數據庫表自動作出同樣的增加、修改或刪除動作,保證2個數據庫之間的數據一致。數據庫同步技術有比較成熟的技術手段,很多數據庫管理平臺都提供了數據同步解決方案,但差異化的數據復制技術則鮮有成熟的應用。所謂差異化的數據復制是指2個數據庫之間,表結構不一定相同,數據內容不完全相同,但符合特定條件的數據記錄(record)內容要保持一致,其他記錄數據則不用復制,需要特殊的技術對2個數據庫之間的表數據記錄進行分析判斷、定制查詢,對符號規定條件的數據記錄才進行自動復制,甚至同時復制數據庫外的數據記錄指定文件。

1 設計思路

總的設想是制定數據復制的策略,在源服務器端根據策略查詢源數據庫的數據,將查詢結果通過局域網或互聯網傳輸給目的數據庫服務器,在目的服務器端根據接收到的查詢結果,更新、插入或刪除目的數據庫。數據自動復制要做成一種請求/服務模式,客戶端發出復制請求,服務端程序響應請求,分析請求的合法性,再查詢源數據庫,并將查詢結果傳輸給客戶端,由客戶端程序更新目的數據庫,信息流程如圖1所示。

圖1 數據復制信息流程示意

2 Socket通信及復制流程

客戶端與服務端的通信可采用Socket技術。Socket通常也稱作“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄,是使用標準Unix文件描述符和其他程序通訊的方式;Socket接口是TCP/IP網絡的API,定義了許多函數或例程,程序員可以用他們開發TCP/IP 網絡上的應用程序[1]。使用Socket開發,服務器使用ServerSocket監聽指定的端口,端口可以隨意指定(建議使用大于1024的端口),等待客戶連接請求;客戶連接后,會話產生;完成會話,關閉連接??蛻舳耸褂肅lientSocket對網絡上某一個服務器的某一個端口發出連接請求,連接成功,打開會話;會話完成,關閉Socket[2]。

Socket提供了客戶端與服務端之間的通信技術,但要完成數據交互,還需要設計一套握手協議,使客戶端與服務端之間的對話和數據傳輸能順利進行。

1) 連接服務器

客戶端ClientSocket設置Socket服務器的IP和Port,打開連接;服務器端ServerSocket監聽到有ClientSocket連接,查看客戶端的IP,檢查是否合法連接;如果是,允許連接,通知客戶端連接成功;否則,直接斷開ClientSocket。

2) 測試連接

測試連接可發送一個征詢服務器時間的口令,讓服務器端返回當前時間;如果客戶端接收到時間,表示連接正常,否則連接異常,流程如圖2所示。

圖2 測試連接信息流程

3) 數據復制

數據復制首先由客戶端發出復制申請,申請中包含請求數據復制的條件;服務器端判斷申請是否合法,如果非法,返回syncNone給客戶端;如果合法,服務器從源數據庫中查詢滿足同步條件的記錄數量Count,發送口令通知客戶端做好接收準備;然后逐條發送數據記錄給客戶端,客戶端根據接收到的數據,生成并執行SQL更新語句,更新目的數據庫,流程見圖3。

圖3 數據復制信息流程

為了在數據發送和接收中保證完整性,可以在“逐條發送記錄”環節中增加圖4所示的發送/接收問答流程。

4) 傳輸口令和數據的封裝

為了保證口令和數據傳輸的完整性及方便處理,Socket發送/接收的信息流采用字符串,需要對其進行封裝。封裝格式如下:

指令分隔符:Const conSep=′;′#13;

請求應答指令:Const conAsk=′_ask_′;

結束應答指令:Const conAskEnd=′_askEnd_′;

每條傳輸指令都包含conAsk操作(例如Time?、sync等)和結尾標識conAskEnd,各數據之間采用conSep進行分隔,當Socket接收了完整的指令后,根據conAsk操作進行處理。例如請求執行XXX操作(指令為conAsk=XXX),參數是YYY(指令為param=YYY),則完整的指令如下:

conSep+conAsk=XXX+conSep+param=YYY+conSep+…+conAskEnd

圖4 數據復制附加流程

3 關鍵技術問題

1) 數據變化的識別方法

要復制的數據庫表結構要求有一個時間日期(datetime)字段,例如modifytime字段,記錄數據最后修改時間;可以在執行數據修改時,把當前時間同時保存在該字段中,示例如下:

UPDATE table_name SET modifytime=GETDATE(), … …

數據庫內置的GETDATE()函數獲取當前時間,精度達到毫秒級。也可采用數據庫觸發器的方式,當數據發生修改時,自動修改該字段的內容,示例如下:

CREATE TRIGGER trigger_name ON table_name

FOR INSERT,UPDATE AS

BEGIN

SET NOCOUNT ON;

UPDATE table_name SET modifytime=GETDATE()

FROM table_name a,inserted b

WHERE a.keyField=b.keyField

SET NOCOUNT OFF;

END

比較源數據庫和目的數據庫表記錄(record)的modifytime字段值,當源數據庫表記錄的modifytime值大于目的數據庫表記錄的modifytime值,表示源數據已經修改,需進行復制。

2) 大數據的可靠傳輸

為保證大數據的可靠傳輸,數據流的發送和接收分別使用INDY成熟控件TIdTcpClient、TIdTCPServer。INDY的全名是Internet Direct,是一套開放源代碼的Internet控件集,完全基于SOCKET阻塞工作模式,支持大部分流行的Internet協議[3]。TIdTcpServer與TIdTcpClient是基于多線程的、阻塞式的2組通信組件。阻塞模式通信是指消息發送方的send調用需要接受方的recv調用的配合才可完成,這樣每1次數據的發送(send)和接收(recv),都可以附加數據校驗碼(例如數據ASCII累加值)進行驗證,保證數據傳輸的準確性。阻塞模式需要等待任務完成才返回,因此,對每一個大數據傳輸,都要由獨立線程處理。為了簡化大數據傳輸程序調用,本軟件對大數據的發送和接收進行了封裝,示例如下:

TTcpFileServer=class //文件傳輸服務,接收

procedure IdTCPServerExecute(AThread: TIdPeerThread);//監聽并接收數據

private

tcpServer: TIdTcpServer;

tranSize: Integer;//接收數據大小

tranFileStream: TFileStream; //文件流接收

tranImgStream: TMemoryStream;//大數據流接收

public

end;

TTcpFileClient=class //文件傳輸服務,發送

private

tcpClient: TIdTcpClient;

public

constructor Create(Owner: TComponent);

destructor Destroy; override;

function SendFile(fileName: String): Integer;//發送文件

function SendImgBuffer: Integer;//發送大數據

end;

3) 接收數據后更新數據庫

接收到sync指令,執行數據更新操作,可能會引起主鍵沖突異常,更新失敗??梢圆捎孟雀鶕麈I值keyValue查找目的數據庫,判斷是否存在此keyValue的記錄;如果存在,采用update,否則采用insert。

IF EXISTS(存在keyValue記錄) UPDATE … ELSE INSERT …

4) 帶附件的數據復制

有些數據庫管理系統需要附件信息(例如監控圖片),附件以獨立文件方式保存,數據庫只記錄文件名稱及存放目錄。數據復制中,不但要復制源數據庫中的記錄,還要把其指定的文件也復制到目的數據庫及指定的目錄中。

采用上述介紹的TcpFileServer和TcpFileClient類進行文件傳輸。數據庫表記錄(record)復制的同時,發送文件方創建TcpFileClient類的實例TcpClient,接收文件方創建TcpFileServer類的實例TcpServer,由獨立線程傳輸文件,把源數據庫中表記錄指定的文件復制到目的數據庫指定的目錄中,文件復制的流程見圖5。

圖5 文件復制流程

數據庫中存在大數據字段,例如text、image、blob(binary large objects)等類型的字段,傳輸和復制這些字段不能采用常規的字符串方式和insert、update SQL腳本,需要建立獨立的流媒體發送/接收線程傳輸數據流,接收后也要特殊處理數據流,更新到目的數據庫中。

數據傳輸可采用第4節介紹的文件傳輸方式,創建TcpClient和TcpServer實例,獨立線程發送和接收數據流tranStream,但文件名參數改為主鍵值keyValue或update SQL腳本。接收后利用ADOQuery控件,把數據流更新到數據庫中,代碼示意如下:

with TADOQuery.Create(nil) do

try

Connection:=adoConn;

SQL.Add(′Update ′+tableName+′ Set ′+fieldname+′=:blob′);

SQL.Add(′Where ′+keyField+′=′+keyValue);

(1)攔蝦。就是要攔好小龍蝦,防止小龍蝦逃跑,這是奪取湖泊養殖小龍蝦高產的先決條件。常見的攔蝦設備是用聚乙烯網,然后在網上縫寬40.0cm的硬質塑料薄膜。

if fieldType=′text’ then

Parameters[0].LoadFromStream(tranStream, ftMemo)

else

Parameters[0].LoadFromStream(tranStream, ftBlob);

Result:=ExecSQL>0;

finally

Free;

end;

6) 一數一源,復制記錄的選擇

為了保證“一數一源”,避免各方都可能修改同一數據記錄,引入數據權屬標識ownerId的概念,在要復制的數據表結構中增加ownerId和modifyTime字段。modifyTime是datetime類型字段,存儲數據記錄的最后修改時間,選擇復制條件之一就是modifyTime大于上次復制時間。ownerId定義記錄的數據由哪個機構負責更新,各機構只能修改權屬標識為本機構的數據;選擇發送復制數據時,只選擇滿足(ownerId=本機構權屬標識) 或 (ownerId=本機構權屬標識_客戶端權屬標識)的數據記錄。

4 系統實現

系統采用C/S模式,分為客戶端程序和服務器端程序,可以運行在局域網、互聯網等采用TCP/IP協議的網絡環境,編程開發工具為Delphi??蛻舳顺绦虿捎肅lientSocket控件通信[4],ADOConnection、ADOQuery、ADOCommand等控件訪問數據庫,Timer計時器自動觸發復制申請;服務器端則采用ServerSocket控件監聽客戶端的申請,并對接收信息進行響應和相應處理。客戶端和服務器端均可向對方復制數據,為提高代碼的可重用性和通用性,軟件開發時用TSocketSendData類封裝數據的發送、接收及更新處理過程,用TTcpFileServer、TTcpFileClient類封裝文件、數據流的發送和接收。圖6、圖7分別是客戶端和服務器端程序的界面,實現了服務器連接設置、數據庫連接設置、運行狀態設置、自動創建配置表、復制計劃表管理、數據增量復制、數據完全復制等功能。

圖6 客戶端界面示意

圖7 服務器端界面示意

5 結語

系統采用Socket技術,C/S模式,分為客戶端程序和服務器端程序,可以運行在局域網、互聯網等采用TCP/IP協議的網絡環境,實現本地或異地數據庫之間的自動復制功能。可以定制復制的計劃、復制的條件,按業務需要靈活進行數據自動同步。有別于傳統的數據同步技術,本系統可以在數據行記錄(record)級別控制數據的同步,即只同步復制特定的行數據,且可以復制數據庫表記錄指定的附件,保證在數據共享的同時,保持數據“一數一源”和數據完整性,滿足水利信息化行業的特定需求。

[1] 文顯瓊,張繼榮.基于Socket的網絡編程及其實現[J].軟件導刊,2012(2):97-98.

[2] 王曉鵬.TCP/IP下的Socket及Winsock通信機制[J].航空計算技術,2004(2):126-128.

[3] 鐘志武.基于Delphi INDY控件的GPRS無線視頻通信程序在山洪災害預警系統中的應用[J].湖南水利水電,2012(3):99-101.

[4] 胡開明.基于Delphi的機房一體化教學監控系統設計[J].齊齊哈爾大學學報(自然科學版),2012(3):40-44.

(本文責任編輯 王瑞蘭)

Design and Implementation of Automatic Data Replication Technology Based on Socket

CHEN Liangxiong, OUYANG Xianliang, YANG Jingxue, LIN Yilin, LI Zhouyang

(Guangdong Research Institute of Water Resources & Hydropower,Guangdong Provincial Key Laboratory of Hydrodynamics,Guangzhou 510635,China)

TCP/IP protocol is applied to Socket communications to develop client/server application software. It can automatically copy a particular row of data records in the database and specify additional files, to ensure data sharing and data “source” in order to meet the specific needs of water conservancy informatization. And also the design ideas of differential data replication technology, Socket communication and replication process, key technology issues and system implementation are introduced in this paper, which provides reference for the relevant system development.

Socket; database; data synchronization; automatic duplication; water conservancy informatization

2016-11-24;

2016-12-10 基金項目:北斗衛星系統在水利防災減災中的應用(編號:2013B030200003)。

陳亮雄(1967),男,碩士,教授級高級工程師,主要從事水利信息化等研究工作。

TP311.132

:A

:1008-0112(2016)012-0047-05

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 日韩欧美高清视频| 亚洲成人精品在线| 青草视频免费在线观看| 国产69囗曝护士吞精在线视频| 欧美区一区| 亚洲天堂日本| 免费无码AV片在线观看中文| 国内精品视频| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲精品麻豆| 在线五月婷婷| 成人午夜免费观看| 亚洲va精品中文字幕| 亚洲欧美激情小说另类| 久久精品欧美一区二区| 午夜视频在线观看区二区| 啦啦啦网站在线观看a毛片| 日日拍夜夜操| 欧美日韩v| 国产精品久久久久久久久久98| 国产毛片基地| 国产精品欧美激情| 亚洲日韩精品无码专区97| 精品亚洲欧美中文字幕在线看| 国产成人精彩在线视频50| 久久久亚洲色| 国产乱码精品一区二区三区中文| 青草视频网站在线观看| 国产va在线| 国产成人综合日韩精品无码不卡| 2018日日摸夜夜添狠狠躁| 黄色污网站在线观看| 日韩毛片免费视频| 一级福利视频| 国产精品区网红主播在线观看| 伊人久久福利中文字幕| 欧美人与牲动交a欧美精品| 毛片在线看网站| 国产成人乱无码视频| 色悠久久久久久久综合网伊人| 欧美笫一页| 男女精品视频| www.91在线播放| 九九九精品视频| 色香蕉影院| 国产精品jizz在线观看软件| 国产自无码视频在线观看| 中文字幕久久亚洲一区| 欧美一区日韩一区中文字幕页| 日本国产在线| 亚洲欧洲日本在线| 久久77777| 亚洲天堂网在线播放| 日韩精品专区免费无码aⅴ| 18禁黄无遮挡免费动漫网站 | 永久免费无码日韩视频| 亚洲综合香蕉| 欧美伦理一区| 国产精品爽爽va在线无码观看 | 91精品亚洲| 白浆视频在线观看| 久久精品无码国产一区二区三区| 搞黄网站免费观看| 自拍偷拍欧美日韩| 亚洲AV无码久久天堂| 一级一毛片a级毛片| 亚洲欧洲日韩综合| 国产福利拍拍拍| 先锋资源久久| av尤物免费在线观看| 久久国产免费观看| 久久久噜噜噜久久中文字幕色伊伊| 91精品国产一区自在线拍| 91精品视频在线播放| 国产91导航| 国产一区免费在线观看| 国产美女精品一区二区| 国产在线八区| 呦系列视频一区二区三区| 亚洲日韩高清在线亚洲专区| 免费高清毛片| 日本在线亚洲|