数据验证优化

时间:2011-04-08 13:43:13

标签: php mysql validation

我目前正在建立一个学生管理系统,跟踪他们上课的学生和学期。我有一项功能允许用户通过Excel文件导入数据。

通过这个过程我验证数据的有效性(无效的字符,电子邮件等),我检查数据库的重复,看看学生是否存在和/或已经上课。为了实现验证,我必须为每个学生运行两个查询,如果我只需要同时管理250名学生(每个查询平均运行0.004秒),这也不错。听众接近500名学生时,问题就开始形成。整个验证过程大约需要2.5秒。

在我的书中,如果只出现一次就没有问题,但每次通过顺序导航加载数据时都会发生这种情况,因为我允许用户在导入之前查看数据(每页显示30个数据)并且可以编辑它们

绕开这个瓶颈的最佳方法是什么,或者我应该让它成为用户的警告?

达到最大可扩展性的最佳方法是什么?

编辑:

在我的申请中,我将学生和他们参加的学期分开。 我运行的第一个查询是检查学生是否存在。如果它是新学生,那么它将创建一个新学生,否则学生的数据会更新。

第二个查询用于检查学生是否已经参加了我尝试添加他的学期。如果他已经参加,他将被排除在进口之外。

验证过程如下:

Trim white space
Strip html tags

check email validity
check if the semester for which I try to register him is a valid semester (ie : w11 for winter 2011)
check if the province is a valid canadian province

// first query
check for birthday, first and last name in the database 
// second query
check if the student is already registred for the semester in the database

前三项检查必须为真有效输入

如果第一个查询返回true,则学生存在,数据必须更新,如果返回false,则必须创建新学生和新学生。

如果第二个查询返回true,则学生不必再次注册,因为他已经参加了学期,如果返回false,则学生必须在所需的学期注册

2 个答案:

答案 0 :(得分:1)

时间可能花费在进行查询而不是改组数据上。也许您可以通过遍历批处理中的所有学生并构建一个查询来启动脚本,从而导致学生已经定义,例如:

SELECT student_id FROM student WHERE student_id IN (student, ids, from, your, batch, file)

使用该数据,您可以检查学生是否需要更新或创建。基本上同样的问题可以用于获得已经注册的人。

答案 1 :(得分:0)

我对整个过程并不完全清楚,但是你说用户可以编辑数据(在初始导入和验证之后?)为什么要重新运行整个验证,而不仅仅是验证编辑过的记录?