達克江?馬達尼亞提
摘 要:根據(jù)我團隊目前的研究成果做進一步研究,關(guān)于采用非傳統(tǒng)數(shù)據(jù)庫的查詢類程序與采用傳統(tǒng)數(shù)據(jù)庫的同類程序相比較,做其開發(fā)價值、實用性、可行性等方面的探討。
關(guān)鍵詞:PHP;JavaScript;AJAX;正則;實用性;拓展性;傳統(tǒng)數(shù)據(jù)庫;
本文為2015年度新疆警察學院科研基金資助項目研究成果,項目名稱:“公安院校在線成績查詢系統(tǒng)”項目編號:2015JYXSKJ02
我團隊采用純文本作為數(shù)據(jù)庫開發(fā)的成績查詢系統(tǒng)已經(jīng)運行近一年,現(xiàn)該系統(tǒng)提供的服務已覆蓋我院全部在校生,并取得了成功。再次以我團隊成功的開發(fā)經(jīng)驗探討下關(guān)于純文本數(shù)據(jù)庫查詢類程序的效益問題。
1 可行性
(一)PHP讀取文本的相關(guān)函數(shù)
采用PHP腳本語言開發(fā)以TXT文本文檔作為數(shù)據(jù)庫的成績查詢系統(tǒng),其功能、效果及性能終須以PHP對文本文件的處理性能作為核心和基礎(chǔ)。因此PHP對文本文件具體操作的函數(shù)是否豐富,是否能滿足系統(tǒng)最基礎(chǔ)的功能需求是至關(guān)重要的。PHP作為一種非常受歡迎的WEB服務端腳本語言,顯然是能夠勝任的。
在PHP中,為開發(fā)者操作文本提供了非常豐富的函數(shù),有:readfile()、fopen()、fread()、fgets()、feof()、fgetc()等等。
(二)實現(xiàn)文本數(shù)據(jù)庫的“按字段查詢”功能
對于采用傳統(tǒng)數(shù)據(jù)庫開發(fā)的查詢類程序而言,數(shù)據(jù)庫本身就是分字段、分表的存儲,在查詢時更可以通過數(shù)據(jù)庫本身的語言進行相關(guān)表、字段的操作,其程序開發(fā)上可以說是相當簡單。但是對于采用文本文檔替代傳統(tǒng)數(shù)據(jù)庫的查詢類程序而言,當然沒有如此便捷的接口供開發(fā)者調(diào)用開發(fā),這也是大多數(shù)開發(fā)者不愿離開傳統(tǒng)數(shù)據(jù)庫的重要原因。另外如何保障文本數(shù)據(jù)庫查詢程序的性能、維護以及拓展數(shù)據(jù)庫帶來性能損耗都是一系列重要的問題。
我團隊采取的解決方案就在于“數(shù)據(jù)庫”結(jié)構(gòu)的設計,只要能保證文本內(nèi)容采用嚴格的二維結(jié)構(gòu),上述的一些列問題自然迎刃而解。再針對二維結(jié)構(gòu)的文本類數(shù)據(jù)庫,程序采用按行處理條件查詢,從而實現(xiàn)系統(tǒng)條件查詢功能。
(三)實現(xiàn)文本數(shù)據(jù)庫的“按表查詢”功能
1.模擬“按表查詢”的必要性
按行處理的方式實現(xiàn)類似于傳統(tǒng)數(shù)據(jù)庫中字段查詢的功能,并且可以有效避免程序單次查詢時數(shù)據(jù)讀取量過大而導致程序崩潰的問題。但僅僅如此對于實現(xiàn)一個查詢類程序是遠遠不夠的,每個有經(jīng)驗的開發(fā)者都知道,傳統(tǒng)數(shù)據(jù)庫查詢程序中不僅有對字段的查詢操作,還要有對表的查詢操作,解決程序的效率問題,防止程序出現(xiàn)“假死”現(xiàn)象。
2.模擬“按表查詢”的技術(shù)難度
對于實現(xiàn)模擬一個類似于表的操作就需要將文本數(shù)據(jù)庫實現(xiàn)提升一個維度。如何使程序在已知字段數(shù)據(jù)缺少表段數(shù)據(jù)時實現(xiàn)查詢是個客觀問題,中途返回用戶一個詢問或以某種特定的規(guī)則循環(huán)查詢。顯然這兩種實現(xiàn)方式的代價都太大,前者是犧牲的是系統(tǒng)友好性,后者犧牲的是系統(tǒng)性能。
3.我團隊模擬“按表查詢”的方案
我團隊在解決這一問題時,為系統(tǒng)開發(fā)引入AJAX技術(shù)將用戶的兩次交互操作“合并”為了一次,即用戶在表單填寫的過程中會“不知覺”的完成表段數(shù)據(jù)的選擇。這里所謂的“不知覺”是指在不刷新網(wǎng)頁的前提下完成一次客戶端與服務端的交互,從而避免系統(tǒng)有失友好性,同時解決程序?qū)Ρ矶螖?shù)據(jù)的操作需求,提升系統(tǒng)的整體性能,以非傳統(tǒng)數(shù)據(jù)庫查詢程序完善模擬了傳統(tǒng)數(shù)據(jù)庫查詢類程序所必須的基本功能模塊,為系統(tǒng)整體實現(xiàn)奠定基礎(chǔ)。
2 實用性
(一)功能效果
1.前臺界面
我團隊為提升系統(tǒng)友好性,利用PHP強大的客戶端信息采集函數(shù)“$_SERVER[‘HTTP_USER_AGENT]”組件了客戶端分析模塊,主要功能是分析判斷訪問來源即用戶的設備類型,再根據(jù)其不同的設備類型輸出相應的前臺頁面提升對用戶設備的契合程度。
2.反饋系統(tǒng)
我團隊非常重視來自用戶群體的反饋意見,一個團隊的思想是有限的,只有集思廣益才能發(fā)現(xiàn)更多沒有發(fā)現(xiàn)的問題,而只有不斷發(fā)現(xiàn)問題才能將項目做得更好、進步得更快。
反饋模塊的實現(xiàn)就是一個通過表單填寫反饋內(nèi)容,待用戶提交后由系統(tǒng)利用PHPMailer類庫向管理員郵箱賬號(程序后臺設定)發(fā)送郵件的過程。
3.根據(jù)反饋做的優(yōu)化
在二次開發(fā)中,依據(jù)用戶反饋的意見在最終顯示的頁面也加入了AJAX的微表單元素,在用戶查詢完本學期的成績后可通過該HTML元素直接選擇其他學期的成績,避免了用戶重復填寫表單的繁瑣過程,深受用戶好評。
同時,也是經(jīng)過用戶群體強烈要求,加入了我院學生常用的(如假期家校聯(lián)系卡、統(tǒng)一格式實習鑒定表等)文件一鍵加密打包發(fā)送至郵箱等功能,完成了對系統(tǒng)功能的拓展,增強了系統(tǒng)實用性,也提高了代碼復用率(該功能亦用到了PHPMailer類庫,并且根據(jù)學院要求部分文件不能直接提供下載)。
(二)系統(tǒng)速度
在提升系統(tǒng)運行速度等方面我團隊經(jīng)過多次測試,詳細總結(jié)了經(jīng)驗教訓,大致通過以下三個方面提升系統(tǒng)運行速度:
1.編寫學號驗證正則
經(jīng)測試發(fā)現(xiàn),減少程序并發(fā)運行次數(shù),以及減少不必要的、惡意的查詢可大大提升系統(tǒng)運行速度,因此我團隊仔細研究了我院學生的學號定義規(guī)則,根據(jù)實際編寫了驗證學號的正則程序。
采用了JavaScript+PHP的雙重驗證方式,從前后端雙重驗證,完美的解決了非我院學生惡意查詢帶來的不良影響,為系統(tǒng)正常運行提供了雙層保障。
2.AJAX實現(xiàn)多級關(guān)聯(lián)
相對傳統(tǒng)數(shù)據(jù)庫的查詢類程序而言,文本數(shù)據(jù)庫程序的運行效率與數(shù)據(jù)庫文件大小成反比,換句話說就是往后系統(tǒng)會越用越慢,這是文本數(shù)據(jù)庫體積不斷增加的結(jié)果。為避免該類現(xiàn)象的發(fā)生,我團隊采用了AJAX無刷新交互技術(shù)實現(xiàn)了多級文件夾關(guān)聯(lián)篩選,這種數(shù)據(jù)結(jié)構(gòu)同時又是符合我院成績以班級為單位的數(shù)據(jù)類型。
3.少數(shù)民族學生姓名中間的分隔符
分析整理了大量反饋的反饋信息,其中占有很大比值的一部分就是來自少數(shù)民族同學姓名中的分隔符所引起的。在我國,具有55個少數(shù)民族,其中很多少數(shù)民族姓名中都有分隔符( “·”符號)。分析發(fā)現(xiàn),本系統(tǒng)中采用的查詢是有雙條件的即姓名+學號的形式,一般來說姓名和學號的輸錯率不會高于3%,但少數(shù)民族同學輸錯率卻高達35%左右,究其原因就是該符號所引起的,并且在反復的嘗試中會時系統(tǒng)產(chǎn)生大量不必要的并發(fā),在高峰期時所造成的影響是不容忽視的。
鑒于此,我團隊從前端程序和后臺程序雙管齊下,做了一系列的優(yōu)化和規(guī)范措施。
(1)其中針對后臺程序,采用了正則程序加大容錯率:在獲取POST數(shù)據(jù)的第一層接口,加入了正則程序以替換各種預設不規(guī)范的分隔符為正確的分隔符,避免因用戶不清楚分隔符的正確輸入方式而造成查詢失敗,大大提高了少數(shù)民族學生查詢成功率。
(2)在提高了系統(tǒng)后臺程序的容錯率后,為防止出現(xiàn)未預設特殊符號再度引起該類問題,在前臺的表單頁面加入了JavaScript正則程序,即輸入任意不規(guī)則符號便能夠自動校正修改為正確的分隔符。
3 開發(fā)價值
(一)開發(fā)成本
在與同類程序相比較,PHP腳本語言完全免費開源,開源的優(yōu)勢又使其具有非常豐富的拓展類庫,并且入門也比同類語言簡單。
可以說PHP集開放、免費、強大、簡易等諸多優(yōu)點于一身,使其開發(fā)成本在同類程序中更具優(yōu)勢。
(二)應用與維護成本
PHP的運行環(huán)境是Linux服務器,在當前Linux服務器的租賃相對來說比較便宜。并且在本系統(tǒng)中,并未涉及到數(shù)據(jù)庫的使用,因此在數(shù)據(jù)庫服務方面減少開支。就當前社會所流行的快速集成式APP而言,其應用與維護成本更低,相對其他語言更是不二的選擇。
(三)拓展性能
就拓展方面,PHP具有非常豐富而優(yōu)秀的免費類庫,入手也相當容易,在功能拓展方面并不存在太大的問題。又如當前諸多流行應用對PHP都有發(fā)放的接口支持,例:微信平臺對PHP應用開放的接口支持等。
4 對比優(yōu)劣勢
(一)文本數(shù)據(jù)庫的優(yōu)勢
1.成本與效益優(yōu)勢
當前網(wǎng)絡數(shù)據(jù)庫的收費報價都參差不齊,各類套餐五花八門,比如新浪云服務器數(shù)據(jù)庫服務最低報價15元/月、阿里云服務器RDS數(shù)據(jù)庫服務最低報價37元/月等,按均價幾十元算每年數(shù)據(jù)庫支出也近千元。
采用傳統(tǒng)數(shù)據(jù)庫時一般出于數(shù)據(jù)庫安全考慮,都會配購相應的數(shù)據(jù)庫防火墻服務。數(shù)據(jù)庫防火墻服務費用根據(jù)用戶需求及規(guī)模而異,年費用由千元至萬元不等。而文本數(shù)據(jù)庫因其性質(zhì)則不需要此類開支,只要做好網(wǎng)站目錄的相應權(quán)限配置基本可以滿足用戶需求。
2.安全性
注入攻擊又稱SQL注入攻擊,是黑客對傳統(tǒng)數(shù)據(jù)庫進行攻擊的常用手段之一。是由于程序員的水平及經(jīng)驗不足,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使用戶可以提交某些數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。SQL注入攻擊屬于數(shù)據(jù)庫安全攻擊手段之一,會導致的數(shù)據(jù)庫安全風險包括:刷庫、拖庫、撞庫等。
但純文本數(shù)據(jù)庫作為非傳統(tǒng)數(shù)據(jù)庫,自然也就不存在這類安全隱患,因為我們采用的“數(shù)據(jù)庫”它本身就是一個TXT文本文檔,不能執(zhí)行任何代碼,從根源上消除潛在安全隱患,這也是上面所提到的不需要防火墻服務的原因所在。
3.可移植性
可移植性也是文本數(shù)據(jù)庫的一大特點,因其本質(zhì)上就是純文本文檔,在各種平臺及版本升遷過程中所造成的影響可以忽略不計。而傳統(tǒng)數(shù)據(jù)庫的應用程序則做不到,平臺的更換甚至版本遷移都可能導致一些致命錯誤的出現(xiàn),必須得嚴格檢查其數(shù)據(jù)庫接口模塊是否正常工作,因此相對而言文本數(shù)據(jù)庫的可移植性是非常理想的。
(二)相比傳統(tǒng)數(shù)據(jù)庫的劣勢
1.數(shù)據(jù)庫結(jié)構(gòu)不易更改
傳統(tǒng)數(shù)據(jù)庫的好處就是可以在后期程序的升級中重新調(diào)整數(shù)據(jù)庫結(jié)構(gòu),此操作只需將接口模塊重新調(diào)整使其匹配數(shù)據(jù)庫的新結(jié)構(gòu)即可完成。而文本數(shù)據(jù)庫因其本身只是一個文本,不便于結(jié)構(gòu)的更改操作,且數(shù)據(jù)庫結(jié)構(gòu)的改變必然影響到程序的邏輯,不得不對代碼結(jié)構(gòu)進行重新設計,以達到數(shù)據(jù)庫結(jié)構(gòu)與程序直接的匹配關(guān)系。但一般來說只要程序一開始設計時能夠保證其拓展性和良好的性能,后期就并不需要改變數(shù)據(jù)庫結(jié)構(gòu)。
2.批量導入、導出不方便
數(shù)據(jù)庫的數(shù)據(jù)來源一般為EXCEL表格或數(shù)據(jù)庫文件,傳統(tǒng)的數(shù)據(jù)庫都有其完善的導入接口,在批量導入、導出方面有著先天優(yōu)勢。而文本數(shù)據(jù)庫因用戶自己設計的結(jié)構(gòu)不同,操作難度也不同。如果想達到傳統(tǒng)數(shù)據(jù)庫那樣便捷的批量操作,要么由用戶自己設計一款配套的導入導出軟件,要么將數(shù)據(jù)庫結(jié)構(gòu)設計的復合主流數(shù)據(jù)庫樣式,以方便用戶利用其它數(shù)據(jù)庫的對應接口進行操作(亦需要用戶設計一些簡單的輸出程序)。
5 總結(jié)
客觀來講,文本數(shù)據(jù)庫查詢類的程序其利與弊皆有,是否采用仍需開發(fā)者根據(jù)自身需求權(quán)衡決定,若能完善解決采用文本數(shù)據(jù)庫所帶來的諸多問題,其具備的優(yōu)勢仍然不可忽視。
我團隊本著敢于創(chuàng)新的精神和服務學生的態(tài)度,為我院學生定位開發(fā)的成績查詢系統(tǒng)中采用了文本數(shù)據(jù)庫,同時用C#編程語言開發(fā)了相應的數(shù)據(jù)庫導入軟件簡化了數(shù)據(jù)庫批量操作,完善解決了采用文本數(shù)據(jù)庫所帶來的操作不便等問題。當前其簡易的操作和優(yōu)秀的拓展性所帶來的效益是非常明顯的,該系統(tǒng)從測試運行到正式覆蓋全院在校生已近一年,深受同學們的喜愛。
參考文獻
[1]《基于C#的Excel數(shù)據(jù)導入導出研究與實現(xiàn)》.蔡小艷.智能計算機與應用.2014年10月
[2]《基于Excel的平時成績查詢系統(tǒng)設計及實現(xiàn)》.徐慧.軟件導刊. 2014年04期
作者簡介
達克江·馬達尼亞提(1994-),男,新疆維吾爾自治區(qū),本科,職稱,治安學,新疆警察學院。