摘 要:根据我团队目前的研究成果做进一步研究,关于采用非传统数据库的查询类程序与采用传统数据库的同类程序相比较,做其开发价值、实用性、可行性等方面的探讨。
关键词:PHP;JavaScript;AJAX;正则;实用性;拓展性;传统数据库;
本文为2015年度新疆警察学院科研基金资助项目研究成果,项目名称:“公安院校在线成绩查询系统”项目编号:2015JYXSKJ02
我团队采用纯文本作为数据库开发的成绩查询系统已经运行近一年,现该系统提供的服务已覆盖我院全部在校生,并取得了成功。再次以我团队成功的开发经验探讨下关于纯文本数据库查询类程序的效益问题。
1 可行性
(一)PHP读取文本的相关函数
采用PHP腳本语言开发以TXT文本文档作为数据库的成绩查询系统,其功能、效果及性能终须以PHP对文本文件的处理性能作为核心和基础。因此PHP对文本文件具体操作的函数是否丰富,是否能满足系统最基础的功能需求是至关重要的。PHP作为一种非常受欢迎的WEB服务端脚本语言,显然是能够胜任的。
在PHP中,为开发者操作文本提供了非常丰富的函数,有:readfile()、fopen()、fread()、fgets()、feof()、fgetc()等等。
(二)实现文本数据库的“按字段查询”功能
对于采用传统数据库开发的查询类程序而言,数据库本身就是分字段、分表的存储,在查询时更可以通过数据库本身的语言进行相关表、字段的操作,其程序开发上可以说是相当简单。但是对于采用文本文档替代传统数据库的查询类程序而言,当然没有如此便捷的接口供开发者调用开发,这也是大多数开发者不愿离开传统数据库的重要原因。另外如何保障文本数据库查询程序的性能、维护以及拓展数据库带来性能损耗都是一系列重要的问题。
我团队采取的解决方案就在于“数据库”结构的设计,只要能保证文本内容采用严格的二维结构,上述的一些列问题自然迎刃而解。再针对二维结构的文本类数据库,程序采用按行处理条件查询,从而实现系统条件查询功能。
(三)实现文本数据库的“按表查询”功能
1.模拟“按表查询”的必要性
按行处理的方式实现类似于传统数据库中字段查询的功能,并且可以有效避免程序单次查询时数据读取量过大而导致程序崩溃的问题。但仅仅如此对于实现一个查询类程序是远远不够的,每个有经验的开发者都知道,传统数据库查询程序中不仅有对字段的查询操作,还要有对表的查询操作,解决程序的效率问题,防止程序出现“假死”现象。
2.模拟“按表查询”的技术难度
对于实现模拟一个类似于表的操作就需要将文本数据库实现提升一个维度。如何使程序在已知字段数据缺少表段数据时实现查询是个客观问题,中途返回用户一个询问或以某种特定的规则循环查询。显然这两种实现方式的代价都太大,前者是牺牲的是系统友好性,后者牺牲的是系统性能。
3.我团队模拟“按表查询”的方案
我团队在解决这一问题时,为系统开发引入AJAX技术将用户的两次交互操作“合并”为了一次,即用户在表单填写的过程中会“不知觉”的完成表段数据的选择。这里所谓的“不知觉”是指在不刷新网页的前提下完成一次客户端与服务端的交互,从而避免系统有失友好性,同时解决程序对表段数据的操作需求,提升系统的整体性能,以非传统数据库查询程序完善模拟了传统数据库查询类程序所必须的基本功能模块,为系统整体实现奠定基础。
2 实用性
(一)功能效果
1.前台界面
我团队为提升系统友好性,利用PHP强大的客户端信息采集函数“$_SERVER[‘HTTP_USER_AGENT’]”组件了客户端分析模块,主要功能是分析判断访问来源即用户的设备类型,再根据其不同的设备类型输出相应的前台页面提升对用户设备的契合程度。
2.反馈系统
我团队非常重视来自用户群体的反馈意见,一个团队的思想是有限的,只有集思广益才能发现更多没有发现的问题,而只有不断发现问题才能将项目做得更好、进步得更快。
反馈模块的实现就是一个通过表单填写反馈内容,待用户提交后由系统利用PHPMailer类库向管理员邮箱账号(程序后台设定)发送邮件的过程。
3.根据反馈做的优化
在二次开发中,依据用户反馈的意见在最终显示的页面也加入了AJAX的微表单元素,在用户查询完本学期的成绩后可通过该HTML元素直接选择其他学期的成绩,避免了用户重复填写表单的繁琐过程,深受用户好评。
同时,也是经过用户群体强烈要求,加入了我院学生常用的(如假期家校联系卡、统一格式实习鉴定表等)文件一键加密打包发送至邮箱等功能,完成了对系统功能的拓展,增强了系统实用性,也提高了代码复用率(该功能亦用到了PHPMailer类库,并且根据学院要求部分文件不能直接提供下载)。
(二)系统速度
在提升系统运行速度等方面我团队经过多次测试,详细总结了经验教训,大致通过以下三个方面提升系统运行速度:
1.编写学号验证正则
经测试发现,减少程序并发运行次数,以及减少不必要的、恶意的查询可大大提升系统运行速度,因此我团队仔细研究了我院学生的学号定义规则,根据实际编写了验证学号的正则程序。
采用了JavaScript+PHP的双重验证方式,,从前后端双重验证,完美的解决了非我院学生恶意查询带来的不良影响,为系统正常运行提供了双层保障。
2.AJAX实现多级关联
相对传统数据库的查询类程序而言,文本数据库程序的运行效率与数据库文件大小成反比,换句话说就是往后系统会越用越慢,这是文本数据库体积不断增加的结果。为避免该类现象的发生,我团队采用了AJAX无刷新交互技术实现了多级文件夹关联筛选,这种数据结构同时又是符合我院成绩以班级为单位的数据类型。
3.少数民族学生姓名中间的分隔符
分析整理了大量反馈的反馈信息,其中占有很大比值的一部分就是来自少数民族同学姓名中的分隔符所引起的。在我国,具有55个少数民族,其中很多少数民族姓名中都有分隔符( “·”符号)。分析发现,本系统中采用的查询是有双条件的即姓名+学号的形式,一般来说姓名和学号的输错率不会高于3%,但少数民族同学输错率却高达35%左右,究其原因就是该符号所引起的,并且在反复的尝试中会时系统产生大量不必要的并发,在高峰期时所造成的影响是不容忽视的。
鉴于此,我团队从前端程序和后台程序双管齐下,做了一系列的优化和规范措施。
(1)其中针对后台程序,采用了正则程序加大容错率:在获取POST数据的第一层接口,加入了正则程序以替换各种预设不规范的分隔符为正确的分隔符,避免因用户不清楚分隔符的正确输入方式而造成查询失败,大大提高了少数民族学生查询成功率。
(2)在提高了系统后台程序的容错率后,为防止出现未预设特殊符号再度引起该类问题,在前台的表单页面加入了JavaScript正则程序,即输入任意不规则符号便能够自动校正修改为正确的分隔符。
3 开发价值
(一)开发成本
在与同类程序相比较,PHP脚本语言完全免费开源,开源的优势又使其具有非常丰富的拓展类库,并且入门也比同类语言简单。
可以说PHP集开放、免费、强大、简易等诸多优点于一身,使其开发成本在同类程序中更具优势。
(二)应用与维护成本
PHP的运行环境是Linux服务器,在当前Linux服务器的租赁相对来说比较便宜。并且在本系统中,并未涉及到数据库的使用,因此在数据库服务方面减少开支。就当前社会所流行的快速集成式APP而言,其应用与维护成本更低,相对其他语言更是不二的选择。
(三)拓展性能
就拓展方面,PHP具有非常丰富而优秀的免费类库,入手也相当容易,在功能拓展方面并不存在太大的问题。又如当前诸多流行应用对PHP都有发放的接口支持,例:微信平台对PHP应用开放的接口支持等。
4 对比优劣势
(一)文本数据库的优势
1.成本与效益优势
当前网络数据库的收费报价都参差不齐,各类套餐五花八门,比如新浪云服务器数据库服务最低报价15元/月、阿里云服务器RDS数据库服务最低报价37元/月等,按均价几十元算每年数据库支出也近千元。
采用传统数据库时一般出于数据库安全考虑,都会配购相应的数据库防火墙服务。数据库防火墙服务费用根据用户需求及规模而异,年费用由千元至万元不等。而文本数据库因其性质则不需要此类开支,只要做好网站目录的相应权限配置基本可以满足用户需求。
2.安全性
注入攻击又称SQL注入攻击,是黑客对传统数据库进行攻击的常用手段之一。是由于程序员的水平及经验不足,没有对用户輸入数据的合法性进行判断,使用户可以提交某些数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。SQL注入攻击属于数据库安全攻击手段之一,会导致的数据库安全风险包括:刷库、拖库、撞库等。
但纯文本数据库作为非传统数据库,自然也就不存在这类安全隐患,因为我们采用的“数据库”它本身就是一个TXT文本文档,不能执行任何代码,从根源上消除潜在安全隐患,这也是上面所提到的不需要防火墙服务的原因所在。
3.可移植性
可移植性也是文本数据库的一大特点,因其本质上就是纯文本文档,在各种平台及版本升迁过程中所造成的影响可以忽略不计。而传统数据库的应用程序则做不到,平台的更换甚至版本迁移都可能导致一些致命错误的出现,必须得严格检查其数据库接口模块是否正常工作,因此相对而言文本数据库的可移植性是非常理想的。
(二)相比传统数据库的劣势
1.数据库结构不易更改
传统数据库的好处就是可以在后期程序的升级中重新调整数据库结构,此操作只需将接口模块重新调整使其匹配数据库的新结构即可完成。而文本数据库因其本身只是一个文本,不便于结构的更改操作,且数据库结构的改变必然影响到程序的逻辑,不得不对代码结构进行重新设计,以达到数据库结构与程序直接的匹配关系。但一般来说只要程序一开始设计时能够保证其拓展性和良好的性能,后期就并不需要改变数据库结构。
2.批量导入、导出不方便
数据库的数据来源一般为EXCEL表格或数据库文件,传统的数据库都有其完善的导入接口,在批量导入、导出方面有着先天优势。而文本数据库因用户自己设计的结构不同,操作难度也不同。如果想达到传统数据库那样便捷的批量操作,要么由用户自己设计一款配套的导入导出软件,要么将数据库结构设计的复合主流数据库样式,以方便用户利用其它数据库的对应接口进行操作(亦需要用户设计一些简单的输出程序)。
5 总结
客观来讲,文本数据库查询类的程序其利与弊皆有,是否采用仍需开发者根据自身需求权衡决定,若能完善解决采用文本数据库所带来的诸多问题,其具备的优势仍然不可忽视。
我团队本着敢于创新的精神和服务学生的态度,为我院学生定位开发的成绩查询系统中采用了文本数据库,同时用C#编程语言开发了相应的数据库导入软件简化了数据库批量操作,完善解决了采用文本数据库所带来的操作不便等问题。当前其简易的操作和优秀的拓展性所带来的效益是非常明显的,该系统从测试运行到正式覆盖全院在校生已近一年,深受同学们的喜爱。
参考文献
[1]《基于C#的Excel数据导入导出研究与实现》.蔡小艳.智能计算机与应用.2014年10月
[2]《基于Excel的平时成绩查询系统设计及实现》.徐慧.软件导刊. 2014年04期
相关推荐
[吴伟华] 关于广场舞文化发展的探讨
[灵惠] 关于加强群众文化建设几点建议
[茹玉岭] 关于汉语“把字句”与日语「を格」连语的对比研究
[柯媛媛] 关于完善生态环境法治建设促进生态环境保护工作
[杨炳龙] 关于私有财产的民商法保护探讨
[万显伦] 关于初中数学生活化教学策略浅析
[姚婕] 关于建立动物防疫档案管理对策分析
[孙艳丽 齐万昌] 关于航海英语教学改革的探讨
[魏巍] 关于推进城建档案管理信息化的思考
[顺玉] 关于农机社会化服务体系建设的讨论
[李春茂] 关于基层党组织书记队伍建设的思考
[童世华] 关于如何做好我国科普图书的思考与探索
[敖丽梅] 关于幼儿数学教学的探讨
[黄永明] 关于对中等职业学校《计算机组装与维护》课程教学改革
[孟丽群] 关于信息技术发展影响下的高校图书馆信息素质教育的研