張 翔
(江西財經職業(yè)學院,江西 九江 332000)
Access全名為Microsoft Office Access,是一種由微軟出品的桌面數(shù)據(jù)庫管理軟件產品。雖然其定位不高,只適用于桌面級的中小型應用場合,但是因為它與風靡世界的Office套件聯(lián)系緊密,并且可以輕而易舉地在套件內實現(xiàn)數(shù)據(jù)互通而受到廣大非專業(yè)數(shù)據(jù)庫用戶的喜愛。另一方面,它最大文件體積2GB的限制和較為簡單的數(shù)據(jù)管理功能使得許多專業(yè)用戶不屑一顧,并不像MSSQL或MYSQL那樣專業(yè),具有強大的負載能力和更大的數(shù)據(jù)承載,但是由于學習成本低、管理簡單快速、具備親和力較強的可視化界面等一系列特點,在互聯(lián)網WEB站點的數(shù)據(jù)庫中依然占有一席之地,尤其是在國內使用WINDOWS SERVER系列操作系統(tǒng)的服務器中大行其道,至今仍然是快速開發(fā)和部署輕量級WEB應用的最佳選擇之一。
JET(Joint Engine Technology)的全稱是“微軟Jet數(shù)據(jù)庫引擎”,它是Access的默認數(shù)據(jù)庫引擎。雖然如今JET的地位已經大不如前,并且微軟曾經先后采用MSDE、SQL2005 Express等方案意圖取代JET,并且停止了更新JET,并且在最新的MDAC(MicrosoftData Access Components)中也不再包括JET[1]。JET并不能支持現(xiàn)在廣泛普及的64位系統(tǒng)和硬件,但是對于小型WEB應用來說,在非64位的x86架構Windows Server 2003中仍然是一個快捷且低成本的好選擇。
ACE(Access Connectivity Engine)是微軟2007年以后隨Office套件同時發(fā)布的數(shù)據(jù)庫引擎,它完全向下兼容各種以前的JET版本,它使用了一種新的默認文件格式(.accdb),但是也可以支持使用舊的文件格式(.mdb)。它的改進包括訪問復雜的數(shù)據(jù)類型、多值字段、歷史跟蹤、附件備注等等,同時也支持和改進了與Microsoft Windows SharePoint Services和Microsoft Office Outlook的集成。并且,ACE能夠良好地支持各種64位軟硬件環(huán)境,支持最新的Access2010以及Access2013。
雖然桌面級WEB小型應用并不大強調性能,但是能夠減少硬件負擔和建設成本是所有WEB應用設計者的共同目標,并且國內對新老引擎的性能分析在可查文獻中幾乎沒有,在知網(CNKI)中沒有任何完全相同或者近似的檢索結果,因此對于新老引擎在性能上的分析顯得非常有必要,大量的終端用戶需要了解,從mdb到accdb,從JET到ACE,對于WEB應用來說,性能究竟是進步了還是退步了,雖然用戶一般會認為,新的產品理所當然具有更優(yōu)秀的性能表現(xiàn)。
當前互聯(lián)網后端編程語言種類繁多,為增強測試結果的實用性和典型性,測試采用最流行的PHP(TIOBE數(shù)據(jù),2015年12月)[2]和在國內最簡易普及的ASP作為編程語言。
ASP(Active Server Page)是動態(tài)服務器頁面的英文縮寫,它是微軟公司為取代CGI腳本而開發(fā)的一種語言,具有簡單、快捷、學習成本低等特性,從1996年誕生以來,因為可以使用JavaScript和VBScript這兩種易學的腳本編寫,被大量中小型網站采用,直至替代品ASP.NET出現(xiàn)以后逐步式微,但仍然在國內擁有基數(shù)龐大的用戶。
PHP(Hypertext Preprocessor)是一種開源腳本語言。它吸收了多種語言的優(yōu)點,利于學習,被互聯(lián)網網站廣泛使用,具有速度快、免費、跨平臺、易用等特點,是編程語言活躍耀眼的常青之樹。
當前硬件發(fā)展水平較快,為凸顯測試結果,拉開測試項目之間的差距,硬件環(huán)境不宜過高,故選擇較為陳舊的雙核服務器作為測試的硬件環(huán)境,CPU為XEON E5110 1.6G,RAM只有2G。操作系統(tǒng)為可以同時搭載ASP和PHP運行環(huán)境的Windows Server 2003企業(yè)版,以IIS6.0作為ASP服務端軟件,APACHE作為PHP5.2服務端軟件。
因ACCESS版本眾多,在ACCESS 2003時數(shù)據(jù)格式為.MDB,數(shù)據(jù)引擎為Jet4.0,ACCESSS 2007推出后數(shù)據(jù)格式為.ACCDB,數(shù)據(jù)引擎為ACE12.0。另一方面,Jet驅動不支持.ACCDB格式,但ACE驅動可以兼容.MDB格式[3],所以本測試的數(shù)據(jù)庫及引擎采用MDB+JET,MDB+ACE,ACCDB+ACE三種方式進行組合。測試用數(shù)據(jù)庫均在ACCESS2013的環(huán)境下生成,為模擬真實的應用場景和環(huán)境,數(shù)據(jù)庫內的數(shù)據(jù)內容全部為真實的學生考試報名信息,其數(shù)據(jù)表字段包括:ID、用戶名、性別、身份證號碼、考生號、電話、手機、QQ、第一志愿、第二志愿、服從調劑、地址、學校、簡介、郵件地址。
測試程序:同時采用ASP和PHP編寫,在UML表現(xiàn)上的流程完全一致,且為避免各種差異影響,使用ADO連接數(shù)據(jù)庫對象,再建立記錄集對象以及計時器,然后讀取遍歷數(shù)據(jù)庫中的10 000條記錄并在每條記錄讀取時遍歷15個字段中的每個字段一次,最后結束計時并輸出耗時時間。程序的具體流程分為如下步驟:①建立ADOBE.Connection對象;②建立ADOBE.Recordset對象;③建立Timer;④判斷是否尾記錄,若非尾記錄則遍歷Fields.Value,完成后執(zhí)行Rs.movenext;⑤結束Timer;⑥輸出耗時。
經測試,Access數(shù)據(jù)庫在PHP環(huán)境下,使用Jet和ACE兩種不同引擎進行WEB訪問模擬查詢的結果如下圖所示:
測試使用的時間單位為千分之一秒,即毫秒,時間越長則處理查詢消耗的時間越長,即可以認為是處理越慢,表現(xiàn)越差。MDB+JET平均處理時間為2 168.75ms,MDB+ACE的平均處理時間為2 240.625ms,MDB+ACCDB的平均處理時間為2 221.09375ms。
圖1
Access數(shù)據(jù)庫在ASP環(huán)境下,使用Jet和ACE兩種不同引擎進行WEB訪問模擬查詢的結果如下圖表所示:
圖2
在ASP環(huán)境下,MDB+JET平均處理時間為1 137.5ms,MDB+ACE的平均處理時間為1 289.844ms,MDB+ACCDB的平均處理時間為1 281.25ms。
測試的結果說明:①Access數(shù)據(jù)庫在ASP中的表現(xiàn)比在PHP中的表現(xiàn)更好。雖然一般認為PHP遠比ASP更快更具備效率,但在各自的數(shù)據(jù)庫系統(tǒng)配合下,例如MSSQL+ASP對比MYSQL+PHP。②JET引擎配合舊的MDB格式數(shù)據(jù)庫在速度方面表現(xiàn)最佳。相反,用MDB格式搭配新的ACE引擎,在速度和穩(wěn)定上的表現(xiàn),無論在ASP中還是在PHP中,表現(xiàn)數(shù)據(jù)都是最差的。③ACE引擎配合ACCDB格式數(shù)據(jù)庫表現(xiàn)最穩(wěn)定。雖然在速度上不及舊的格式和舊驅動速度快,但是速度平穩(wěn),波動范圍較小,比新老組合搭配更加具有效率,比舊組合更具備穩(wěn)定性,具有適合WEB應用的獨特優(yōu)勢。
最后,本文的分析缺陷也是客觀存在的,一是測試數(shù)據(jù)浮動較大,在同一硬件條件下只能做到同一批次測試基本數(shù)據(jù)相符,在不同應用場合中可能會有不一致的表現(xiàn)或未可知;二是在安裝ACE驅動前后,舊格式數(shù)據(jù)庫與引擎的速度表現(xiàn)有區(qū)別,驅動安裝之前大約完成一次測試的時間平均在900~1000ms之間,比驅動安裝后似乎更加迅速,這一點有待詳細測試和驗證;三是互聯(lián)網環(huán)境對于測試有影響,隨機產生的訪問會對服務器性能造成影響。但是,總體而言,本文的分析證實了ACE引擎下ACCESS數(shù)據(jù)庫訪問性能的下降,舊的MDB格式配合JET引擎具備更佳的速度表現(xiàn),只是在穩(wěn)定性上略輸于新的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]網易數(shù)碼.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.