基于sqlite的移动嵌入式数据库同步系统的研究和开发


华中师范大学 硕士学位论文 基于SQLite的移动嵌入式数据库同步系统的研究和开发 姓名:黄东 申请学位级别:硕士 专业:电路与系统 指导教师:刘蓉 20090601 ⑧\./硕士擘位论文MASTER’STtiESIS摘要嵌入式系统中,移动嵌入式数据库系统作为数据存储管理访问的引擎,是一个有着广泛应用的软件。主流的数据库厂商都有针对该类应用的解决方案,在这些方案中,嵌入式数据库同步系统是其中一个重要组成部分。开源软件以其开放代码,成本低的特点在嵌入式系统的软件解决方案中占有一定的市场份额,但嵌入式数据库同步系统却没有对应的开源方案。本文分析了移动嵌入式数据库同步系统的应用场景,工作流程,组成模块,需要解决的问题及其解决方案的分析和选择,开发了一个针对开源嵌入式数据库SQLite的数据库同步系统。对于移动嵌入式数据库同步系统,本文主要分析了系统同步的四种可能的方式,可选的网络传输协议,数据串行化,同步服务器的数据库连接方式等关键问题并选择和实现了解决方案。本文完成了同步客户端和同步服务器的设计开发,同步客户端以C语言实现,运行于嵌入式设备上,负责记录数据修改记录,存储管理元数据,串行化同步数据并通过网络发送到同步服务器以及接收更新数据并应用到本地数据库中;同步服务器使用Java开发,运。行于服务器上,负责接收解包同步终端发送的同步数据,并将数据转为SQL语句执行到中心数据库以应用同步更新。系统选择比较了多种技术方案来解决遇到的问题,文中主要提出以下几种解决方案:UUID替代整形数据格式作为数据表示、设计表来存储同步信息元数据、采用Hr丌’P协议传输数据和解决安全认证及加密传输、使用JSON格式作为数据在网络上传输的串行化格式、使用J2EE平台处理系统并发。系统实现了嵌入式数据库同步的功能,同时具备认证安全和可选择加密传输,网络传输效率较高,配置实用简单等特点,对于选挥嵌入式系统的开发人员提供了一个很好的选择。关键词:SQLite;同步系统;嵌入式数据库;开放源代码 ⑨\:/硕士学位论文MASTER‘STHESISAbstractWiththedevelopingoftheintegratedcircuitruledbytheMoore’SLaw,thefunctionalityandcomplexityofEmbeddedSystemisgettingstrongerandstronger.Morefunctionalitymeansmorecomplexsottware.DatabaseManagementSystem(DBMS)isthesoftwareengineofInformationManagementSystemwhichisamainapplicationofITindustry.ForEmbeddedSystem,dataalSOneedtobemanagedbyDBMS.itiscalledEmbeddedDatabaseManagementSystem(EDBMS).Therearemanyproductsofthisarea,Oracle。IBM.MicrosoftandSybaseallreleasedtheirsolutions.IntheareaofOpenSourceSoftware.thereiSaproiectSQLitethatcanbeusedasEDBMSbutitisnotasolution.someimportantcomponentsarenotincluded.SynchronizingSystemisaindispensablecomponentoftheEDBMSsolution,whichSQLitedoesn’tprovides.ThisthesisanalysiswhatiSaDatabaseSynchronizingSystemisandhowitworks,andhowtodevelopaprototypeofaDatabaseSynchronizingSystemwhichCallbeappliedtoSQLite,Forthemomentofwritingthisthesis.thereisnoOpenSourceProjectinthearea.HopingthisprojectwouldfilltheblankoftheareaandprovideachoicefordeveloperswhowanttochooseSQLiteastheDatabaseEnginebutworriedaboutthemissingoftheSynchronizingSystem.TheURLofthisprojectishttp://code.google.corn/p/sync_SQLite3.Anybodycoulddownloaditanduseitashe(she)wishes.Keywords:SQLite;SynchronizingSystem;EDBMS;OpenSource ⑨硕士学位论文MASTER’STHESIS华中师范大学学位论文原创性声明和使用授权说明原创性声明本人郑重声明:所呈交的学位论文,是本人在导师指导下,独立进行研究工作所取得的研究成果。除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本声明的法律结果由本人承担。作者张童泵吼砷年多月7日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中师范大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。同时授权中国科学技术信息研究所将本学位论文收录到《中国学位论文全文数据库》,并通过网络向社会公众提供信息服务。作者签名:境泵日期:砂护∥月7日导师签名:办7整日期:砷年占月7日本人已经认真阅读“CALLS高校学位论文全文数据库发布章程”,同意将本人的学位论文提交‘'CALIS高校学位论文全文数据库”中全文发布,并可按“章程”中的规定享受相关权益。回童途塞握交盾澄盾;旦圭玺;旦二生;旦三生筮查!作者签名:齿众日期:砷年/月导师签名:荔J隽日期:刎年占月7目, ⑨硕士学位论文MASTER’STHESI$1.1课题研究背景1绪论随着嵌入式技术的高速发展,人们拥有越来越多的嵌入式手持或车载设备,例如导航仪,MP4,手机,UMPC等。越来越多的设备意味着运行于其上的软件也越来越多,越来越丰富。在本人所参加的一项基于嵌入式系统的开发过程中,发现嵌入式系统上的开源软件远不如桌面系统或者服务器系统上的开源软件丰富,嵌入式系统的开发人员在技术选型的时候,虽然都倾向于选用开源方案开发系统所需要的功能,可是嵌入式领域的开源软件往往不多,而且还不是很成熟,所以往往导致开源方案最终从技术选型的候选名单中被删掉。一个好的嵌入式系统不仅仅要有能实现其功能的硬件,还需要有一系列能够使得系统达到既定设计需求的工作方式的软件系统,这往往包括操作系统,基础软件系统和应用软件系统。数据库管理系统作为基础软件设施,在系统需要管理大量数据的时候早已是不可或缺的。随着嵌入式系统的功能越来越多,越来越强大,对于数据的存储,查询,处理等要求也更加复杂,这时,如果不采用数据库管理系统而还是采用自行编程实现数据的管理,往往会使开发周期加长,系统可靠性降低,给项目带来风险。可运行于嵌入式系统上的数据库目前有很多种,各大数据库提供商都有其嵌入式数据库的产品,但是在开源领域,目前只有两个比较成熟的项I三l--SQLite和BerkeleyDB。其中,只有SQLite支持SQL,BerkeleyDB不是一个关系型数据库系统,而大多数的信息系统中都使用关系型数据库。SQLite是一个功能齐全,代码精悍的关系型数据库管理系统,但是它并非完全为嵌入式系统所设计。嵌入式系统常常需要的数据库同步功能并没有在SQLite的功能需求列表之中,而且其目前互联网上还没有提供此项功能的开源项目,这无疑会影响开源系统在嵌入式领域的发展。本文尝试开发一个作用于SQLite的数据库同步系统,此系统具有良好的可重用性,代码也很短小,嵌入式系统开发者可以直接使用或稍加修改此代码模块来实现需要的数据库同步功能。 ⑨硕士学位论文MASTER’STHESIS1.2国内外研究现状及研究意义在商业信息系统领域,嵌入式设备上所存储和管理的信息往往都是整个集成信息系统的一部分,而这些数据往往都需要与整个信息系统的数据进行同步和交互。各大商业数据库厂商所提供的,并不仅仅是能够实现一对算法的软件,他们往往是要提供~整套的解决方案,而嵌入式数据库管理系统,嵌入式数据库的数据同步系统则是这些解决方案中不可或缺的软件组件,所以几乎所有的大型商业数据库提供商都会推出自己的嵌入式数据库产品和嵌入式数据库同步服务器产品。如表l—l所示,目前市场份额最大的数据库开发商还是甲骨文,Sybase则是最先跨入移动数据库领域的数据库厂商。虽然目前嵌入式数据库的产品有很多种,但是可用于嵌入式系统的,关系型的开源数据库,只有SQLite一种。商业化的嵌入式数据库管理系统往往都可以和其出产厂商的大型数据库系统很好的同步,但有些功能往往只限定于其对应的服务器版本,SQLite则因为设计目的的原因,没有包含同步功能。表1.1各大数据库厂商嵌入式数据库产品对比特性产品公司同步服同步footprint支持的系统务器功能OracleLitelMOracle有有50k.1MLinux,Symbian,WinCEAdaptiveServerSybase有有SrnallLinux,WinCE,PalmAnywhereTMUltraLiteTMSybase有有SmallerLinux,WinCE,PalmSQLServerMierosof有有2MWinCECompactTMtDB2IBM有有350kLinux,Palm,QNX,EveryplaceTMSymbian,WinCESQLite开源无无73kLinux,Symbian,WinCE国内有很多大学开发了自己的嵌入式数据库系统,大多都有相应的数据同步功能和数据同步服务器。比较突出的有东南大学的SwiftDB,中国人民大学的小金仓,还有中科院的嵌入式数据库系统。这些系统都有小规模应用,但并不是开放源代码的,且其详细实现过程也未在相关文献中找到详细阐述。2 ⑨硕士学位论文&【ASTER’STHESI$目前,还没有发现可以在嵌入式系统上运行的用于嵌入式数据库同步的开源项目。本文尝试实现一个此类系统的原型,填补此块空白,并详细阐述了一个针对特定网络连接条件和一对多拓扑结构的移动数据库同步系统的设计方法和开发实现过程。‘1.3本文主要工作本文分析了移动嵌入式数据库的特点,移动嵌入式数据库及其同步系统在嵌入式系统中所起的作用,并针对数据同步的一些关键问题也作了一定的分析,提出了~种尝试解决方案。在前面分析的基础上,本文阐述了设计和开发一个基于SQLite数据库管理系统的数据同步解决方案的过程,并分析了核心代码的功能,实现了一个可以运作的同步系统,最后提交了所有代码到google的开源分享平台上。所有的代码可以在网址http://code.google.com/p/sync.SQLite3/处轻松获得。3 ⑨硕士学位论文MASTER’STHESIS2嵌入式移动数据库同步系统的分析2.1移动嵌入式系统在嵌入式系统中的作用2.1.1嵌入式系统简介在日益信息化的社会中,计算机和网络已经全面渗透到日常生活的每一个角落。对于每个人,需要的已经不再仅仅是那种放在桌上处理文档,进行工作管理和生产控制的计算机”机器”;一直一来,嵌入式系统的CPU在数量上都超过桌面计算机,一台普通汽车中的嵌入式处理器可能有上千个。现在几乎每个人身边都有很多的嵌入式设备,如手表,体温计,洗衣机,电冰箱,交换机,手机,甚至台灯闹钟,只是它们往往都包装在产品内部发挥着其功能。且在工业和服务领域中,使用嵌入式技术的数字机床,智能工具,工业机器人,服务机器人也将逐渐改变传统的工业和服务方式。表2.1嵌入式系统的一些应用领域领域应用消费电子信息家电智能玩具通信设备移动存储视频监控工业控制工控设备智能仪表汽车电子电子农业网络网络设备电子商务无线传感器医务医疗医疗电子军事国防军事电子航空航天各类飞行设备、卫星等地理测绘GPS电子设备嵌入式系统经过多年的发展后,早已与人们的学习、工作、生活息息相关,嵌入式系统已经应用在科学研究、工程设计、军事技术、各类产业、商业文化艺术、娱乐业以及人们的日常生活等方方面面(表2.1列举了嵌入式系统应用的部分领域)。随着数字信息技术和网络技术的飞速发展,计算机技术,通信技术,消费电子产品的一体化趋势日益明显,这昭示着~个庞大的嵌入式应用市场的产生。嵌入式系统技术也成了当前人们关注、学习研究的热点。嵌入式系统本身是一个相对模糊的定义,不同的组织对其定义也略有不同,但大意是相同的。4 ⑨硕士学位论文MASTER’STHESIS按照电器工程协会(IEEE)的定义,“嵌入式系统是用来控制、监控、或者辅助操作机器、装置、工厂等大规模系统的设备”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplantsI旧J)。这个定义主要是从嵌入式系统的用途方面来进行定义的。更具一般性的,也是在多数书籍资料中使用的关于嵌入式系统的定义是:嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应于对功能、可靠性、成本、体积、功耗具有严格要求的专用计算机系统。根据以上嵌入式系统的定义,可以看出,嵌入式系统是由硬件和软件相结合组成的具有特定功能、用于特定场合的独立系统。其硬件主要由嵌入式微处理器、外围硬件设备组成:其软件主要包括底层系统软件和用户应用软件。2.1.2嵌入式系统的特点和发展历程及趋势嵌入式系统相对于其它计算机系统,有很多特别之处:(1)专用、软硬件可剪裁可配置从嵌入式系统定义可以看出,嵌入式系统是面向应用的,和通用系统最大的区别在于嵌入式系统功能专一。根据这个特性,嵌入式系统的软、硬件可以根据需要进行精心设计,根据需要来裁剪,实现低成本、高性能的效果。也正因如此,嵌入式系统采用的微处理器和外围设备种类繁多,系统不具通用性。(2)低功耗、高可靠性、高稳定性嵌入式系统大多用在特定场合,要么是环境条件恶劣,要么要求其长时间连续运转,因此嵌入式系统应具有高可靠性、高稳定性、低功耗等性能。(3)软件代码短小精悍由于成本和应用场合的特殊性,通常嵌入式系统的硬件资源(如内存等)都比较少,因此对嵌入式系统设计也提出了较高的要求。嵌入式系统的软件设计尤其要求高质量,要在有限资源上实现高可靠性、高性能。虽然随着硬件技术的发展和成本的降低,在高端嵌入式产品上也开始采用嵌入式操作系统,但其和PC资源比起来还是少得可怜,所以嵌入式系统的软件代码依然要在保证性能的情况下,占用尽量少的资源,保证产品的高性价比,使其具有更强的竞争力。(4)代码可固化在一些对性能要求较高的应用中,或者系统的硬件环境比较苛刻的时候,常常采用直接将实现系统功能的代码防止在CPU自带的代码存储器中,省去了从外部存储设备加载代码的过程,大大提高系统性能。5 ⑨硕士学位论文lI直ASTER’STttESIS(5)实时性很多采用嵌入式系统的应用具有实时性要求,所以大多嵌入式系统采用实时性系统。但需要注意的是嵌入式系统不等于实时系统。(6)弱交互性嵌入式系统不仅功能强大,而且要求使用灵活方便,一般不需要类似键盘、鼠标等。人机交互以简单方便为主。(7)嵌入式系统软件开发往往使用根据芯片设计的软件开发工具,编译器和程序语言也有可能是根据芯片来设计的专用工具。(8)要求开发、设计人员有较高的技能“嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。”[11,12]这些特点也是嵌入式系统设计开发过程中需要特别注意的地方,但是随着摩尔定律的发展,嵌入式领域的半导体集成度越来越高,芯片功能更加强大,和PC的差异正在缩小,一些特点也是只有针对特定领域的应用时才会凸显出来。嵌入式系统的发展虽然非常迅速,但是有着越来越迅速的趋势,未来的嵌入式系统发展有着更广阔的空间和前景,嵌入式系统的发展趋势主要有:(1)小型化、智能化、网络化、可视化随着技术水平的提高和人们生活的需要,嵌入式设备(尤其是消费类产品)正朝着小型化便携式和智能化的方向发展。如果你携带笔记本电脑外出办事,你肯定希望它轻薄小巧,甚至你可能希望有一种更便携的设备来替代它,目前的上网本、MID(移动互联网设备)、便携投影仪等都是因类似的需求而出现的。对嵌入式而言,可以说是已经进入了嵌入式互联网时代(有线网、无线网、广域网、局域网的组合),嵌入式设备和互联网的紧密结合,更为我们的日常生活带来了极大的方便和无限的想象空间。嵌入式设备功能越来越强大,未来我们的冰箱、洗衣机等家用电器都将实现网上控制;异地通讯、协同工作、无人操控场所、安全监控场所等的可视化也已经成为了现实,随着网络运载能力的提升,可视化将得到进一步完善。人工智能、模式识别技术也将在嵌入式系统中得到应用,使得嵌入式系统更具人性化、智能化。(2)多核技术的应用‘人们需要处理的信息越来越多,这就要求嵌入式设备运算能力更强,因此需要设计出更强大的嵌入式处理器,多核技术处理器在嵌入式中的应用将更为普遍。6 ⑨硕士学位论文MASTER’STtlESIS(3)低功耗(节能)、绿色环保在嵌入式系统的硬件和软件设计中都在追求更低的功耗,以求嵌入式系统能获得更长的可靠工作时间。如:手机的通话和待机时间,mp3听音乐的时间等等。同时,绿色环保型嵌入式产品将更受人们青睐,在嵌入式系统设计中也会更多的考虑如:辐射和静电等问题。(4)云计算、可重构、虚拟化等技术被进一步应用到嵌入式系统中简单讲,云计算是将计算分布在大量的分布式计算机上,这样我们只需要一个终端,就可以通过网络服务来实现我们需要的计算任务,甚至是超级计算任务。云计算(CloudComputing)是分布式处理(DistributedComputing)、并行处理(ParallelComputing)和网格计算(GridComputing)的发展,或者说是这些计算机科学概念的商业实现。在未来几年里,云计算将得到进一步发展与应用。可重构性是指在一个系统中,其硬件模块或(和)软件模块均能根据变化的数据流或控制流对系统结构和算法进行重新配置(或重新设置)。可重构系统最突出的优点就是能够根据不同的应用需求,改变自身的体系结构,以便与具体的应用需求相匹配。虚拟化是指计算机软件在一个虚拟的平台上而不是真实的硬件上运行。虚拟化技术可以简化软件的重新配置过程,易于实现软件的标准化。其中CPU的虚拟化’可以单CPU模拟多CPU并行运行,允许一个平台同时运行多个操作系统,并且都可以在相互独立的空间内运行而互不影响,从而提高工作效率和安全性,虚拟化技术是降低多内核处理器系统开发成本的关键。虚拟化技术是未来几年最值得期待和关注的关键技术之一。随着各种技术的逐步成熟和在嵌入式系统中的应用,将不断为嵌入式系统增添新的魅力和发展空间。(5)嵌入式软件开发平台化、标准化、系统可升级,代码可复用将更受重视嵌入式操作系统将进一步走向开放、开源、标准化,组件化。嵌入式软件开发平台化也将是今后的一个趋势,越来越多的嵌入式软硬件行业标准将出现,最终的目标是使嵌入式软件开发简单化,这也是一个必然规律。同时随着系统复杂的提高,系统可升级和代码复用技术在嵌入式系统中得到更多的应用。另外,因为嵌入式系统采用的微处理器种类多,不够标准,所以在嵌入式软件开发中将更多的使用跨平台的软件开发语言与工具,目前,Java语言正在被越来越多的使用到嵌入式软件开发中。(6)嵌入式系统软件将逐渐PC化7 ⑨硕士学位论文MASTER‘STHESIS需求和网络技术的发展是嵌入式系统发展的一个源动力,随着移动互联网的发展,将进一步促进嵌入式系统软件PC化。如前所述,结合跨平台开发语言的广泛应用,那么未来嵌入式软件开发的概念将被逐渐淡化,也就是嵌入式软件开发和非嵌入式软件开发的区别将逐渐减小。(7)融合趋势嵌入式系统软硬件融合、产品功能融合、嵌入式设备和互联网的融合趋势加剧。嵌入式系统设计中软硬件结合将更加紧密,软件将成为其核心。消费类产品将在运算能力和便携方面进一步融合。传感器网络的迅速发展,将极大的促进嵌入式技术和互联网技术的融合。(8)安全性随着嵌入式技术和互联网技术的结合发展,嵌入式系统的信息安全问题日益凸显,保证信息安全也成为了嵌入式系统开发的重点和难点。2.1-3运行于嵌入式系统上的软件嵌入式系统经过多年的发展,在很多领域已经变得和普通计算领域的体系结构非常类似,除了一些使用8位单片机的系统,很多系统使用的都是具备MMU的32位处理器,具备了运行很多操作系统的硬件基础。而且随着功能需求的增加,嵌入式系统所要完成的任务也越来越多。这些都给嵌入式系统的软件系统提出了挑战。现在的嵌入式系统,已从仅仅只是运行一段代码段的单片机,演变成为了具备和桌面PC具备相同功能的复杂系统,其软件层次也和其他计算环境一样分为三层:操作系统层,基础软件层,应用软件层。嵌入式系统往往是针对某一种特定的应用而设计和开发。当应用比较简单,嵌入式芯片的功能也比较简单的时候,往往只需要针对应用开发程序烧写至芯片中即可实现要求的功能,但是随着嵌入式系统的发展,对于系统的功能要求也越来越复杂,嵌入式系统的软硬件的复杂度都相应的增加,这个时候往往采用操作系统来管理硬件,为应用程序的开发提供接口,应用程序直接调用操作系统提供的API,至于硬件的特性,则可以通过操作系统和驱动来实现提供给应用程序。目前比较流行的嵌入式操作系统有Linux,WinCE,vxWorks,Symbian。国内外也有很多嵌入式的操作系统,不过市场占有率都有限。表2.2是几种常见的嵌入式操作系统的一些基本特性比较。8 ⑨硕士学位论文hfASTER‘STHESIS表2-2各种主流嵌入式操作系统的参数\钌ⅥJ|lndowsV)CV怕rksPSOSQNXPaIm0SEPOCLynxOSLinux比拔废\CE\多任务●遗√●遗^,4-多线程-t_-^,^,256个暄^,辰髋先吸可定制404‘^,tt‘内核尺寸最大最小(40KB)(≤128KOMB)OMB)(28KB)(<800K(2MB)(SKB)B)B)分布式XXXXXX●×实时性弱很强强强一般一般一般一般(最大延(延迟4嘲迟4s)硬件要求最高较高较高较高较高较高低中等嵌入式操作系统运行于嵌入式芯片上,不过大多数运行操作系统的嵌入式芯片都是32位,和现在主流的计算机系统一样,这为移植一些PC上的软件到嵌入式系统上提供了很大的便利,特别是嵌入式Linux,大多数嵌入式Linux的发行版都是根据Linux内核裁剪得到,大部分在Linux上运行的软件经过交叉编译都可以移植到嵌入式Linux上。这又为上层的软件开发提供了更大的便利,就连智能手机市场占有率最高的Symbian系统也推出了posix接口移植,以兼容Linux上众多的开源软件。WinCE也是市场占有率很高的一款嵌入式操作系统,以其方便的GUI编程接口和丰富的系统提供类库和文档,在对于需要快速开发和发布产品的项目上有独特的优势。操作系统屏蔽了很多硬件的复杂性和各自的差别,提供给应用程序一个统一的接口,使得程序可以方便的移植,但是对于一些复杂的应用程序来说,通过调用操作系统的接口仍然过于复杂,比如要开发一个和用户进行交互的图形界面人机接口,或者要管理相当多的数据。这个时候就需要使用一些已有的解决方案,也就是基础设施软件。和非嵌入式计算一样,嵌入式要实现一些复杂的功能的时候,一些常被用到的功能被提取出来作为基础软件,比如数据库管理系统,GUI框架,web服务器等等。和操作系统一样,很多非嵌入式领域的软件都有在嵌入式系统上的移植版本。比如GUI框架,QT就有嵌入式的版本,X“也有,WinCE有自带的图形界面系统。9 ⑨硕士学位论文MASTER’STHESIS数据库管理系统也是信息系统的基石,目前大部分的信息系统都是使用数据库管理系统来管理和访问数据的。当嵌入式系统中的数据很多很复杂的时候,使用数据库管理系统来管理和访问数据的需求变得迫切,当前大部分的嵌入式操作系统上都有可以运行的数据库管理系统,WinCE有微软自带的SQLCE,而别的嵌入式系统往往都采用开源的SQLite作为数据库引擎,包括嵌入式Linux,Symbian等。Google新推出的智能手机操作系统android就采用的是SQLite作为数据库引擎,智能手机市场占有率最高的Symbian也同样选择SQLite作为数据库管理软件。这些信息系统的基础软件架构,作为软件栈上的一个重要环节,使得嵌入式系统的功能可以与非嵌入式系统相媲美,同时也大大的提高了嵌入式系统的开发效率和产品上市周期,在嵌入式整个产业链中起着非常重要的作用。嵌入式系统与非嵌入式系统的一个很大不同的特性就是嵌入式产品往往是针对某个应用或者领域设计开发。比如应用于汽车的嵌入式系统就不像我们的PC一样需要安装和卸载各种功能软件,它们只需要完全的实现当初设计的功能就是成功的系统。嵌入式系统往往是为了实现某个应用,软硬结合,就是软件和硬件都是为了实现某个目标功能而特定设计和开发的,这与PC领域硬件和软件的关系不一样。在桌面电脑领域,硬件提供了标准的接口和设备,各种软件在此基础上可以实现各种功能。却不需要关心硬件的设计,硬件的设计也不会依赖于某些软件(一些针对特定应用的工作站除外)。这样一个软硬结合的特性使得嵌入式系统上所安装运行的可能只有一个特定功能的软件,往往是系统上只运行一个应用软件,并且不需要安装和卸载,作为产品的一个部分一起发行的。当然也有一些嵌入式系统具备安装和运行别的应用软件的功能,比如智能手机。在嵌入式系统进入32位,具备运行类桌面操作系统以前,大部分的软件功能都需要为每个系统开发基础软件模块,需要处理内存管理,进程调度,数据管理和访问等等功能,但是在使用了操作系统之后,可以使用基础软件,开发就和开发一个桌面应用程序类似了,以前只有桌面开发才能使用到的便捷也可以为嵌入式软件的开发所用了。当然一些针对性能和资源要求苛刻的领域仍然使用编译为一个二进制执行文件的方式,但是随着摩尔定律的发展,嵌入式系统的硬件环境越来越PC化,运行操作系统所付出的资源变得相对越来越小。10 ⑨硕士学位论文MASTER‘STHESIS2.2移动嵌入式数据库概述作为本文研究的对象⋯.“移动嵌入式数据库”是由其运行环境和应用的上下文共同决定的一个概念。如果仅仅是运行在嵌入式设备上的数据库,或者仅仅是数据载体会移动的数据库,都不能称作移动嵌入式数据库,这样的应用往往不会有同步数据的应用要求。为了清晰的表述该词所表达的概念和应用场景,下面就几个概念做出简单阐述。2.2.1嵌入式数据库嵌入式数据库不是一个严格的无二义性的概念,它至少有以下两种上下文语境。~种表示数据库与程序的关系,一种表示数据库所在的计算环境。在第一种语境的定义是:“嵌入式数据库是指运行在本机上、不用启动服务端的轻型数据库,它与应用程序紧密集成,被应用程序所启动,并伴随应用程序的退出而终止。”p1在第二种语境中,运行在嵌入式设备上的数据库管理系统称作嵌入式数据库。在第一种语境下,嵌入式数据库与非嵌入式数据库的差别,在于运行模式的差别,而并不是运行在嵌入式手持设备上的数据库就是嵌入式数据库。理论上讲,嵌入式设备一样可以运行网络数据库的服务端程序。嵌入式数据库在数据库领域的语义中的“嵌入”一词的意思是指可以很简单方便的被应用程序所使用,而不是像网络数据库上作为一个很完整的应用程序,与应用程序问的交互往往通过网络数据的传送来实现。当然,像所有的数据库系统一样,嵌入是数据库系统往往会提供一个sheIl来实现简单的命令行或者图形界面形式的管理工具。此处“嵌入”一词和嵌入式系统一词中的“嵌入”表达的是不同的意思,嵌入式系统的嵌入表示的是计算环境是嵌入式系统。当然大多数的嵌入式数据库都可以运行在嵌入式系统之上。比如SQLite作为一款嵌入式数据库,在PC上运行的时候是作为嵌入式数据库运行的,当在嵌入式系统比如在一个智能手机上运行的时候就是运行在嵌入式系统上的嵌入式数据库,此时它符合两种语境中的“嵌入”。如果做第二种意思解,嵌入式数据库就是指在嵌入式系统上运行的数据库管理系统。在本文中,嵌入式数据库所指为第二种语义。2。2。2移动数据库随着移动通信、互联网、数据库、分布式计算等技术的发展,移动计算技术使计算机或其它信息智能终端设备在无线环境下实现数据传输及资源共享,它的 ⑨硕士学位论吏作加是将有用、准确、及时的信息提供给任何时间、任何地点的任何客户。这将极大地改变人们的生活方式和工作方式。在传统计算中得到广泛应用的数据库技术在移动计算领域刷样有若广泛的需求和应用。移动计算使得计算机或其他信息设备在没有与固定的物理连接设备相连的情况F能够传输数据。而所谓移动数据库就是指支持移动计算环境的分布式数姑库,通常应用在诸如掌上电脑、PDA、车载设备、移动电话等嵌入型设备中。2.2.3移动嵌入式数据库及其特点嵌入式移动数据库就是运行于嵌入式系统之}的移动数据库。这就对系统提出了一定的要求,首先要适应尽量复杂的嵌入式计算环境,,口能面临有很多种的嵌入式处理器,不同的主存和辅存系统,不同的网络环境。虽然运行于嵌入式系统之上,但是嵌入式移动数据库仍然要具有ACID的特性,才能算的上是完整的现代数据库系统。由于大多数移动设备都是嵌入式系统,所以我们说的移动数据库往往指的就是嵌入式移动数据库,可是也有移动数据库不定运行于嵌入式系统之上的情况,比如一个移动的手提式电脑P面运行的数据库,数据是移动的,可是手提电脑一般并不归入嵌入式系统。本文后面所说的移动数据库均指运行于嵌入式终端上的移动数据库。存储管理移动设备中的数据往往只是移动数据库的一个基本功能,事实上大部分的移动数据库都是作为一个大的集成系统中的一个组成部分的,比如物流系统的送货员手持终端,如果不把数据尽快上载到信息中心中去,那么就不会对整个系统起到太大的作用,所以从这个意义上说移动数据库不仅仅是运行在嵌入式设各上的一个软件,还需要和服务器端的软件结合工作。典型的移动数据库解决方案如ORACLE公司的产品架构如图2一l~¨口ellentMobl⋯⋯ft⋯⋯⋯r『司一圉;藿三一孥鼍.,匡|\喹,≮。曦‘,“圈瞄.-。趣-了『_蕊嚼震丽笼意而] ⑨硕士学位论文MASTER’STHESIS此架构分三部分,第一部分为移动终端,在终端硬件之上运行着Oracle的嵌入式数据库软件。移动终端最内层为OracleLite数据库,其上有同步层,然后通过应用程序和同步服务器通信。此架构中加入了硬件负载均衡,这是一个可选组件,并不影响同步服务器的软件逻辑。第三部分就是中心数据库了,此图中当然是ORACLE的数据库系统。要提供移动应用的解决方案,往往一个移动数据库是不够的,还需要和同步服务器同步,用中心数据库存储系统的数据才能够完成应用系统的要求。再上图中包括了甲骨文公司的移动解决方案需要的主要组件:移动数据库,移动端的同步层组件,同步服务器和中心数据库。更详细的功能模块分解交互图见下图:MobileSvncMobileSewerDatabalseserverClientln\.-嗄OracleO越abuse,絮Mobile.//长基牛q 蓣l、、、\jM融ob泌ile。S。e叫rver。蓬UeUSyncIelS丛笪整签巴‘Geuler,ltof&l/潮Oc褂e人iConsok晰tO,,\。鼍二:二≯\黯U 遵。l’tq自UBUeS图2-2移动数据库系统解决方案包含的三个部分从上图可见移动解决方案中,同步系统占据非常重要的地位,一般在商业解决方案中,数据同步是作为其中的一个组件和移动数据库一同提供的。这足见同步功能是移动数据库管理系统的不可或缺的组成部分。2.3移动嵌入式数据库的同步系统23.1移动数据库的应用场景对于移动应用来说,移动设备的网络连接往往远不如桌面PC的连接舒畅,更不如服务器。网络是有时在线,有时不在线的,在线的时候也存在很大中途中断的可能。这种网络环境下的应用往往称为偶尔连接的应用程序一OCA13 (OccasionalConnectedApplication)。目前的各大数据库提供商的嵌入式数据库和数据库I司步系统也就是针对这种计算环境和网络环境的。这种偶尔连接的应用程序成为主要应用情形的现实原因包括以下几个方面:(1)移动设备的电力供应往往由电池供应,如果出现电力不够的情况就不得不停机,自然不可能在线。(2)移动设备的网络连接常常是无线通信差,速度也比较低。(3)移动设备的网络连接赞H{往往比较贵候才连接更加经济。使用的信道和通信环境都比较常常按照流量计贽。需要的时(4)用户不定会永远开机,在一些场景下移动设各的使用者可能会关机,自然也不能保证设备在线。既然移动数据库的计算环境只能提供偶尔连接的网络连接,那么如何利用偶尔连接的网络传输重要的数据就是移动嵌入式数据库同步系统所要做的工作了。移动数据库系统所处的计算环境和网络环境相对复杂,爿i过分析可能的应用场景和网络结构,仍然可以划分移动数据库系统中的应用场景的拓扑结构。如以下三幅图所示:囤2.3直接同步结构⋯ 嘏固锱溪一禹 以上图示很清晰的展示了不同的同步方式,其中第一种直接同步结构是最常见的应用场景。第二种多层的同步结构是第一种的扩展,中间层的数据库既是同步终端,也是同步服务器和中心数据库。第三种则比较复杂也少见,终端与终端的同步有很多种方式,不完全是网络同步。总而言之,以上三种系统应用场景包括了大部分的移动数据库应用场景。第一种是最常见,也是本文所关注的应用场景,本系统目前版本也只适用于该种场景。移动数据库的同步系统,作为这种偶尔连接的应用的情形,是不可或缺的软件组件,本文下面的内容将阐述如何设计和开发一个应用于SQLite的同步系统,并补上各大商业数据库厂商具备但是SQLite没有的功能模块。16 ⑨硕士学位论文M人STER‘STHESIS3一个基于SQLite的嵌入式移动数据库的同步系统设计3.1SQLite作为移动嵌入式数据库SQLite是一款开源的数据库引擎,它具有代码小,使用内存小,零配置,支持SQL,具备ACID特性,可移植性好等特点。作为一款嵌入式数据库,它被作为很多应用程序的内部数据存储解决方案以取代简单的文件读写,同时它由于其易移植和代码小巧占用空间小等特点,在嵌入式设备上有广泛的应用部署。特别是在采用ARM核:签片和嵌入式LINUX的嵌入式设备上,SQLite是不二的选择,虽然SQLite也可以在其他的嵌入式操作系统上运行,比如WINCE,但是在ARM.LINUX上的应用更广泛,毕竟WINCE有自带的嵌入式数据库SQLServerCompact。但是在集成系统中,SQLite缺乏同步的功能,要实现同步功能需要自行实现,这都为项目技术选型带来了一定的风险考虑,而且在开源领域目前还没有普遍使用的SQLite同步模块,如果开发一个具备一定通用性的SQLite同步模块,定会为技术选型时为开源嵌入式Linux方案加分。3.2移动嵌入式数据库同步系统的特点和本系统的目标应用环境3.2.1基于SQLite的移动数据库同步系统的目标应用场景嵌入式系统的计算环境不像普通PC那样统一,有些设备或者资源在部分系统中没有,说明系统运行的基本要求很有必要。对于本系统,硬件要求为具有ARM9以上或类似的具有MMU,可以运行WINCE,Linux,Symbian等类型的操作系统的CPU,具备网络连接,具有系统时间的嵌入式设备。软件方面则要求SQLite3.6以上版本,Linux2.6内核的嵌入式Linux版本,或者其他类似嵌入式操作系统。系统可能的应用场景有基于智能手机的GPRS,3G网络连接终端,消费类电子手持设备,也可以运行于工业商业应用的设备。3.2.2基于SQLite的移动数据库同步系统之目标目前现有的商业嵌入式数据库和同步系统有好几种,但是所提供的功能都类似,参照已有的移动数据库管理系统的同步功能,考虑现实能力,本系统定义以下几点预期达到的目标:17 ⑨硕士学位论文MASTER’STHESIS1.系统针对的是应用上下文主要是OCA(偶尔连接的应用程序),因为这种应用在移动应用中占据很大比例。2.系统要能够实现与中心数据库服务器的双向数据同步,但是不实现终端之间的同步,终端通过与中心数据库同步来应用更新来实现大系统的数据更新,同时也通过与中心数据库系统的同步来实现本地数据的更新,终端间的数据一致性通过中心数据服务器间接实现。3.系统提供的编程接口要尽量的简单,尽可能多的用配置替代编程,该系统的目的就是一个有可重用性,不同的应用系统都可以使用这个同步模块,与应用耦合越松,接口越简单,系统的可重用性就越高,所以一个简单的编程接口是本系统追求的目标。4.尽可能多的利用现有的开源软件栈来实现功能,首先可以减少系统的开发量,而且现有的系统都是应用成熟,经过实践检验的,对于系统的稳定性有一定的保证。5.从性能上来讲,网络传输的过程中尽量减少传输量,第一能提高传输效率,提升性能,第二是很多应用环境中网络传输是按照流量计费的,越少的网络传输系统的运营成本就越小。6.系统具有跨平台性,在应用中,中心数据库采用哪种数据库厂商的数据库管理系统往往是已经存在的,不能更改,同步服务器最好能够和各种数据库系统通信,来实现数据库的同步,3.3系统的结构分析和模块设计3.3.1系统模块捌分实现一个分布式系统中的移动数据库同步,需要以下四个部分协同工作:移动数据库,同步客户端,同步服务器,中心数据库【311。其中移动数据库和同步客户端运行在嵌入式移动终端上,而且是在一个机器上,同步服务器和中心数据库运行于服务器上,同步服务器可能与中心数据库运行于同一台服务器上,如下图所示,同步服务器也可能运行于单独的服务器上,中心数据库可能是一台也可能18 ⑧硕士学位论文是多台,同步服务器和中心数据库通过高速网络连接图3-】同步服务器和中心数据库在一个服务器图3-2同步服务器和中心数据库为分布式结构上图所示四个模块的功能职责简单描述如下:l移动数据库管理移动终端上的数据,作为应用程序的数据管理引擎。2同步客户端负责记录移动数据库中注册需要同步的数据的变更.上传本地数据库的变更数据,下载中心服务器的最新数据应用到本地数据库。3同步服务器持有到中心数据库的数据库连接,负责处理与同步客户端的连接,将同步客户端上传的变更数据引用到中心数据库,也负责把中心数据库的最新数据传输给同步客户端。蔺霉一一虱由~、懑麓曩』鹾 ⑨硕士学位论文MASTER’STHESIS4.中心数据库维护整个集成系统的数据视图,提供集成系统的数据存储管理方案。这四个部分分为两端,移动数据库和移动客户端是同步的一端,同步服务器和中心数据库是同步的另一端。这两端采用何种策略交互,是系统的关键问题之一o3.3.2数据同步方式分析同步系统的一个最重要的环节就是在同步双方传送数据,根据通信的所采取的策略不同,根据是否采用持续连接和是否将同步行为视作事务操作,数据同步可以有几种方式。f32】数据库的同步可以有以下几种划分方式:等待的和非等待的,所谓等待,或者叫即时的,其实计算机领域往往叫做同步和异步,但是此处为了不和数据库同步的同步混淆,采用了“等待”,“即时”等词汇表达。其表达的是,当一个节点上的数据修改的时候,修改必须等待同步完成后,修改才算成功,调用修改的应用程序才返回,表示修改成功。这种情况下,系统只有很短的时间是处于非一致性的,数据的同步非常的即时,可是这也是非常不现实的一种方案,因为分布式系统中,节点间的异构,网络的保障这些方面的原因都让这个方案非常的难以实际运用,如果网络出现故障,节点修改的数据不能保证传送到所要同步的所有节点上,或者如果某些节点发生故障,不会响应同步请求,这个时候,同步没法完成,修改也就无法完成和返回,系统就有可能没法响应,现实的分布式系统中,基本很少有采用这种方案的,但是这仍然是一种理论上的方案。在数据库集群负载系统中,就是采用的这种类似的方案,写操作被同步到各个读负载分担服务器之后才算完成(在实现中仍然采用了缓存的机制,不是那么的严格),但是那是在各个数据库服务器都在一个局域网上,网络传输有保证的环境中,有别于移动数据库所处的系统环境。 ⑨硕士学位论文MASTER‘STHESIS同逊.厂——、\、、/步中心数据服库务酽\、/器图3.3同步处理数据模式流程图非等待的,或者叫非即时的,异步的同步。在这种方式中,各个节点的修改只要在自己的节点上的数据修改成功就算成功,但是修改的记录会被存储下来,作为同步的依据和数据。当开始同步的时候,发起同步会话,这个会话可以是某个节点由用户的输入触发,也可以是由时间触发,节点间互相交换数据,保证更新到更新会话开始时的最新数据。在数据被修改到数据被同步之间这段时间里,系统的数据是不一致的,但是这往往不会影响系统的逻辑,因为大部分的分布式系统没有那么严格的数据一致性的要求,或者可以通过应用程序,由用户选择其行为。在这样的情况下,嵌入式数据库的同步往往是一批一批的,也就是一批修改积累下来,在接下来的同步会话中被传送,同时也接受系统中别的节点被修改的数据。这往往比起等待式的同步方式有很大的性能提升,因为每次同步过程都能够同步一批数据,一次会话可以传输很多次的修改,面在等待式的同步方案中,相当于每次修改都要被同步,都要发起一次同步会话,而其还是跟系统中所有需要保持一致性的节点发生同步会话。21 ⑨硕士学位论文MASTER’STHESIS图3-4非同步方式处理数据模式流程图以上两种数据库同步的方式,也是分布式系统中常常面对的两种具体方案选择,前者往往对单个节点和节点间的连接的要求比较高,但是对数据一致性的保证更加没有时间延迟和严格。后者则往往适用于节点和节点间的连接都不是太有保证的环境,有着更好的冗余性,而且相对性能也好些。非常适用于移动数据库希望所处的运行环境,单节点的不确定性很大,而且网络连接不是非常有保证,时常是间歇性的网络连接。在同步会话中,也往往有两个方案。第一种是基于连接的事务性的,也就是说和数据库中的事务类似,但是是发生在两个同步节点之间,在传送数据期间,需要保证连接,如果中途连接丢失,就需要回滚,回到发起同步会话前的状态。如果需要同步的修改数据发送到另一段没有被完全插入就丢失了连接,被同步的节点也会回滚到同步会话发生前的状态,也就是说这种会话是基于事物连接的,必须要保证同步会话期间的事物连接不会丢失。Sybase的mobilelink就是基于这种方式的。 ⑨硕士学位论文MASTER‘STHESIS图3.5基于事物的同步数据方案时顺利更新数据的场景图3-6基于事物的同步数据方案时中途出错时更新数据的场景另外一种就是基于非事物的,或者说是基于消息的。把同步数据封装在消息中,每个消息都是单独的一个同步修改数据,一旦消息发送成功就算该条同步数据同步成功。就算一次没有同步完也不要紧,发出去的被同步发起段算做同步,没发出去的等到下次同步会话再发送。23 ⑨硕士学位论文M人STER’STHESIS图3—7基于消息的同步数据方案中的场景这两种方案的区别在于同步的粒度,前者是要把一次会话看作一个事务,相对粒度比较大,但是在很多种移动应用上下文中,很多都不是事务性很强的数据,后一种细粒度的同步方式更加适合这种上下文,就算一次会话中途连接断开了,之前同步了的数据也不会无效,不需要再次同步。在实际实现数据库同步系统中,采用何种方式,都是可以的,关键是应用的场景适用于哪种模型,这基于多方面的考虑。只要符合系统既定的设计目标,那种实现方案都是合适的。结合本系统的目标应用场景和系统预期功能定义,系统采用连接非事务的方式作为同步策略。分析同步两端的数据交互之后分析各个模块的职责功能,分析各个模块的子模块。3.33同步客户端模块分析同步客户端的实现,要有以下几个模块:变更监视模块、网络通信模块、会话管理模块。变更监视模块把移动数据库所做的变更操作(INSERT,UPDATE,DELETE)记录下来,并作为元数据保存起来,作为同步的依据。保存的信息要足够让同步模块能够做到准确的同步。一网络通信模块,使用哪种协议是系统实现的选择,可以采用TCP也可以采用UDP,还可以采用HTTP等应用层协议,也可以自己定义协议,协议要有足够的能力可以与同步服务器通信来实现同步数据的上传下载。网络通信模块同时也要提供 ⑧、‘/硕士学位论文MASTER’STHESIS安全传输的功能,能够加密解密数据。会话管理模块,每一个同步都是一次同步会话。会话的流程和步骤,错误的处理,都需要有充分的考虑和定义。同步会话的逻辑在此处实现。图3-8客户端同步模块3.3.4服务器同步模块同步服务器要连接终端和中心数据库,在两者间除了交换信息外还要处理多客户端连接的并发,同步冲突的处理等任务。如果系统负载比较大,可能还有多服务器均衡负载(balance)的需求。同步服务器包含三个部分:终端连接响应模块,数据库连接模块和系统同步会话逻辑处理模块。同步服务器要处理来自多个终端的连接,并确保每个终端都不必知晓别的终端的同步而独立的执行,也就是说,每个终端的同步信息不能混淆,更不能相互影响。这是一个比较底层的功能,使用现有的软件栈上的技术,往往就具备了这样的模块功能,比如JMS服务器,J2EEweb容器。终端响应模块要处理协议的语义和并行 ⑧\:∑/硕士学位论文MASTER+STHESI$响应终端网络连接,使用一种已有的网络协议,特别是应用层协议,一般都有实现该协议的开源服务器或者模块供采用。数据库连接模块,系统设计的一个目标就是能够与多种数据库同步,那么就不能采用某个数据库的连接API,而必须采用一种统一的数据库连接API,目前ODBC和JDBC是使用得比较广泛的数据库连接API,可供实现同步服务器时考虑采用。同步会话逻辑模块就是实现本系统设计的会话流程和语义的模块了,它负责把接收到的终端数据转换成能够应用与中心数据库的SQL语句来实现终端移动数据库到中心数据库的同步,也负责把中心数据库的最新数据读取出来并发送到同步客户端,来实现终端移动数据库的同步。同步会话逻辑模块的一个很重要的部分就是同步冲突的处理,当多个终端的数据不一致的时候,同步冲突就产生了,如何处理这些冲突,不同的系统可能有不同的处理策略,同一个系统的不同部分也有可能采用不同的同步冲突处理策略,为了达到系统的灵活性和可定制性,同步冲突处理策略最好可以开发一个接口,让用户自己实现策略,从而使该系统具有更好的可重用性。图3-9系统在运行在应用场景中的架构 ⑧\/硕士学位论文M人STER’STIIESIS3.3.5移动数据库和中心数据库对于本系统,移动数据库自然是SQLite,SQLite采用C语言编写,小巧简单,可以运行在绝大多数嵌入式操作系统和设备之上。对于本系统来说,设计同步服务器采用J2EE平台,市面上的绝大多数数据库都可以支持,服务器端的各种操作系统也都支持。本系统的预期目标之一就是具备尽可能多的通用性,则支持多种中心数据库是非常必要的,好在现在已经有ODBC和JDBC这样的通用数据库接口。不需要再单独处理各种数据库平台的差异性。 ⑨硕士学位论文MASTER。STHESIS4基于SQLite的嵌入式移动数据库的同步系统开发4.1数据库同步系统的几个问题和解决方案分析4.1.1分布式系统特有的几个问题分析在系统功能目标定义清楚的前提下,可以根据既定的目标选择合适的技术方案达到所要求的效果,对于已有的软件模块,可以尽量利用整合。对于本系统来说,根据设计的功能和子模块的分析,遇到一些在数据库系统中没有的问题,但是这些问题都是分布式系统所共有的问题,大多数的分布式系统都会遇到这样的几个问题,分析现有的分布式系统的实现原理,可以设计出针对这些问题的解决方法。本节说明了这几个问题和选择的解决方案。1.数据标识闯题数据库系统表中为了标识一条记录,往往会为一个元组设置一个主键(PrimaryKey)以此来标识这行数据,在一般的应用中,往往采用自增的整形作为标识符,每当有数据插入的时候,就取最大值加上增量作为其值,这在运行在~台机器上的数据库中不存在问题,因为每一个具有唯一的数据标识的逻辑数据都在系统中都是一个物理存储与之对应,而在分布式系统中,每个逻辑数据往往在很多节点上都有与之对应的拷贝。一个逻辑数据往往对应多个物理数据,而且在不同的节点发生更新的时候,可能重复使用了主键,假设节点A和节点B都插入了一条记录,当前表的最大ID为100,由于A节点插入的时候并不知道B节点也在插入数据,插入的数据的标识ID为101,同理,B节点的插入的数据的标识也为101,但是B插入的数据和A插入的数据具有不同的意义,那么,对于B节点和A节点上数据标识为101的数据,不是~个逻辑数据在不同节点的物理拷贝,而是逻辑不同的两条数据。当需要扁步的时候就会存在问题,系统就存在不一致性了。~个理想的标识是能够标识分布式系统中的数据,在整个分布式系统中具有唯一性。这样它才能够区分不同的数据,保证系统数据的一致性。一般使用的整数形式的主键标识就在这个时候需要用一种在各个节点使用都能保证数据的一致性的主键标识形式。UUID或称GUID是这种情况的非常好的选择,而且很多分布式系统也都采用UUID作为数据标识的方法。通用唯一识别码(UniversallyUniqueIdentifier,UUID)是一个软件建构的标准,亦为开放软件基金会(OpenSoftwareFoundation,OSF)的组织在分布式计算环 ⑨硕士学位论文MASTER’STlIESI$境(DistributedComputingEnvironment,DCE)领域的一部份。UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识标识。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需考虑资料库建立时的名称重复问题。目前最广泛应用的UUID,即是微软的MicrosoffsGloballyUniqueIdentifiers(GUIDs),而其他重要的应用,则有Linuxext2/ext3档案系统、LUKS加密分割区、GNOME、KDE、MacOSX等。一组UUID,系由一串16位元组(亦称16字节,或128位元)的数字所构成,所以UUID理论上的总数为216X8=2128,约等于3.4x1038。也就是说每纳秒产生l兆个UUID,要花100亿年才会将所有UUID用完。UUID的标准型式包含32个16进位数字,以连字号分为五段,形式为8⋯444.12的36个字元。范例:550e8400.e29b.41d4.a716.446655440000使用UUID作为数据的标识,可以保证每个结点可以互不告知的独立执行INSERT命令,同时不会带来系统数据的不一致性。UUID在很多大型数据库管理系统中也得到大量的采用,SQLSERVER就采用UUID在数据迁移中来标识数据,同样很多大型数据库管理系统都有原生的UUID类型,表可以直接采用UUID类型作为主键来标识数据。在本文所实现的系统中,也选用UUID作为数据标识,虽然SQLite数据库中没有原生的UUID类型,不像很多数据库一样可以方便的获得和存储,但是可以通过自己实现SQLite的函数,通过调用系统函数库产生U-UID,然后作为char类型在SQLite中存储时间同步问题2.时问同步的问题对于新产生的数据(INSERT)需要标识,对于已经产生的数据但是经过更改了的数据同样也需要区分其修改的先后,这在应用冲突处理规则的时候有非常重要的作用。一条逻辑上的数据在多个结点中都有物理拷贝,当不同的节点都对该条数据做了修改(UPDATE)的时候,修改所发生的时间是要记录下来的,本文之系统采用Unix时间戳来记录数据被修改的时间。时间有很多表示格式,选用哪一种需要综合考量,首先,为了传输和存储方便,采用整数型表示时间是比较方便传输和存储的,同时考虑到跨数据库和操作系统的独立性,采用Unix时间戳格式存储时间是比较合适的。Unix时间戳(英文为Unixepoch,Unixtime,POSIXtime或Unixtimestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。Unix时间戳的O按照ISO8601规范为:1970.01—01T00:00:00Z。一个小时表示为Unix时间戳格式为:3600秒;一天表示为Unix时间戳为86400 ⑨硕士学位论文MASTER‘STHESIS秒,闰秒不计算。在大多数的Unix系统中Unix时间戳存储为32位,这样会引发2038年问题或Y2038。1分钟60秒1小时3600秒1天86400秒1周604800秒1月(30.44天_)2629743秒1年(365.24天)31556926秒一个Unix时间戳就是一个整数,在各个节点同样存储,传输时也很方便。需要在用户界面显示时间的时候,可以转换为可阅读的时间格式。3.元数据的存储的问题数据库管理系统管理大量的数据,如表、视图、索引、函数等等这些都需要知道如何管理,也就是要知道这些数据的信息,就是元数据。数据库引擎提供了管理数据的基础,元数据也是数据,同样可以在数据库引擎中管理,基于这一点,很多大型数据库管理系统都是把元数据用一个系统数据库来存放和管理。在SQLServer中是master数据库,在Mysql中是名为mysql的数据库。基于同样的考虑,在管理同步数据时,也有很多关于同步的元数据需要存放和管理,本文之系统也采用数据库本省的表来实现元数据的管理。同步系统相关的表均以sync开头,只要用户不创建以此开头的表名称即可。4.安全问题同步系统中,不同的结点的身份是不同的。中心服务器和终端的功能就不尽相同。终端要与服务器同步数据,获得读取和添加数据的权限就必须验证和获得授权。同时在一些安全要求级别更高的应用中,需要数据在传输的过程中是加密的,而不是明文传输。基于这些要求,本文之系统采用的HTTP方式传送数据,可以实现这些要求,认证是卿协议规范的一部分,同时可以通过HTTPS来传输加密的数据。而且这些功能都有相应的开源代码库,可以很方便的实现,并且可以只需要配置系统,可以透明的实现这些功能。4.1.2数据同步的冲突和规则分析节点上的数据源与目的数据的数据同步时,数据可能发生数据冲突,当一个节 ⑨硕士学位论文MA$TER’STHESIS点与别的节点同步的时候,可能不知道目的节点的副本处于哪一个版本,也许有更新一个已经删除了的数据的同步数据,或者更新一个比自己副本上还新的副本,或者对于不同的角色的节点的数据的采纳优先级不同,A和B的同步数据中针对同一条记录,就算A的数据比B的数据更新时间更新,但是B的优先级没有A的高,也不能取代A所更新的数据,这些都是可能发生的情况,此处称为同步冲突。对于冲突有以下几种可能的处理方法:表4.1处理数据同步冲突可能的情况冲突解决说明是否可用作会话策略或项操作?源胜出源副本始终胜出。支持只读同步解决方案,其中目两者标副本不受信任。与对待任何非冲突变更一样,将此变更应用于目标副本。目标胜出目标副本始终胜出。这支持目标副本不使用由远程两者客户端所进行的变更的情形合并将来自一个项的信息合并到另一个项。将合并源项仅限项操作数据和目标项数据,并将结果应用于目标副本。日志记录冲突供以后处理,而不应用变更。仅限项操作延迟忽略冲突,而不应用变更。交更应用方不将冲突变仅限项操作更传递到目标提供程序。同步冲突的处理,不同的应用需求可能会有不同的要求,有的系统是需要根据时间的新旧来决定数据的有效性,而有的系统可能是根据更新源的角色,如果更新源比已有数据的更新源有更高优先级权重,就用更高优先级更新结点的数据覆盖已有数据。冲突处理的策略和规则若可以留给应用程序实现,则可以使系统更具有灵活性和可扩展性。同步冲突是分布式数据系统非常常见的现象,在移动数据库同步系统中,用户可以通过制定以主数据库数据为主,或者以移动设备上的嵌入式数据库数据为主,来解决主数据库与嵌入式数据库两者之间的数据同步过程中的冲突。如果用户制定以主数据库为主,则当发生同步数据冲突时,系统将根据主数据库数据来更新移动设备上数据库中的数据,而主数据库中的数据不做改动;反之,如果用户指定以嵌入式数据库数据为主,则系统将根据嵌入式数据库中的数据来更新主数据库中的数据,而嵌入式数据库中的数据不做改动。当用户需要进一步对同步冲突进行更为灵活的解决方案时,可以通过实现冲突处理策略,用编程或者声明的方式来实现,当31 ⑨硕士学位论文~【ASTER’STHESIS然前提是同步系统提供这样的接口和实现。4.1.3系统技术方案的选择1.网络传输协议的选择基于IP的网络主要有两种数据传输方式:有连接的TCP方式和无连接的UDP方式。在此之上,还有应用层的协议,一般都在传输的基础上加上了各自的协议语义。本系统要传输同步数据,除了要传输数据外,还有一些交互的语义,还有安全方面的要求。虽然应用层的协议也都是运行于TCP/UDP传输之上,不过对于该系统来说,如果能够采用应用层的能够表达该会话语义的协议要比直接使用TCP或UDP传输要合适得多,可以利用很多已有的设计和实现。通过分析已有的移动数据库的同步客户端的资料,有两种可选方案一Ms和HTTP。JMS(JavaMessageService)是J2EE规范的一部分,用来实现消息队列的传输,它是一种异步的消息传输模式,发送端发送了消息后不必等到回应才返回,发送的消息会被存放到接受端的接受缓冲队列中,排队处理,它支持两种模式:点对点模式(PointtoPoin0和发布订阅模式(Publish/Subscribe)。在本同步系统中,传输也是点对点的——终端和同步服务器,而且消息传输模式也非常适用于第三部分所述小粒度基于消息的传输方案。按照OracleLiteTM的资料,OracleLiteTM就是采用类似JavaMessageQueue的方式传送同步数据。而且一个重要考虑就是JMS是J2EE规范的一部分,所有的J2EE容器都能够支持该协议,同时也有C/C++实现的JMS开源客户端,这使得本系统采用这种方案可能性很高,在实验初期,采用的就是JMS协议,并实现了数据的传输。但是JMS协议中没有包含验证和授权的语义,但是数据库同步系统必不可少的需要验证和授权,特别是基于复杂的网络环境。在JMS规范中,明确之处用户验证和授权的部分由J2EE实现厂商自行扩展,但是如果采用某种特定J2EE服务器扩展的安全方案,就会把系统限制于一种J2EE服务器了,这与系统的目标相违背,所以唯一的方案是自行实现该协议语义,也就是要自行实现该部分的内容,如此~来,第一加大了开发周期和难度,第二自己开发的模块不像已有开源模块那样经过众多用户的反馈修改和实践验证。所以JMS作为一种备选方案,对于本系统的实现也不是完全没有缺点。最终经过实验和权衡本系统的目标,放弃了JMS方案。HTTP(HyperTextTransferProtoc01)超文本传输协议虽然最初只是为了传输文本而设计的协议,但是毋庸置疑它现在是互联网上使用得广泛的协议之一。在第一 ⑨硕士学位论文MASTER‘STHESIS次选择协议的时候就考虑过HTTP协议,可是HTTP协议并非一个消息传递的协议,它是同步的,每一次传送消息都要等到回应调用的程序才能返回。特别是在偶尔连接的网络环境中,如果在发送中途网络断开,就可能会出现问题。在非消息传送的方式下,如果发送的同步数据粒度大,则当中途断开后同步信息就会出现部分传输部分未传输的情况,那么传输的部分都算作无用,如果网络连接频繁丢失就可能带来一定的效率问题。如果传输粒度小,可能带来的闯题是一次连接传送的数据中实际信息在网络传输的数据包中所占的比例小,也会带来性能和网络浪费,如果是按照流量计费的网络环境比如GPRS,则更需要考虑。表4-2JMS和HTTP两种协议的分析底层通讯协议发送模式通讯模式协议有安全语义JMSTCP/UDP异步一对一/一对多无HTTPTCP同步一对一有两种协议都各有优缺点,在最终权衡之后,还是选择了HTTP协议,而为了克服同步粒度大的问题,采用每次同步的行不超过~个N值的方法,N的可值配置,由使用该系统的应用开发程序来设定。可以根据系统运行中网络的状况来调整,系统所要做的就是保证每次的N行的同步数据传送成功,如果没有传送成功就重传,这样不会让之前传送的数据浪费。N值的设置的考虑,考虑如下场景:一个终端要与中心数据库同步,自上次同步以来,已经有M条数据被更改,包括添加(INSERT),修改(UPDATE),删除(DELETE)。那么要完成此次更新要连接的次数L=M/N。假设此次M为1000,把N设置为1000,则L=I,也就是系统要一次完成所有次数的传输,也就是和之前没考虑一次传N条数据的情况一样,这样如果网络不稳定可能带来数据一次难以顺利完全传送的问题,而且会浪费网络带宽。如果设置N=I,那么就是每一次传送一条,需要频繁的与服务器连接,连接本身就是耗费资源的过程,而且传送实际数据在传送的数据包中的比例就会变小,也会带来效率问题和网络资源的浪费。如果N=100,则是lO次传送,这样在网络稳定性好的环境中,就会有比较好的稳定性和效率。如果网络环境差一些,则可以考虑粒度更小,设置N=10。由此可见,N的值可以根据实际情况调整,要考虑的因素包括网络的稳定性,带宽的价格,网络的速度,移动终端的性能,同步服务器的性能等。采用多次传送,一次N行的传送策略带来的一个额外的好处是可以简略的回馈同步的进度。假设传送到第a次,则a/(M/N)就是已完成的百分比。这在需要同步数量较多的数据的时候可以反馈用户进度,避免等待过长让用户焦虑,觉得机器或 硕士学位论文MASTER4STtiESIS者网络或者程序出现了问题,提升用户体验。2.同步服务器方案的选择同步服务器要和多个终端响应会话,需要处理多线程的问题,并且确保各个会话能够同时并行的进行。考虑到网络传输协议采用的是HTTP协议,已有的实现了HTrP协议的服务器非常多,开源的也很多,Apache,Tomcat,IIS。以及任何一种J2EE服务器。同步服务器的一个模块是连接数据库,这也是必须要考虑的问题,在Windows上可以采用ODBC,在Java平台上可以采用JDBC,而Java是跨操作系统的。并且目前的很多企业应用都是基于J2EE平台,所以采用J2EE平台就解决了WEBServer和数据库连接的问题。在选用J2EE平台的前提下,同步会话逻辑模块可以用Java语言实现,因为J2EE容器提供了很多框架,使得程序可以着眼于应用的逻辑而不是处理网络传输等细节问题上。在J2EE平台上响应HmRequest的是servlet。一个Servlet对应一个叫,当有hapResquest这个谢的时候,servlet便会执行。Servlet是多线程的,也就是说可以同时响应多个请求,这非常的符合同步系统中多终端同时同步数据的要求,实现同步逻辑的时候只需要着眼于系统的逻辑,而不需要处理多线程方面的细节了。所以该系统选择J2EE平台作为运行平台。3.网络传输数据的格式选择同步数据要在网络上传输,必须要把要传送的数据打包,特别是数据库的数据,其本身是行列关系结构,串行化为什么格式的序列,如何串行序列,都是要考虑的问题。目前比较流行的串行化方法有三种:二进制格式,JSON格式,XML格式。这几种格式在远程过程调用中都有被采用的例子,其中二进制格式有很多种,Java远程调用的RMI,Adobe的AMF格式等等。二进制格式的一个最大的好处就是数据冗余小,表示格式的内容可以只占数据包的很小比例,不会浪费带宽,但是打包和解包都比较复杂,并且不利于分析调试。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScdptProgrammingLanguage,StandardECMA-2623rdEdition.December1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C蕺Java, JavaScfi北Perl,Python等)。这些特性使JSON成为理想的数据变换语言。XML是eXtensibleMarkupLanguage的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然与二进制数据占用的空问相比,XML占用的空间更多,但XML极其简单并易于掌握和使用。三种格式的对照表格如下(AMF是一种互联网上使用较为广泛的二进制格式):圈4-1三种常用觳据串行化格式的对比根据本系统所要运行的计算和网络情况,XML格式虽然简单方便,但是冗余大.表示格式的数据在整个数据包中所占的比例大,浪费带宽,与系统应用的网络环境不友好,而且解析XML的格式所占用的计算资源在三者中最高,在普通PC机上可能不会有影响,但是同步的终端设备一般都是计算能力有限的嵌入式系统,占用计算资源大就成为严重问题。可以排除XML序列化的方案。二进制格式对于带宽内存的占用都展小,但是二进制格式查看调试都很不方便,并且往往都是专有格式,类库也不丰富,解析也较复杂。JSON格式对计算和带宽的占用居中,但是JSON格式非常简单,它是一种文本格式,查看和调试都很简单,而且解析非常简单,类库丰富。 ⑨硕士学位论文MASTER‘STHESIS权衡了二进制格式和JSON格式,最后选择采用JSON格式作为序列化同步数据的方案。4.1.4系统采用的一些开源模块介绍HTTP传输模块一Curl通过H1vrP协议来传送网络数据,同步客户端需要调用HTTP客户端类库来实现通信,目前已有的可用H1vrP协议客户端有很多,但是因为是要在嵌入式系统上运行,C/C++实现的才可选择,并且不能过于庞大,但是功能也要足够。根据系统的目标,该客户端要支持HTTP协议1.1版本,支持GET’PUT方法,支持HTTPS,支持验证。综合来看Curl是最适合的。项目网址:hnp://curl.haxx.se/同步服务器网络和并发处理模块一OMCAT同步服务器采用J2EE平台,主要是用到WebContainer部分。目前使用最多的是Tomcat。本系统也是以Tomcat为实验平台开发,但是只要是符合J2EE规范的WebContainer都可以运行。项目网址为:http://tomcat.apache.ore,/会话逻辑管理模块——JSR311HTIP协议最初是为文档发布设计的协议,HTTP协议有四个动作原语GET,HEAD,PUT,PoSl’,DELETE。一般W曲浏览器比如m都是使用了GET和POST方法。本系统中使用GET和PUT两种方法(ACTIoN)来上传和下载同步数据。采用的是目前比较流行的I也ST如lWebService,需要使用J2EE规范中JSR311的API。实现了这个规范的开源类库也有提供。关于该java规范的详细信息见:http://jcp.org/aboutJava/communityproeess/edr/jsr311/index.htmlJSON序列化和反序列化模块——譬oogleqson该项目是google公司用于json序列化和反序列化的,goose开源了该项目的代码,该项目的接口非常简单好用,项目地址是:http://code.google.com/p/google—gson/通过使用这些模块,系统需要处理的一些底层细节都可以屏蔽掉了,只需要调用这些模块所提供的功能实现系统所主要关心的核心逻辑,这也是很多开源项目的特点,尽量使用已有的开源软件项目来实现项目的功能。 ⑧\./硕士学位论文MASTER’STtIESI$4.2系统各个模块的具体实现4.2.1数据更改监视模块要同步数据,对于同步客户端来说,首先要知道哪些数据被修改(INSERT,UPDATE,DELETE)了,如果数据库有这样的操作,也就是执行了INSERT,UPDATE,.DELETE的操作,就要记录下来,以备同步之用。在SQLite中,有一个SQLite3_update_hook0接gl函数,它在每次发生INSERT,UPDATE,DELETE操作的时候都会被执行,本系统就是采用这个接口函数来实现对数据更改的监控。代码如下:SQLite3_update_hook(db,update_hook,(void奉)db);update_hook就是被调用的回调函数。不过发现SQLite3,版本3.6.10的一个BUG,当delete语句没有where子句的时候,delete的updatehook失效,没有调用,但是当加上where1=1的时候却可以触发,这一点在写sql语句的时候注意就可以了。经过实验,该接口的具备文档上的行为,但是有一个问题是,用来记录这些更改记录的元数据的数据库也是存放在同一个数据库中的,当更新发生时这些记录元数据的表也会发生更新,又会触发该接口函数,最后导致死循环,所以要在钩子函数中判断该表是否是同步元数据表,考虑到本系统可能的扩充,以“syne”开头的表名都算做本同步系统使用的表,如果是同步元数据表,就不用记录。这.是本系统的一个约定,本系统使用‘‘Sync”开头的表名存放本系统的系统数据,如果使用本系统,则用户定义的数据库中的表的名字不能以“sync”开头。以下代码解决这个问题:charr口2”syne_”;chartable__prefix[6];strncpy(table_prefix:,tableName,5);table_prefLx[5]=’X0’;if(strcmp(r,1table__prefix)!=0)以上代码检测表名字的头五个字符串是否等于syne,如果是,则不运行余下的代码段。.Update_hook函数在数据库发生INSERT,UPDATE,DELETE的时候会被调用,以下C代码为记录数据更改元数据:memset(sql,0,1024);if(modifyType=SQLITE_UPDATEllmodify'Type=SQLITE_INSERT)sprintf(sql,"INSERTINTOsync_record37 ⑨硕士学位论文MASTER’STIIESIS(modify_type,db_name,table_name,uuid,modify_rowid,modify_time)VALUES(%d,’%s’,‘%s’,’%s’,%d,strftime(’%%s’,'now。))",modifyType,dbName,tableName,uuid,rowid);elseif(modifyType—SQLITE—DELETE)sprintf(sql,"UPDATEsync_recordSETmodify_type=9,modify_time=strftime(‘%%s’,’now’)WHEREmodifyrowid=%d",rowid);通过SQLite3的回调函数,数据更改的信息得以记录在元数据表中,作为之后同同步服务器更新的依据。4.2.2元数据存储模块实现数据同步所需的同步信息元数据,也用表的形式保存在相同的数据库中,目前主要是三个表(今后版本升级的时候表的个数和格式可能会有变化)各个表的用途如下:表synerecord:该表主要记录用户表中数据被修改的情况,用以决定用户表中那些数据在同步时是需要传送到服务器端的。表4_2sync_record表存储的元数据意义字段名字段类型字段用途备注ModifyrowiINTEGER记录被修改数据所在表的Rowid是SQLite内drowid标标识表的IDUuidCHAR被修改的数据的主键Modify_typeINTEGER被修改数据是何种修改方式UPDATE,INSERT,DELETE三种Modify_timeINTEGER被修改数据被修改的时间乃6lenameCHAR被修改所在数据的表名字DbnanleCHAR被修改所在数据库的名字表syne_latest_time:用来记录同步会话的记录,用以作为下次更新需要下载的数据的条件。 ⑧\::./硕士学位论文MASTER’STlIESIS表4-3sync—latest_time存储的元数据意义字段名字段类型字段用途备注Sync__typen、ITEGER表示同步完成了那INSERT,UPDATE,DELETE的数据种数据时分批次完成同步的,所以各自有各自的记录。Syne__timeINTEGER数据同步完成的时时间均采用数字表示间乃6lenameCHAR被同步完成的表格的名字表sync_configure:该表记录同步系统要保存的配置数据表4-4syne_configure存储的元数据意义字段名字段类型字段用途备注Login_nameCHAR用于同步服务器的认证Login_passCHAR用于同步服务器的认证SyncurlTEXT访问同步服务器的url地址如果同步服务器的地址改变了可修改该项这个部分的实现C语言代码如下:intSQLite3_sync_config(SQLite3幸corm){SQLite3_exec(conn,"CREATETABLEIFNOTEXISTSsync_record(modifyrowidINTEGER,uuidTEXT,modify_typeINT,modify_timeINTEGER,table_nameTEXT,db_nameTEXT);”,NULL,NULL,NULL);如果不存在记录表则建立记录更改信息的表SQLite3_exec(corm,”CREATETABLEIFNOTEXISTSsyne_latest_time(sync_typeINTEGER,syne__timeINTEGER,table_.nameTEXT);",NULL,NULL,NULL);SQLite3exec(conn,”CREATETABLEIFNOTEXISTSsyne_configure(109in_nameCHAR,login__passCHAR,sync_urlTEXT,fiter——conditionTEXTDEFAULT’1=1’);”,NULL,NULL,NULL);其它两表同理char辜·result;hatr’c;SQLite3一get_table(conn,HSELECT丰FROMsync_configure",&result,&r'&c’NULL); if(r<1)//如果表中没有配置信息则插入默认的配置信息SQLite3exec(conn,"INSERTINTOsyncconfigure(109inname,login_pass,sync_url,fitercondition)VALUES(’green','testpwd','http://localhost:8080/resources/helloWorld','1=1’);",NULL,NULL,NULL);SQLite3_free_table(result);)SQLite3_sync_configure函数初始化同步信息元数据,建立存放同步信息的表。在中心数据库端,同步服务器也建立相应的元数据表,JA、,A代码如下:conn=ds.getConnection0;Statementstmt=conn.createStatementO;sql=”CREATETABLEIFNOTEXISTSsync_record(uuidTEXT,table_nameTEXT,modify_typeINTEGER,sync_timeBIGINT)”;stmt.execute(sql);建立该表,各个同步客户端的同步元数据都存储在syncrecord表之中。4.2.3同步服务器连接中心数据库模块同步服务器要与中心服务器连接从而和同步客户端发送和接受中心服务器中的数据。本系统使用的是Tomcat服务器,配置Tomcat连接池的配置在context.xml文件中。</Context>配置好数据源之后,就可以通过以下代码获得数据库的连接,执行SQL语句了。InitialContextctx=newInitialContext0;40 ⑨硕士学位论文MASTER’STHESISds2(DataSource)ctx.100kup(’'java:comp/env/jdbc/mysql”);conn=ds.getConnection0;4.2.4定义同步数据传送格式在比较了XML,JSON,二进制格式之后,JSON格式是比较合适的一种适中的格式,它既不太耗宽带和解析资源,同时非常易于阅读,利于调试。对于本系统中同步数据的传送,做了一定的格式设计。用于表示一个数据包的JAVA代码如下:publicclassPacketClassrows;//数据集的集合)转换为JSON格式例如{I.table—nameI-.”tablel”,”modify_type”:18,”column—num”:4,”row—num”:1,”columns”:【”UUID”,”LASTMODIFY”,”COLI”,”COL2”】,”rows”:【[”2d36f4cf-1db2-4f67—9029一碉[.a6470376b”,”1240037551It”helloeveryone!”,¨123”】】>从这段JSON数据中就可以看出其表示的意义,该数据包要同步的表式tablel,同步的数据的类型是UPDATE(18为SQLITE定义的SQLITE_UPDATE常量的值),该数据中字段为四个,包含一行待同步的数据,后面的部分就是数据的值。收发两端遵循该格式就可以打包和解包数据,最后存放到数据库中。4.2.5数据的串行化和同步数据从终端数据库到中心数据库,经历的步骤有三个:一是从数据库中取出数据并打包为数据包,二是发送数据包到同步服务器,三是同步服务器解包并转换为SQL语句执行,以将数据写入中心数据库。数据从中心数据库到终端数据库的过程类似。前两个步骤代码如下:从数据库中读取数据i坟modi匆咖e—SQLITE-INSERTlImodi母直pe—SQLITEImDATE)sprinff(sql,"SELECT·FROMtablelwhererowidin(selectmodifyrowidfromsyncreeordwheremodify_type=%d)",modify_type);41 ⑧\:./硕士学位论文MASTER‘STHESISelsesprint坟sql,”SELECTuuid,modify_timefromsyncrecordwheremodify_type=%d",modify_type);打包为JSON格式for(i=0;ifor(i=0;ijson_object_array_add(row_obj,row);printf(”、Il”);>jsofi_objectobjectadd(full_obji,"table_name",table_nameobj);json_objeet_object_add(fullobj,"modify_type”jsonobject_new_int(modify__type));json_object_object_add(full_obj,"column_llum”json_object_new_int(colum_num));json_objectobject_add(full_obj,"rownum”json_object_new_int(rownum));json_object_object_add(full_obj,"columns",column_obj);json_objectobject_add(fullobj,”rows”,rowobj);将数据打包好为字符序列之后通过HT】甲发送至同步服务器curl_easy_setopt(curl,CURLOPt-UPLOAD,1);res2curl_easy_perform(curl);同步服务器接收到数据后要解包和转换为SQL执行@PUT@Consumes(¨application/json”)publicResponseput(Stringcontent)throwsSQLException{Gsongson2newGsonO;Gsonoutjson=newGson0;Stringsql;PacketClasspacket=gson.fromJson(content,PacketClass.class);该方法的标签@PUT和@Consumes('‘application/json'’)表示该方法为响应H1v]曙42 ⑨硕士学位论文MASTER。STHESIS的PUT方法的函数,并且接收的数据的格式是JSON格式。参数Stringcontent就是传入的JSON数据的内容。数据包的JSON内容可以转换为JAVA类实例。Packet类就是代表要同步的数据的内容,通过该实例的数据,组合生成完整的SQL语句执行到中心数据库中。Stringrecord=”INSERTINTOsyncrecord(uuid,table_name,modify_type,sync_time)VALUES(?,?,?,?)”;PreparedStatementpstmt=conn.prepareStatement(record);pstmt.setString(1,row[uuid_index]);pstmt.setString(2,packet.table_name);pstmt.setInt(3,packet.modify_type);Datenow=newDate0;pstmt.setLong(4,now.getTime0);pstmt.executeO;pstmt.close0;数据从中心数据库到终端数据库的过程跟该过程类似。4.2.6返回最新中心数据库数据当同步客户端发送了上传的数据后,就开始下载数据,同步客户端发送上一次完成同步数据的时间,服务器端根据这个时间判断应该发送哪些数据至同步客户端。此处有一点容易引起混淆,数据最后更新的时问和最后同步的时间。此处判断的依据是同步的时间而不是更新的时间。假设A,B为同步终端,C是同步服务器,有一条数据d,最后更新时间为lO日,最后同步时间为12日。也就是说该数据是在A终端上于lO日被修改的,但是在12日A于C同步的过程中才将变更应用到中心数据库上。如果B最近一次与C更新的时间为9日,则两个时间均大于9日,该条数据在A与C同步的集合内,但是如果最后更新日期为11日,则10日小于11,如果比较同步时间与更新时间则会不把该条数据算作待同步数据集合中,而实际上该条数据应该在同步列表中,因为B中的数据是还没有更改的数据。应该比较的是同步时间而不是数据的更新时间。4.2.7安全模块在同步系统中,只有是属于系统节点的数据库才能够访问和上传自己的数据到中心数据库,要保证系统的安全,就必须要认证节点。HTTP协议中,定义了认证方面的部分,Tomcat作为一个实现了HTTP协议的Web服务器,也具备协议中关于认证的部分的功能。 ⑨硕士学位论文MASTER’STHESIS同步系统中,具有同步功能的节点需要通过认证后,才能与中心服务器交换数据,Tomcat和CURL都灵活的支持认证,要达到安全传输的目的,客户端和服务器都设置同一种认证配置,就可以实现基于HTTP协议的安全管理了。在服务器端,根据Tomcat的手册,Tomcat的安全配置如下:在conf/server.xml文件中,配置main0{printf(”helloworld!\n”);)程序输好以后确认无误,保存。进入程序文件所在目录执行:aria—Linux—geehello.c-ohello,如果一切正常,运行命令filehello。如果正常,应该返回:hello:ELF32.bitLSBexecutable,ARM,versionl(ARM),forGNU/Linux2.0.0,dynamicallylinked(usessharedlibs),forGNU/Linux2.0.0,notstripped此处notstripped表示编译得到的程序中包含有调试符号,如果决定最终的发型版本的时候可以用al-nl—Linux—strip工具将其中的调试符号去掉,或者在编译的时候设置优化级别。4.3.3交叉编译SQLite3和本系统交叉编译环境配置好后,在要编译的系统中的Makefile文件中,CC变量由GCC改为arm-Linux。gee,同时注意.I和.L选项,让链接的时候找得到要调用的类库,比如SQLite3,Curl,Json,UUID等系统所需要调用的模块。Linux中的编译有两种,编译为静态模块和动态模块。静态模块是将要调用的类库中的内容编译到最终的生成文件中,动态模块则是不包含要调用的模块中的内容,当程序运行的时候从系统中装载所要调用的模块。编译为静态模块的生成文件要比编译为动态模块的生成文件体积大,动态模块则需要程序所运行的系统中安装有所要调用的模块,否则会发生装载错误,程序无法运行。两种编译方式,各有利弊,如果程序所运行的系统中安 ⑨硕士学位论文MASTER。STHESIS装有所要调用的模块,并且该模块会被多个程序调用,则可以存储和运行空间,而静态模块则少去配置安装系统的麻烦,单个程序直接拷贝到目标机器就可以运行。动态模块和静态模块还有一个重要区别是动态模块可以以二进制的文件格式发布并为别的程序调用,而静态模块则不行,不要获得原类库的源代码才能联合编译,从而调用其内容。表5-2动态模块和静态模块的区别编译为动态模块编译为静态模块生成文件大小小大运行时占用内存小大需要系统巾装有需要调用的模块需要不需要程序的安装相对复杂简单,直接拷贝以不发布源代码的方式发布可以不可以在非嵌入式系统中,绝大多数的模块都采用编译为动态模块的方式,因为很多模块都会被多个程序调J.fj,这样可以节省运行空间和存储空间。但是在嵌入式系统中往往一个系统中所运行的程序的是固定的几个,模块的重用性不高,编译为静态模块反而相对简单。对于本系统,编译为动态模块或者是静态模块可以由最终调用本系统开发集成应用的开发人员根据其嵌入式系统的硬件和应用需求灵活决定⋯.因为本系统提供源代码。49 ⑧\:/硕士学位论文MASTER’STHESIS5.1全文总结5总结和展望本系统实现了一个针对SQLite的数据库同步系统,对于一些系统设计开发中遇到的问题,通过查找文献资料,分析猜测已有同类系统的实现方法,解决了一些关键问题并设计实现了自己的解决方法,主要有:UUID替代整形数据格式作为数据表示、设计表来存储同步信息元数据、采用H1vrP协议传输数据和解决安全认证及加密传输、使用JSON格式作为数据在网络上传输的串行化格式、使用J2EE平台处理系统并发。本系统的开发最初是因为本人在寻找SQLite的数据同步功能时发现没有这方面的开源项目,于是萌发了开发这个系统的想法,对于本人的情况,这的确是一个挑战,国内有很多自主开发的嵌入式数据库同步系统都是重点大学的实验室团队,而本人开发该系统完全是自己一个人查阅资料代码和摸索,能够做出个大致形状,已觉艰难,但从中学习很多,对于SQLite的内部机制和分布式系统的掌握也比以往更加清晰。唯觉该系统还是太过粗糙,不够完善,但开源软件的好处在于人们可以通过分享代码分享思路,只望本项目能够抛砖引玉,让使用SQLite做移动嵌入式数据库的开发者共同分享开源的乐趣,同时也能让开源软件在嵌入式软件领域能够成为集成系统开发商的候选技术方案。5.2研究展望此系统具备了一个针对SQLite3同步的基本功能,算是一个数据库同步系统的原型。适用的同步拓扑结构是对于一个中心多个端点的应用场景。这个系统还是一个原型,要成为一个商业级的系统。还有以下要添加的功能:一个可视化的方便管理的管理系统,比如显示有多少个同步终端同步数据,各个终端同步的记录等等,虽然这些数据在此版本的系统中都记录在中心数据库的日志表中,但是还没有用可视化的方式展现。一个良好的缓存系统和根据系统特点而制定的缓存算法,如果同步客户端很多很频繁,就会造成同步服务器频繁从中心数据库中读写数据,势必造成性能的瓶颈,一个良好的缓存系统是大部分软件系统需要解决性能问题的时候都必须有的,数据库同步系统也不例外。 ⑨硕士学位论文MASTER‘STHESIS参考文献【1】SQLitesite.http://www.SQLite.org,2009.2【2】2SQLServerCompacthttp://www.microsoft.com/Sqlserver/2005/en/us/compact.aspx2009.2【3]Androidhttp://code.google.com/intl/zh—CN/android/2009.2【4】Symbianhttp://www.Symbian.com.cn/Symbianos.htm2009.2【5】OracleDatabaseLite109http://www.oracle.com/technology/products/lite/index.html2009.2【6】Sybaseianywherehttp://www.sybase.com/ianywhere2009.2【7]DB2Everyplacehttp://www.ibm.com/developerworks/cn/data/products/db2e/2009.2【8】MicrosoftSyncFrameworkhttp://msdn.microsoft.com/en-us/sync/default.aspx2009.2【9】维基百科.http://www.wikipedia.org,2009.2【IO]IEEE.http://www.ieee.org,2009.3【ll】冯华.http://blog.mcu01.com/User/fenghua/Article/9809_1.htm,2009.2—6【12】邵佩英编著.分布式数据库系统及其应用(第二版).科学出版社,2005【13】arm嵌入式处理器.http://www.arm.corn,2009.2[14】androidproject.http://code.google.com/intl/zh—CN/android/,2009.2[15】Symbian.http://www.Symbian.corn.cn/,2009.2【16】arm-Linux.http://www.arm.Linux.org.uk/.2009.2【17]j2ee.http://java.sun.com/javaee/,2009.3【18】curlproject.http://curl.haxx.se/,2009.3[19】tomcatproject.http://tomcat.apache.o叫,2009.3【20】LeonardRichardson.RESTfulWebServiees(qb文版)O’ReillyMedia.inc,2008.5【21]jsr311.https://jsr311.dev.java.net/,2009.3【22】google-json.http://code.google.com/p/google-gson/,2009.4【23】uuid.http://emwikipedia.org/wiki/UUID,2009.4【24]guid.http://msdn.microsoft.com/zh-cn/library/system.guid(VS.80).aspx,2009.4[25】timestamp.http://en.wikipedia.org/wiki/Timestamp,2009.4【26】丁治明.移动数据库关键技术研究.中国科学院计算技术研究所博士学位论文,200251 ⑧、I’。——,硕士学位论文MASTER‘STHESIS【27】吴恒山,黄恒明,李东.移动子集的构造方法.华中科技大学学报,2001【28]林怀忠,周波.移动数据库系统视图更新算法研究.计算机工程与应用,2005【29】王宗江,乐嘉锦.Sybase移动和嵌入式数据库的同步技术.中原工学院学报,2002【30】王宇飞.Operd3ASEMini数据同步服务器的设计与实现.东北大学硕士学位论文,2001【31】徐立臻等.SwiftDB:一个支持行业应用的移动数据库系统.应用科学学报,2004.12【32】曹科,钟锡昌,张倪.多版本中央数据库的移动数据库系统并发控制方案.计算机应用研究,2006【33】郭杏荣等.多平台移动数据库系统的自由软件实现,计算机工程与应用.2006[34】陈婵颖等.缓存技术在移动数据库中的应用研究,计算机工程与设计.2006.5【35】李思源.基于GPRS的移动数据库同步机制在电力系统中的应用,浙江大学硕士学位论文.2006.5【36】廖顺和,乐嘉锦.嵌入式数据库SQLite加密方法分析与研究,计算机应用与软件.2008.10 ⑧\/硕士学位论文MASTER’STtIESI$致谢在华师度过了七个春天,这次是真的要毕业了。本科毕业论文似乎没有致谢,所以这次的致谢可能会比较长了,如果您对此不感兴趣,轻松的略过这一段吧。大一的时候,11个人一个寝室,感谢你们用家乡的美食让我带着美好的想象进入梦乡,虽然那些都是第二条件反射。我还记得11个人一起泡着脚丫子一边吃泡面的场景,你们分别是王强,高铭,龚树茂,闻家凤,明庭福,陈仕军,陈小成,李永贞,刘家安,周旋。余嘉同学是唯一不在我们班不在哪个寝室的男生,他是比较特别,当我们11个人还在为一分钟打30个字而奋斗的时候,他早就拥有了IBM360的证书。还要感谢信息技术系的老师们,你们分别是左老师,官老师,王老师,黄老师⋯⋯本科时候逃了很多课,可我仍然从你们哪里学到很多。还有社会学系的老师和03级的同学们,从你们那里我学到了很多人文科学的知识和思考方式,特别是教社会学研究方法的老师,您的课真的讲得很好,虽然我最终因为挂了一门课没能拿到辅修学位,但在那里圆了我高中时代的梦想。我要感谢党委宣传部华中师大在线的老师们,在网站的日子让我的青春闪出了少有的光芒,你们分别是樊老师,曾老师,史老师,感谢你们容忍我当时的不懂事。凯哥,现在你是陈老师了,谢谢你每次的会议发言,它让我明白了很多道理,虽然当时感觉它是那么的冗长。还有孙君意,是你引荐我进入了网站,你是我在华师见到的技术最牛的人之一,虽然你也跟我们也是同一届却比我们牛那么多。袁拮,张磊,块块(田鑫),扬欣,我们也在网站打CS打到深更半夜,也曾为我们的互联网梦想搞程序搞到半夜。还有石剑,王盼,清忠,周焕⋯⋯很多很多在网站的朋友,网站几乎每一个人都是那么的有特点,如果我要把你们的趣事撰写出来估计能有一本书的厚度。在物理学院读研算是圆了高考时候的梦想,当时因为差几分没能进入物理系,物理系的老师都治学严谨,我的导师刘蓉老师上课非常认真负责,在本科时就选了她的课,后来有幸成为她的学生,谢谢您对我的严格指导和容忍我的大大咧咧。黄光明老师技术理论都很厉害,声音洪亮,在一层楼都能听到他的声音,他对学生要求严格,在他实验室里的我终于知道了硬件是个什么东西。二楼实验室的邓健,徐慧平,张凡,茄子,小白,谢谢你们容忍我这个半路出家的研究生问你们一些本科生才问得出口的问题。许凯华老师是拳击高手,还能一字不落的背出杜甫的《出兵行》,您给我们提供了那么好的条件,只怪我们没能做出完全合您设 ⑧\/硕士学位论文MASTER‘STHESIS计的系统出来,真的谢谢您。四楼的同学们,和你们在一起的日子很开心,也学到了很多东西,胡睿,你真的很牛,居然能知道板子启动不了是因为哪根引脚掉进了灰,你也是我见过的唯一能够唱下《死了都要爱》的K歌王子。马新芳,刘畅,严老师,陈海,乔普耀,范越,陈秘⋯⋯还有很多四楼的同学们,和你们侃技术的时候我学到了很多以前从没接触过的东西,谢谢你们毫不保留的把自己知道的告诉我。谢谢徐云强师兄,候向锋师姐,你们对我如弟弟般的照顾和关心让我觉得学校里的同窗之谊真的醇厚芳香。还有活泼可爱的小师妹们,陈婷,黄璐,吴彩虹,你们动静皆宜的性格给实验室带来了巨大的欢乐,特别在此严重感谢陈婷黄璐同学熬夜帮我检查论文的错别字,没有你们我的论文肯定比现在难看很多。感谢我的父母,谢谢你们遗传给我的智商和给我身体,操尽心力的让我开心成长,没有你们,我什么都不是,还有我的亲戚长辈们,你们对我的关心让我觉得更有力量。最后我要感谢我的同学,女友,老婆,亲爱的燕红,感谢华师,让我们相遇相知相爱,因为你的出现,我的生活变得与以往不同。你在人生中最美好的时光用三年来等待读研的我,我会用一辈子的呵护来撰写我的致谢的。挂一漏万,谢谢所有在华师认识和不认识的人们,因为你们我们的学校才会如此精彩和多姿,桂子山才会如此的美好。最后的最后,感谢把我这么哕嗦的致谢读完的老师同学们,真的谢谢你们! ⑨硕士学位论文MASTER’STIIESISI引用头文件附:本系统API使用说明使用系统时,要调用本系统的API接口需要引用本系统的头文件,在代码文件中放置#include”syne_SQLite3.h”,前面可以包含群include也可以不包含,因为在sync_SQLite3.h中定义了如果之前没有包含SQLite3.h就包含之。如果是静态编译,则把sync__SQLite3.c源文件也放置在项目源代码列表中,如果是动态编译则可以先编译sync_SQLite3的动态模块,然后在编译链接的时候包括一lsync_SQLite3选项。2系统配置API系统提供给使用者统一的API接口,主要分为配置部分和同步部分,配置部分主要是设置同步服务器的URL,帐号密码等等。intSQLite3一syncsetuserpwd(char宰usernalTle,char乖password,SQLite3幸conn);该函数设置本地数据库要同步到服务器的认证帐号和密码,参数很简单,前两个分别是用户名和密码,最后一个参数是到数据库的连接,其他函数的最后一个参数同此。intSQLite3_syne_.set_sync__url(char幸syne__url,SQLite3}conn);该函数设置同步服务器的URL,同步系统以此访问同步服务器。若同步服务器的地址有变化或者需要同另外的服务器同步,则需更改其URL。intSQLite3_syne__config(SQLite3+conn);该函数设置同步系统的元数据,该函数只需要调用一次即可,当然如果系统中已有元数据的表,调用该函数后也不会把原来的数据清空掉,不会对系统造成影响。需要说明的是配置信息都是存放在元数据中,也是存放在数据库的表中的,所以在一个程序中的设置会被持久化,而不是仅仅在一个程序中设置,也没有必要每次同步前都需要设置。3数据同步APIintSQLite3_upload_sync(SQLite3掌db,char·table_name,intmodify_type);该函数上传本地数据库更改过的数据信息,第一个参数是数据库的连接,第二个是表的名称,第三个是修改的类型(Ⅵ·DATE,DELTE,INSEI盯)。 ⑨硕士学位论文MASTER‘STIIESISintSQLite3_download_syne(SQLite3}db,char毒tablename,intmodify_type);该函数下载中心数据库更改过的数据信息,第一个参数是数据库的连接,第二个是表的名称,第三个是修改的类型(UPDATE,DELTE,INSERT)。此两个函数的设计,考虑到了同步的粒度,是同步整个数据库还是同步一张表,还是同步一张表中的某种操作的数据,就是同步的粒度的问题,考虑到此系统是为集成系统所调用,选择较小的同步粒度API,可以给用户更大的灵活性,如果要一个能同步整个数据库的API,调用此系统的开发人员可以通过调用这个两个函数来实现一个具备一次调用就同步整个数据库的函数接口。4数据同步服务器配置数据同步服务器是一个运行在web容器中的servlet,使用的时候部署到web容器中即可。同步服务器需要配置的有两部分,一是数据库连接,要选择连接到的数据库,只需要修改server.xml中的数据库连接部分,如何配置见4.5.3部分。二是认证模块的配置,同样只需要修改server.xml中的配置节,具体见4.5.7部分。5系统使用demo在本系统项目主页上有三个下载,一个为同步客户端的代码,一个为同步服务器的代码,一个为使用的简单示例。Demo程序中有以上各个API接口函数的调用。网址为http://code.google.eom/p/sync—SQLite3/ 基于SQLite的移动嵌入式数据库同步系统的研究和开发 作者: 黄东 学位授予单位: 华中师范大学 相似文献(2条) 1.学位论文 丁蓉 嵌入式数据库技术研究 2002 嵌入式数据库系统通常是作为嵌入式系统的应用软件出现的,因此,该文首先详细分析了嵌入式系统与传统计算机系统相比在硬件设备、操作系统 、应用软件等方面所具有的特点.接着,介绍了嵌入式数据库系统的概念、特点以及常用的体系结构.当前,嵌入式数据库技术迅速发展,形形色色的嵌 入式数据库产品在国内外众多应用领域中得到普及.该文从组成结构、系统功能等方面对几个主流嵌入式数据库系统(人大小金灵、东软OpenBaseMini、 SybaseSQLAnywhereStudio等)进行了介绍.在此基础上,分析了嵌入式数据库领域中数据同步、系统定制、系统微型化等方面的先进技术.该文作者参加 了基于PDA的嵌入式数据库管理系统模型的开发工作,并在此基础上完成了该论文.文中着重介绍了该嵌入式数据库管理系统在系统功能、性能、体系结 构等方面的特点,并详细分析了系统的实现过程.最后,对系统开发中涉及的几项关键技术进行了深入探讨,包括数据同步技术、ODBC接口技术、数据词 典的组织和管理等. 2.学位论文 曹力立 基于SYNCML协议的嵌入式设备数据同步技术研究 2005 随着计算机技术的飞速发展和应用领域的拓展,以DB2、Oracle、Sybase、SQL Server等为代表的大型关系数据库系统(DBMS)不断推出新版本。在 数据库应用中一个应用系统所涉及的数据可能存在于不同位置的不同数据库系统中,如何实现异构数据库的数据交换、资源共享、数据的一致性和完整 性成为系统开发和应用中一个尤为突出的问题。另一方面,随着无线、移动设备的高速发展,无线、移动设备上的数据通信被普遍认为是未来五年发展 最快和最热门的业务之一,而移动设备有着轻巧方便、价格相对便宜等诸多优点,人们自然希望计算机数据库中的信息能直接与其交互。 事实上,考虑到无线、移动设备上自身的存储空间,必然选用轻量级的嵌入式数据库;而移动设备可以选择一种通用数据传输协议和方式来与企业 数据库服务器保持数据的同步。本文在分析比较目前国内外流行的数据同步协议的基础上,给出了一种新的基于SyncML协议的通用移动同步模型 (Multiple Database Sync Model,简称MDBSM),并在实际项目中验证,在模拟状态下实现了嵌入式设备上的数据库与远程的企业数据库上的数据同步 。 本文所研究的课题来源于上海松邦电气有限公司“销售业务管理系统”项目。主要在以下几个方面做出了实际的研究工作:总结了目前国内外在数 据同步应用的发展情况,对现有的数据同步产品和数据同步协议进行分析;深入研究了SyncML协议的各组成部分和关键技术,改进原协议的冲突解决设 计;给出并实现了一种应用于同步异构数据库操作的MDBSM模型;最后是同步系统的测试。 通过大量实验数据分析证明,MDBSM模型在完成时间和数据同步响应方面表现出良好的时间优势,较好的满足了一般移动设备和PC服务器之间的异构 数据库数据同步需求,达到了预期的目标,并且该模型具有一定通用性和可移植性。 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1533628.aspx 授权使用:深圳大学图书馆(szdxt),授权号:2ab6a010-0527-4d7e-8d54-9e320170c305 下载时间:2010年11月18日
还剩60页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf