《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 一个基于Email的数据交换模型

一个基于Email的数据交换模型

2009-08-19
作者:崔学荣,李 娟

    摘  要: 提出一种具有平台独立性的基于Email的5层数据交换模型,以实现在异构的网络、操作系统和数据库管理系统之间交换数据。分析了该模型的工作原理和使用环境,分层设计并实现了该模型,最后给出了具体应用实例。
    关键词: Email  数据交换  防火墙  SMTP  POP3

 

    网络技术和数据库技术已经成为计算机软件应用领域的二大热点,同时,基于Intranet/Internet环境下企业、部门之间数据交换的次数越来越多,情况也越来越复杂。使用传统的编程模式很难满足一些特殊数据交换的要求。例如,胜利油田物资供应处价格管理科需要把所有供应商的产品报价及时汇总,进行统计、比较。这些供应商中有一部分是油田内部的企业(这些企业只能与油田局域网连通),还有一部分是分布在全国各地的供应商(这些企业只能与Internet连通)。如何通过网络将数据进行汇总,一直是一个难题。解决该问题最简单的方法就是使用B/S模式建立一个Web服务器,所有用户都通过Web浏览器访问该服务器。但是因为油田Intranet和外部Internet之间除了可以发送和接收电子邮件外,其他服务(如FTP、HTTP等)均被防火墙断开。所以必须在Intranet和Internet上分别建立2个Web服务器,本文将介绍如何用Email数据交换模型来合并这2个服务器上的数据。
1  Email数据交换模型的工作原理
    在Internet上,Email是常用的网上服务之一。用户将邮件提交给邮件服务器后,还需要由服务器进行一系列的传递操作,才能将邮件传送到目的地址所在的邮件服务器。这一传送过程的实现依赖于简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。SMTP定义了一套有效的邮件传递规则,它以协议的方式规定了网络中全部邮件服务器共同遵守的准则。电子邮件服务除了依赖于SMTP之外,还需要邮局协议(Post Office Protocol,POP)的支持。SMTP负责邮件的传递:从客户机到邮件服务器,以及服务器之间的传递工作。在传递过程中,如果网络忙或者线路状况不好,邮件服务器会每隔一定时间重新尝试发送邮件,所以即使网络不是很稳定,也可以发送成功。而POP协议能够让客户检索到由SMTP发送来的邮件,并将其下载到用户本机。
    该模型使用SMTP将需要交换的数据发送到特定的邮件服务器中,然后由邮件服务器完成邮件的发送工作;在接收端使用POP协议,定时检测邮件服务器中是否有新邮件到达。如果有则判断是否合法,若合法,则自动将数据下载到客户端,然后自动保存到本地数据库中。
2  Email数据交换模型的设计与实现
    Email数据交换模型的体系结构如图1所示。可以看到,该模型共分为5层。最底层(第1层)是Email服务器层(Email Server Layer),负责数据文件的发送和接收;最高层(第5层)是数据库管理系统层(DBMS Layer),在通信终端存储管理数据;中间各层分别是数据文件层(Data File Layer)、压缩文件层(Compressed file Layer)和Email层;它们分别完成数据的导出、导入,压缩、解压数据文件,将压缩文件封装成Email、拆分提取数据文件等。

 


2.1 DBMS Layer的设计
    数据库管理系统层是最高层,用于存储管理数据。在基于Internet或Intranet的异构数据库环境中,数据库可能包括Oracle、Sybase、MS SQL Server、DB2和ACCESS等类型。
2.2 Data File Layer的设计与实现
    由于各终端的数据库对数据的存储结构、组织方式、信息描述存在差异,同时各个操作系统(Windows、Unix、Linux等)也可能存在差异,所以,这一层要完成2个功能:①导出,从源数据库将特定条件下的数据转换到指定格式的数据文件。②导入,把导出的数据文件转换到目的数据库中。根据不同的应用环境要求,数据文件可以是以下3种。
    (1)XML半结构化数据文件
    XML(Extensible Markup Language)是专门为Web应用设计的SGML(Standard Generalized Markup Language)的一个优化子集。数据交换是XML最重要的用途之一。由于XML具有可扩展性、自描述性和跨平台性,所以使得不同计算机应用系统之间交换数据变得容易起来。XML同HTML类似,也是一种元标记语言,具有自描述性,同时也具有可扩展性,即使用者可以根据系统的要求创建新的标记。此外,XML是一种跨平台的独立于系统的标记语言。XML现已成为网络系统中应用较广的一种数据交换格式。
    在导入、导出XML数据时,可以使用常用的编程语言,调用XML文件的接口SAX(Simple API for XML)或者DOM(Document Object Model)等对XML文件进行读写。
    总体上看,XML能很好地实现异构数据库之间的透明互操作,是一个不错的数据交换媒介。但是如果每次导出部分数据,而且可能多次导出时,这种方法可能在目的数据库中存在重复的数据,此时必须在插入数据前,先删除重复的数据。
    (2)SQL语句集合文件
    SQL语句集合文件就是系统将源数据库端的数据操纵语言都记录下来,当用户导出数据时,将这些操纵数据的SQL语句另存为固定格式的文件。在目的数据库端,再重新执行这些SQL语句。SQL语句集合文件示例如下:
    DELETE FROM 报价WHERE 厂家=′Intel′;
    UPDATE报价SET 价格=2000 WHERE物码=′20050501001′;
    INSERT INTO 厂家VALUES(′intel′,′北京′,′010-88888888′,′CPU′);
    这种方法在编写导入、导出程序时非常简单。但要注意,如果在异构数据库之间交换数据,部分SQL语句可能要进行适当改写。例如:如果源数据库是ORACLE,则语句“UPDATE报价set物码=substr(物码,8,3)”,在目的数据库SQL Server中应该是“UPDATE报价set物码=substring(物码,8,3)”,在目的数据库ACCESS中应该是“UPDATE报价set物码=mid(物码,8,3)”。这些转换影响了系统的跨平台性。
    (3)结构化数据库文件的设计
    结构化数据库文件就是指类似ACCESS、EXCEL、DBF和TXT等的数据库文件。这些基于文件管理的数据库可以作为数据交换的媒介。在源数据库端,将要传输的数据插入到中间数据库文件中。在目的数据库端将这些中间数据库文件的数据插入到数据库中。
    在这类文件中,需要保证源数据库、中间数据库和目的数据库中表的结构相同。这样导入和导出程序就可以直接查询,然后插入即可。
    这种方法编写程序简单,但也存在跨平台的问题,存在像XML那样的可能会出现重复记录的问题。用户可以根据自己的实际情况,选择不同的中间数据文件。
2.3 Compressed File Layer的设计与实现
    在源数据库端对导出的文件进行压缩,在目的数据库端对接收到的数据文件进行解压,以便减小文件的大小,提高传输的速度。
    可以在编程语言中调用一些常用压缩文件,如Winzip。以下是在ASP(Active Server Pages)编程语言中调用Winzip的示例。
    Set WshShell=server.CreateObject(″Wscript.Shell″)
    path=Server.MapPath(″\″)
    IsSuccess=WshShell.Run(path&″\wzzip.exe ″& path&″\import.zip″&path &″\dbf_downld\?*.*″,1,true)
    如果交换的数据文件都较小,则可以不对数据文件进行压缩和解压。
2.4 Email Layer的设计
    发送端在这一层完成Email的封装工作,接收端完成邮件的拆分工作。一个Email主要包括标题(Subject)、正文(Body)和附件(Attachment)等。其中在Attachment中加入压缩文件,在Body中加入相关的备注信息,在Subject中加入特定的标识(以便系统能自动识别是否为需要传输的文件,避免其他垃圾邮件)。例如,在标题中用“EDC:”开始,这样在接收到邮件后,就要首先判断标题是否是以“EDC:”开始,如果是则为合法邮件,否则就不是。目的数据库端主要流程如图2所示。

 


2.5 Email Server Layer的设计与实现
    发送端在这一层用SMTP协议完成Email的发送工作,接收端用POP3协议完成邮件的接收工作。在系统中,可以使用Socket编程完成邮件的发送和接收。但是,这种方法编写程序比较复杂,本文不予讨论。也可以使用一些第三方组件来完成邮件的发送和接收。例如:W3 Jmail可以满足该模型的要求。以下是用该组件在VB中实现邮件的发送和接收。
    //发送邮件
    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的数据交换实例
    该实例可以解决本文开头提出的胜利油田物资供应处价格管理科的供应商报价问题。其系统的拓扑结构如图3所示。

 


    系统分别在油田的Intranet和外部Internet上设立2个Web服务器,分别供油田内部企业和全国各地其他企业上报产品价格。Internet网上的用户在报完价格后,在本地保存,同时用户可以点击上报,将数据文件导出、压缩、封装邮件、发送邮件;局域网内的Web服务器定时到Email服务器(该Email服务器在Intranet和Internet上都可以访问)上收取邮件、解压、导入数据。最终在Intranet上的数据是完整的数据,供应处的领导可以随时进行查询,对各个厂家的报价、同一厂家各个时间的报价等进行比较。
    这样,该系统就可以穿过油田局域网和外部Internet的HTTP、FTP等协议的防火墙,通过SMTP和POP3协议完成数据的汇总,极大地方便了用户的使用。
4  结束语
    基于Email的数据交换模型是使用SMTP协议和POP3协议,完成不同数据库数据的交换。该模型可以跨越除SMTP/POP3之外的防火墙,具有平台独立性,可以在异构的网络、操作系统和数据库管理系统之间交换数据,适应恶劣的网络环境,完成传统的数据交换模型无法或者很难完成的工作。该模型具有非常广的应用和推广价值。
参考文献
1   朱韵篪,程代杰.基于XML的分布式数据交换中间件模型设计.计算机工程与设计,2003;24(8)
2   黄红明,尹志兵,熊桂喜.基于XML的数据交换技术的研究及其在大型系统中的应用.计算机应用研究,2003;20(12)
3   刘惊雷,王香红,华臻.基于WinSock的电子邮件后台监听程序设计.计算机工程,2003;29(1)

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。