【问题标题】:Data validation optimisation数据验证优化
【发布时间】:2011-04-08 22:59:14
【问题描述】:

我目前正在开发一个学生管理系统,用于跟踪学生和他们上课的学期。我有一个功能允许用户通过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,它是一个新学生,必须创建一个新学生。

如果第二个查询返回真,学生不必再次注册,因为他已经在上学期,如果返回假,学生必须注册所需的学期

【问题讨论】:

  • 你能提供更多关于你需要运行什么样的查询的信息吗?示例代码会有所帮助。
  • 我无法理解为什么有 2 个查询?您是否使用查询验证您的数据?如果不是,那为什么是第二个查询?
  • 为什么要使用查询来验证是否应该使用正则表达式或 php 中的东西来验证?
  • @mcgrailm 查询是检查重复数据,而不是数据格式。
  • 别忘了输入数据可能是非英语语言,所以你必须使用多字节函数来处理输入数据(php.net/manual/en/ref.mbstring.php)。

标签: php mysql validation


【解决方案1】:

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

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

使用这些数据,您可以简单地检查学生是否需要更新或创建。基本上同样的问题可以用来获取已经注册的人。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多