《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 一個基于Email的數(shù)據(jù)交換模型

一個基于Email的數(shù)據(jù)交換模型

2010-01-29
作者:崔學榮,李 娟

摘   要: 提出一種具有平臺獨立性的基于Email的5層數(shù)據(jù)交換模型,以實現(xiàn)在異構(gòu)的網(wǎng)絡(luò)、操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)之間交換數(shù)據(jù)。分析了該模型的工作原理和使用環(huán)境,分層設(shè)計并實現(xiàn)了該模型,最后給出了具體應(yīng)用實例。
關(guān)鍵詞: Email  數(shù)據(jù)交換  防火墻  SMTP  POP3

  網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫技術(shù)已經(jīng)成為計算機軟件應(yīng)用領(lǐng)域的二大熱點,同時,基于Intranet/Internet環(huán)境下企業(yè)、部門之間數(shù)據(jù)交換的次數(shù)越來越多,情況也越來越復雜。使用傳統(tǒng)的編程模式很難滿足一些特殊數(shù)據(jù)交換的要求。例如,勝利油田物資供應(yīng)處價格管理科需要把所有供應(yīng)商的產(chǎn)品報價及時匯總,進行統(tǒng)計、比較。這些供應(yīng)商中有一部分是油田內(nèi)部的企業(yè)(這些企業(yè)只能與油田局域網(wǎng)連通),還有一部分是分布在全國各地的供應(yīng)商(這些企業(yè)只能與Internet連通)。如何通過網(wǎng)絡(luò)將數(shù)據(jù)進行匯總,一直是一個難題。解決該問題最簡單的方法就是使用B/S模式建立一個Web服務(wù)器,所有用戶都通過Web瀏覽器訪問該服務(wù)器。但是因為油田Intranet和外部Internet之間除了可以發(fā)送和接收電子郵件外,其他服務(wù)(如FTP、HTTP等)均被防火墻斷開。所以必須在Intranet和Internet上分別建立2個Web服務(wù)器,本文將介紹如何用Email數(shù)據(jù)交換模型來合并這2個服務(wù)器上的數(shù)據(jù)。
1  Email數(shù)據(jù)交換模型的工作原理
  在Internet上,Email是常用的網(wǎng)上服務(wù)之一。用戶將郵件提交給郵件服務(wù)器后,還需要由服務(wù)器進行一系列的傳遞操作,才能將郵件傳送到目的地址所在的郵件服務(wù)器。這一傳送過程的實現(xiàn)依賴于簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol,SMTP)。SMTP定義了一套有效的郵件傳遞規(guī)則,它以協(xié)議的方式規(guī)定了網(wǎng)絡(luò)中全部郵件服務(wù)器共同遵守的準則。電子郵件服務(wù)除了依賴于SMTP之外,還需要郵局協(xié)議(Post Office Protocol,POP)的支持。SMTP負責郵件的傳遞:從客戶機到郵件服務(wù)器,以及服務(wù)器之間的傳遞工作。在傳遞過程中,如果網(wǎng)絡(luò)忙或者線路狀況不好,郵件服務(wù)器會每隔一定時間重新嘗試發(fā)送郵件,所以即使網(wǎng)絡(luò)不是很穩(wěn)定,也可以發(fā)送成功。而POP協(xié)議能夠讓客戶檢索到由SMTP發(fā)送來的郵件,并將其下載到用戶本機。
  該模型使用SMTP將需要交換的數(shù)據(jù)發(fā)送到特定的郵件服務(wù)器中,然后由郵件服務(wù)器完成郵件的發(fā)送工作;在接收端使用POP協(xié)議,定時檢測郵件服務(wù)器中是否有新郵件到達。如果有則判斷是否合法,若合法,則自動將數(shù)據(jù)下載到客戶端,然后自動保存到本地數(shù)據(jù)庫中。
2  Email數(shù)據(jù)交換模型的設(shè)計與實現(xiàn)
  Email數(shù)據(jù)交換模型的體系結(jié)構(gòu)如圖1所示??梢钥吹?,該模型共分為5層。最底層(第1層)是Email服務(wù)器層(Email Server Layer),負責數(shù)據(jù)文件的發(fā)送和接收;最高層(第5層)是數(shù)據(jù)庫管理系統(tǒng)層(DBMS Layer),在通信終端存儲管理數(shù)據(jù);中間各層分別是數(shù)據(jù)文件層(Data File Layer)、壓縮文件層(Compressed file Layer)和Email層;它們分別完成數(shù)據(jù)的導出、導入,壓縮、解壓數(shù)據(jù)文件,將壓縮文件封裝成Email、拆分提取數(shù)據(jù)文件等。

2.1 DBMS Layer的設(shè)計
  數(shù)據(jù)庫管理系統(tǒng)層是最高層,用于存儲管理數(shù)據(jù)。在基于Internet或Intranet的異構(gòu)數(shù)據(jù)庫環(huán)境中,數(shù)據(jù)庫可能包括Oracle、Sybase、MS SQL Server、DB2和ACCESS等類型。
2.2 Data File Layer的設(shè)計與實現(xiàn)
  由于各終端的數(shù)據(jù)庫對數(shù)據(jù)的存儲結(jié)構(gòu)、組織方式、信息描述存在差異,同時各個操作系統(tǒng)(Windows、Unix、Linux等)也可能存在差異,所以,這一層要完成2個功能:①導出,從源數(shù)據(jù)庫將特定條件下的數(shù)據(jù)轉(zhuǎn)換到指定格式的數(shù)據(jù)文件。②導入,把導出的數(shù)據(jù)文件轉(zhuǎn)換到目的數(shù)據(jù)庫中。根據(jù)不同的應(yīng)用環(huán)境要求,數(shù)據(jù)文件可以是以下3種。
  (1)XML半結(jié)構(gòu)化數(shù)據(jù)文件
  XML(Extensible Markup Language)是專門為Web應(yīng)用設(shè)計的SGML(Standard Generalized Markup Language)的一個優(yōu)化子集。數(shù)據(jù)交換是XML最重要的用途之一。由于XML具有可擴展性、自描述性和跨平臺性,所以使得不同計算機應(yīng)用系統(tǒng)之間交換數(shù)據(jù)變得容易起來。XML同HTML類似,也是一種元標記語言,具有自描述性,同時也具有可擴展性,即使用者可以根據(jù)系統(tǒng)的要求創(chuàng)建新的標記。此外,XML是一種跨平臺的獨立于系統(tǒng)的標記語言。XML現(xiàn)已成為網(wǎng)絡(luò)系統(tǒng)中應(yīng)用較廣的一種數(shù)據(jù)交換格式。
  在導入、導出XML數(shù)據(jù)時,可以使用常用的編程語言,調(diào)用XML文件的接口SAX(Simple API for XML)或者DOM(Document Object Model)等對XML文件進行讀寫。
  總體上看,XML能很好地實現(xiàn)異構(gòu)數(shù)據(jù)庫之間的透明互操作,是一個不錯的數(shù)據(jù)交換媒介。但是如果每次導出部分數(shù)據(jù),而且可能多次導出時,這種方法可能在目的數(shù)據(jù)庫中存在重復的數(shù)據(jù),此時必須在插入數(shù)據(jù)前,先刪除重復的數(shù)據(jù)。
  (2)SQL語句集合文件
  SQL語句集合文件就是系統(tǒng)將源數(shù)據(jù)庫端的數(shù)據(jù)操縱語言都記錄下來,當用戶導出數(shù)據(jù)時,將這些操縱數(shù)據(jù)的SQL語句另存為固定格式的文件。在目的數(shù)據(jù)庫端,再重新執(zhí)行這些SQL語句。SQL語句集合文件示例如下:
  DELETE FROM 報價WHERE 廠家=′Intel′;
  UPDATE報價SET 價格=2000 WHERE物碼=′20050501001′;
  INSERT INTO 廠家VALUES(′intel′,′北京′,′010-88888888′,′CPU′);
  這種方法在編寫導入、導出程序時非常簡單。但要注意,如果在異構(gòu)數(shù)據(jù)庫之間交換數(shù)據(jù),部分SQL語句可能要進行適當改寫。例如:如果源數(shù)據(jù)庫是ORACLE,則語句“UPDATE報價set物碼=substr(物碼,8,3)”,在目的數(shù)據(jù)庫SQL Server中應(yīng)該是“UPDATE報價set物碼=substring(物碼,8,3)”,在目的數(shù)據(jù)庫ACCESS中應(yīng)該是“UPDATE報價set物碼=mid(物碼,8,3)”。這些轉(zhuǎn)換影響了系統(tǒng)的跨平臺性。
  (3)結(jié)構(gòu)化數(shù)據(jù)庫文件的設(shè)計
  結(jié)構(gòu)化數(shù)據(jù)庫文件就是指類似ACCESS、EXCEL、DBF和TXT等的數(shù)據(jù)庫文件。這些基于文件管理的數(shù)據(jù)庫可以作為數(shù)據(jù)交換的媒介。在源數(shù)據(jù)庫端,將要傳輸?shù)臄?shù)據(jù)插入到中間數(shù)據(jù)庫文件中。在目的數(shù)據(jù)庫端將這些中間數(shù)據(jù)庫文件的數(shù)據(jù)插入到數(shù)據(jù)庫中。
在這類文件中,需要保證源數(shù)據(jù)庫、中間數(shù)據(jù)庫和目的數(shù)據(jù)庫中表的結(jié)構(gòu)相同。這樣導入和導出程序就可以直接查詢,然后插入即可。
  這種方法編寫程序簡單,但也存在跨平臺的問題,存在像XML那樣的可能會出現(xiàn)重復記錄的問題。用戶可以根據(jù)自己的實際情況,選擇不同的中間數(shù)據(jù)文件。
2.3 Compressed File Layer的設(shè)計與實現(xiàn)
  在源數(shù)據(jù)庫端對導出的文件進行壓縮,在目的數(shù)據(jù)庫端對接收到的數(shù)據(jù)文件進行解壓,以便減小文件的大小,提高傳輸?shù)乃俣取?br />   可以在編程語言中調(diào)用一些常用壓縮文件,如Winzip。以下是在ASP(Active Server Pages)編程語言中調(diào)用Winzip的示例。
  Set WshShell=server.CreateObject(″Wscript.Shell″)
  path=Server.MapPath(″\″)
  IsSuccess=WshShell.Run(path&″\wzzip.exe ″& path&″\import.zip″&path &″\dbf_downld\*.*″,1,true)
  如果交換的數(shù)據(jù)文件都較小,則可以不對數(shù)據(jù)文件進行壓縮和解壓。
2.4 Email Layer的設(shè)計
  發(fā)送端在這一層完成Email的封裝工作,接收端完成郵件的拆分工作。一個Email主要包括標題(Subject)、正文(Body)和附件(Attachment)等。其中在Attachment中加入壓縮文件,在Body中加入相關(guān)的備注信息,在Subject中加入特定的標識(以便系統(tǒng)能自動識別是否為需要傳輸?shù)奈募?,避免其他垃圾郵件)。例如,在標題中用“EDC:”開始,這樣在接收到郵件后,就要首先判斷標題是否是以“EDC:”開始,如果是則為合法郵件,否則就不是。目的數(shù)據(jù)庫端主要流程如圖2所示。

2.5 Email Server Layer的設(shè)計與實現(xiàn)
  發(fā)送端在這一層用SMTP協(xié)議完成Email的發(fā)送工作,接收端用POP3協(xié)議完成郵件的接收工作。在系統(tǒng)中,可以使用Socket編程完成郵件的發(fā)送和接收。但是,這種方法編寫程序比較復雜,本文不予討論。也可以使用一些第三方組件來完成郵件的發(fā)送和接收。例如:W3 Jmail可以滿足該模型的要求。以下是用該組件在VB中實現(xiàn)郵件的發(fā)送和接收。
  //發(fā)送郵件
  Dim msg As New jmail.Message
  msg.MailServerUserName=txtUsername
  msg.MailServerPassWord=txtPassword
  msg.From=txtFromEmailAddress
  msg.AddRecipient txtToEmailAddress
  For i=0 To lstAttachments.ListCount - 1
     lstAttachments.ListIndex=i
     msg.AddAttachment(lstAttachments.Text)
  Next i
  msg.Subject=txtEmailSubject
  msg.Body=txtEmailBodyOfMessage
  msg.Send(txtEmailServer)
  //接收郵件
  Dim pop3 As New jmail.pop3
  pop3.Connect txtUsername,txtPassword,txtEmailserver
  For i=1 To pop3.Count
     Set msg=pop3.Messages.Item(i)
     Print msg.Body
     Print msg.Subject
     pop3.DeleteSingleMessage(i)
  Next
3  基于Email的數(shù)據(jù)交換實例
  該實例可以解決本文開頭提出的勝利油田物資供應(yīng)處價格管理科的供應(yīng)商報價問題。其系統(tǒng)的拓撲結(jié)構(gòu)如圖3所示。

  系統(tǒng)分別在油田的Intranet和外部Internet上設(shè)立2個Web服務(wù)器,分別供油田內(nèi)部企業(yè)和全國各地其他企業(yè)上報產(chǎn)品價格。Internet網(wǎng)上的用戶在報完價格后,在本地保存,同時用戶可以點擊上報,將數(shù)據(jù)文件導出、壓縮、封裝郵件、發(fā)送郵件;局域網(wǎng)內(nèi)的Web服務(wù)器定時到Email服務(wù)器(該Email服務(wù)器在Intranet和Internet上都可以訪問)上收取郵件、解壓、導入數(shù)據(jù)。最終在Intranet上的數(shù)據(jù)是完整的數(shù)據(jù),供應(yīng)處的領(lǐng)導可以隨時進行查詢,對各個廠家的報價、同一廠家各個時間的報價等進行比較。
  這樣,該系統(tǒng)就可以穿過油田局域網(wǎng)和外部Internet的HTTP、FTP等協(xié)議的防火墻,通過SMTP和POP3協(xié)議完成數(shù)據(jù)的匯總,極大地方便了用戶的使用。
4  結(jié)束語
  基于Email的數(shù)據(jù)交換模型是使用SMTP協(xié)議和POP3協(xié)議,完成不同數(shù)據(jù)庫數(shù)據(jù)的交換。該模型可以跨越除SMTP/POP3之外的防火墻,具有平臺獨立性,可以在異構(gòu)的網(wǎng)絡(luò)、操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)之間交換數(shù)據(jù),適應(yīng)惡劣的網(wǎng)絡(luò)環(huán)境,完成傳統(tǒng)的數(shù)據(jù)交換模型無法或者很難完成的工作。該模型具有非常廣的應(yīng)用和推廣價值。
參考文獻
1   朱韻篪,程代杰.基于XML的分布式數(shù)據(jù)交換中間件模型設(shè)計.計算機工程與設(shè)計,2003;24(8)
2   黃紅明,尹志兵,熊桂喜.基于XML的數(shù)據(jù)交換技術(shù)的研究及其在大型系統(tǒng)中的應(yīng)用.計算機應(yīng)用研究,2003;20(12)
3   劉驚雷,王香紅,華臻.基于WinSock的電子郵件后臺監(jiān)聽程序設(shè)計.計算機工程,2003;29(1)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。