亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Socket的數(shù)據(jù)自動復制技術設計與實現(xiàn)

        2016-02-11 02:36:27陳亮雄歐陽顯良楊靜學林奕霖李晝陽
        廣東水利水電 2016年12期
        關鍵詞:服務器端控件客戶端

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

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

        基于Socket的數(shù)據(jù)自動復制技術設計與實現(xiàn)

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

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

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

        Socket;數(shù)據(jù)庫;數(shù)據(jù)同步;自動復制;水利信息化

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

        1 設計思路

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

        圖1 數(shù)據(jù)復制信息流程示意

        2 Socket通信及復制流程

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

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

        1) 連接服務器

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

        2) 測試連接

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

        圖2 測試連接信息流程

        3) 數(shù)據(jù)復制

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

        圖3 數(shù)據(jù)復制信息流程

        為了在數(shù)據(jù)發(fā)送和接收中保證完整性,可以在“逐條發(fā)送記錄”環(huán)節(jié)中增加圖4所示的發(fā)送/接收問答流程。

        4) 傳輸口令和數(shù)據(jù)的封裝

        為了保證口令和數(shù)據(jù)傳輸?shù)耐暾约胺奖闾幚?,Socket發(fā)送/接收的信息流采用字符串,需要對其進行封裝。封裝格式如下:

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

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

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

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

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

        圖4 數(shù)據(jù)復制附加流程

        3 關鍵技術問題

        1) 數(shù)據(jù)變化的識別方法

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

        UPDATE table_name SET modifytime=GETDATE(), … …

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

        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

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

        2) 大數(shù)據(jù)的可靠傳輸

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

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

        procedure IdTCPServerExecute(AThread: TIdPeerThread);//監(jiān)聽并接收數(shù)據(jù)

        private

        tcpServer: TIdTcpServer;

        tranSize: Integer;//接收數(shù)據(jù)大小

        tranFileStream: TFileStream; //文件流接收

        tranImgStream: TMemoryStream;//大數(shù)據(jù)流接收

        public

        end;

        TTcpFileClient=class //文件傳輸服務,發(fā)送

        private

        tcpClient: TIdTcpClient;

        public

        constructor Create(Owner: TComponent);

        destructor Destroy; override;

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

        function SendImgBuffer: Integer;//發(fā)送大數(shù)據(jù)

        end;

        3) 接收數(shù)據(jù)后更新數(shù)據(jù)庫

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

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

        4) 帶附件的數(shù)據(jù)復制

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

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

        圖5 文件復制流程

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

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

        with TADOQuery.Create(nil) do

        try

        Connection:=adoConn;

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

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

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

        if fieldType=′text’ then

        Parameters[0].LoadFromStream(tranStream, ftMemo)

        else

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

        Result:=ExecSQL>0;

        finally

        Free;

        end;

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

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

        4 系統(tǒng)實現(xiàn)

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

        圖6 客戶端界面示意

        圖7 服務器端界面示意

        5 結語

        系統(tǒng)采用Socket技術,C/S模式,分為客戶端程序和服務器端程序,可以運行在局域網、互聯(lián)網等采用TCP/IP協(xié)議的網絡環(huán)境,實現(xiàn)本地或異地數(shù)據(jù)庫之間的自動復制功能??梢远ㄖ茝椭频挠媱潯椭频臈l件,按業(yè)務需要靈活進行數(shù)據(jù)自動同步。有別于傳統(tǒng)的數(shù)據(jù)同步技術,本系統(tǒng)可以在數(shù)據(jù)行記錄(record)級別控制數(shù)據(jù)的同步,即只同步復制特定的行數(shù)據(jù),且可以復制數(shù)據(jù)庫表記錄指定的附件,保證在數(shù)據(jù)共享的同時,保持數(shù)據(jù)“一數(shù)一源”和數(shù)據(jù)完整性,滿足水利信息化行業(yè)的特定需求。

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

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

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

        [4] 胡開明.基于Delphi的機房一體化教學監(jiān)控系統(tǒng)設計[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 基金項目:北斗衛(wèi)星系統(tǒng)在水利防災減災中的應用(編號:2013B030200003)。

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

        TP311.132

        :A

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

        猜你喜歡
        服務器端控件客戶端
        關于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        縣級臺在突發(fā)事件報道中如何應用手機客戶端
        傳媒評論(2018年4期)2018-06-27 08:20:24
        孵化垂直頻道:新聞客戶端新策略
        傳媒評論(2018年4期)2018-06-27 08:20:16
        基于Vanconnect的智能家居瘦客戶端的設計與實現(xiàn)
        電子測試(2018年10期)2018-06-26 05:53:34
        淺析異步通信層的架構在ASP.NET 程序中的應用
        成功(2018年10期)2018-03-26 02:56:14
        在Windows中安裝OpenVPN
        客戶端空間數(shù)據(jù)緩存策略
        網頁防篡改中分布式文件同步復制系統(tǒng)
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        基于Struts的Web應用系統(tǒng)數(shù)據(jù)驗證
        女同在线视频一区二区| 亚洲av无码一区二区三区系列| 丁香六月婷婷综合| 挑战亚洲美女视频网站| 亚洲一区二区三区免费网站| 人人鲁人人莫人人爱精品 | 国产精品.xx视频.xxtv| 成人午夜免费福利| 美国黄色av一区二区| 国产精品成熟老女人| 欧美成年黄网站色视频| 欧美激情精品久久999| 一区二区三区观看视频在线| 亚洲国产一二三精品无码| 真实国产乱啪福利露脸| 无码区a∨视频体验区30秒 | 最近免费mv在线观看动漫| 日韩我不卡| 国产青春草在线观看视频| 亚洲综合av一区二区三区蜜桃 | 亚洲国产精品久久久久久久| 久草视频在线这里只有精品 | 久久精品国产亚洲av麻豆色欲| 毛茸茸的中国女bbw| 国产成人一区二区三区高清| 亚洲av色福利天堂久久入口| 亚洲日韩av无码一区二区三区人| 中国年轻丰满女人毛茸茸| 国产人成视频免费在线观看| 一本久道竹内纱里奈中文字幕| 无码一区二区三区亚洲人妻| 欧美色色视频| 9l国产自产一区二区三区| 十四以下岁毛片带血a级| 亚洲精品久久久久中文字幕二区| 色窝综合网| h视频在线播放观看视频| 亚洲av无码专区首页| 亚洲av不卡电影在线网址最新 | 黄色三级一区二区三区| 无码专区人妻系列日韩精品|