基于WEB应用的Access数据库JET与ACE引擎性能分析
2015-11-25张翔
张 翔
(江西财经职业学院,江西 九江 332000)
Access全名为Microsoft Office Access,是一种由微软出品的桌面数据库管理软件产品。虽然其定位不高,只适用于桌面级的中小型应用场合,但是因为它与风靡世界的Office套件联系紧密,并且可以轻而易举地在套件内实现数据互通而受到广大非专业数据库用户的喜爱。另一方面,它最大文件体积2GB的限制和较为简单的数据管理功能使得许多专业用户不屑一顾,并不像MSSQL或MYSQL那样专业,具有强大的负载能力和更大的数据承载,但是由于学习成本低、管理简单快速、具备亲和力较强的可视化界面等一系列特点,在互联网WEB站点的数据库中依然占有一席之地,尤其是在国内使用WINDOWS SERVER系列操作系统的服务器中大行其道,至今仍然是快速开发和部署轻量级WEB应用的最佳选择之一。
JET(Joint Engine Technology)的全称是“微软Jet数据库引擎”,它是Access的默认数据库引擎。虽然如今JET的地位已经大不如前,并且微软曾经先后采用MSDE、SQL2005 Express等方案意图取代JET,并且停止了更新JET,并且在最新的MDAC(MicrosoftData Access Components)中也不再包括JET[1]。JET并不能支持现在广泛普及的64位系统和硬件,但是对于小型WEB应用来说,在非64位的x86架构Windows Server 2003中仍然是一个快捷且低成本的好选择。
ACE(Access Connectivity Engine)是微软2007年以后随Office套件同时发布的数据库引擎,它完全向下兼容各种以前的JET版本,它使用了一种新的默认文件格式(.accdb),但是也可以支持使用旧的文件格式(.mdb)。它的改进包括访问复杂的数据类型、多值字段、历史跟踪、附件备注等等,同时也支持和改进了与Microsoft Windows SharePoint Services和Microsoft Office Outlook的集成。并且,ACE能够良好地支持各种64位软硬件环境,支持最新的Access2010以及Access2013。
虽然桌面级WEB小型应用并不大强调性能,但是能够减少硬件负担和建设成本是所有WEB应用设计者的共同目标,并且国内对新老引擎的性能分析在可查文献中几乎没有,在知网(CNKI)中没有任何完全相同或者近似的检索结果,因此对于新老引擎在性能上的分析显得非常有必要,大量的终端用户需要了解,从mdb到accdb,从JET到ACE,对于WEB应用来说,性能究竟是进步了还是退步了,虽然用户一般会认为,新的产品理所当然具有更优秀的性能表现。
1 测试条件与测试方法
当前互联网后端编程语言种类繁多,为增强测试结果的实用性和典型性,测试采用最流行的PHP(TIOBE数据,2015年12月)[2]和在国内最简易普及的ASP作为编程语言。
ASP(Active Server Page)是动态服务器页面的英文缩写,它是微软公司为取代CGI脚本而开发的一种语言,具有简单、快捷、学习成本低等特性,从1996年诞生以来,因为可以使用JavaScript和VBScript这两种易学的脚本编写,被大量中小型网站采用,直至替代品ASP.NET出现以后逐步式微,但仍然在国内拥有基数庞大的用户。
PHP(Hypertext Preprocessor)是一种开源脚本语言。它吸收了多种语言的优点,利于学习,被互联网网站广泛使用,具有速度快、免费、跨平台、易用等特点,是编程语言活跃耀眼的常青之树。
当前硬件发展水平较快,为凸显测试结果,拉开测试项目之间的差距,硬件环境不宜过高,故选择较为陈旧的双核服务器作为测试的硬件环境,CPU为XEON E5110 1.6G,RAM只有2G。操作系统为可以同时搭载ASP和PHP运行环境的Windows Server 2003企业版,以IIS6.0作为ASP服务端软件,APACHE作为PHP5.2服务端软件。
因ACCESS版本众多,在ACCESS 2003时数据格式为.MDB,数据引擎为Jet4.0,ACCESSS 2007推出后数据格式为.ACCDB,数据引擎为ACE12.0。另一方面,Jet驱动不支持.ACCDB格式,但ACE驱动可以兼容.MDB格式[3],所以本测试的数据库及引擎采用MDB+JET,MDB+ACE,ACCDB+ACE三种方式进行组合。测试用数据库均在ACCESS2013的环境下生成,为模拟真实的应用场景和环境,数据库内的数据内容全部为真实的学生考试报名信息,其数据表字段包括:ID、用户名、性别、身份证号码、考生号、电话、手机、QQ、第一志愿、第二志愿、服从调剂、地址、学校、简介、邮件地址。
测试程序:同时采用ASP和PHP编写,在UML表现上的流程完全一致,且为避免各种差异影响,使用ADO连接数据库对象,再建立记录集对象以及计时器,然后读取遍历数据库中的10 000条记录并在每条记录读取时遍历15个字段中的每个字段一次,最后结束计时并输出耗时时间。程序的具体流程分为如下步骤:①建立ADOBE.Connection对象;②建立ADOBE.Recordset对象;③建立Timer;④判断是否尾记录,若非尾记录则遍历Fields.Value,完成后执行Rs.movenext;⑤结束Timer;⑥输出耗时。
2 测试结果
经测试,Access数据库在PHP环境下,使用Jet和ACE两种不同引擎进行WEB访问模拟查询的结果如下图所示:
测试使用的时间单位为千分之一秒,即毫秒,时间越长则处理查询消耗的时间越长,即可以认为是处理越慢,表现越差。MDB+JET平均处理时间为2 168.75ms,MDB+ACE的平均处理时间为2 240.625ms,MDB+ACCDB的平均处理时间为2 221.09375ms。
图1
Access数据库在ASP环境下,使用Jet和ACE两种不同引擎进行WEB访问模拟查询的结果如下图表所示:
图2
在ASP环境下,MDB+JET平均处理时间为1 137.5ms,MDB+ACE的平均处理时间为1 289.844ms,MDB+ACCDB的平均处理时间为1 281.25ms。
3 结论
测试的结果说明:①Access数据库在ASP中的表现比在PHP中的表现更好。虽然一般认为PHP远比ASP更快更具备效率,但在各自的数据库系统配合下,例如MSSQL+ASP对比MYSQL+PHP。②JET引擎配合旧的MDB格式数据库在速度方面表现最佳。相反,用MDB格式搭配新的ACE引擎,在速度和稳定上的表现,无论在ASP中还是在PHP中,表现数据都是最差的。③ACE引擎配合ACCDB格式数据库表现最稳定。虽然在速度上不及旧的格式和旧驱动速度快,但是速度平稳,波动范围较小,比新老组合搭配更加具有效率,比旧组合更具备稳定性,具有适合WEB应用的独特优势。
最后,本文的分析缺陷也是客观存在的,一是测试数据浮动较大,在同一硬件条件下只能做到同一批次测试基本数据相符,在不同应用场合中可能会有不一致的表现或未可知;二是在安装ACE驱动前后,旧格式数据库与引擎的速度表现有区别,驱动安装之前大约完成一次测试的时间平均在900~1000ms之间,比驱动安装后似乎更加迅速,这一点有待详细测试和验证;三是互联网环境对于测试有影响,随机产生的访问会对服务器性能造成影响。但是,总体而言,本文的分析证实了ACE引擎下ACCESS数据库访问性能的下降,旧的MDB格式配合JET引擎具备更佳的速度表现,只是在稳定性上略输于新的ACE引擎组合。
[1]Stack Overflow.Difference between Microsoft.Jet.OleDb and Microsoft.Ace.OleDb[EB/OL].Stack Exchange.http://stackoverflow.com/questions/14401729/difference-between-microsoft-je t-oledb-and-microsoft-ace-oledb,2014-3-18.
[2]网易数码.TIOBE 2015年12月编程语言排行榜.[EB/OL].http://digi.163.com/15/1205/23/BA3VIO2K00162OUT.html,2015-12-5.
[3]Microsoft Technet.Use ACE Drivers and PowerShell to Talk to Access and Excel[EB/OL].Hey,Scripting Guy!Blog.http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/04/se-ace-drivers-and-powershell-to-talk-to-access-and-excel.aspx,2011-5-4.