4

我有一个使用 Codeigniter 和 MySQL 构建的测验网站。

测验使用这两种方法进行评估。

  1. 每次用户提交答案时发送请求。(10 个问题的 10 个数据库查询)。
  2. 在测验结束时发送请求。(这将需要一个查询和大量的计算来从结果数组中搜索答案。)

我正在考虑将临时(直到未提交测验)数据存储在会话中。

注意:存储的数据不是直接从数据库中获取的结果,而是在将其发送到 View 之前使用 PHP 处理的数组

通过这样做,我可以在第一种情况下保存 10 个查询。
在第二种情况下,它为我节省了数据库查询和处理数据库结果的时间。

在我阅读 Stackoverflow 上的这些问题之前,这是我得到的最佳解决方案

问题 1 问题 2 问题 3

从上述问题中得到的基本思想是使用数据库查询(由于 KISS 规则,可能会返回陈旧数据)。

是的,它会占用大量磁盘空间,但我认为同时它正在提高网站的性能。

所以我的问题是:
1.“存储计算结果”或“重新查询然后计算结果”哪个更好?
2. 会话将如何影响网站的性能?

4

1 回答 1

7

什么是“更好”实际上取决于您希望网站如何执行。如果用户会话因任何原因丢失,您是否希望忘记部分完成的测验数据?

一般来说,不要关心“它将进行多少查询”,至少不是针对这个特定问题(特别是因为您可能无论如何都将与会话相关的数据存储在数据库中),而要关心“是什么让最有意义的。”

无论如何,对于每个页面请求,您至少要往返一次(可能是几次)数据库,插入/更新正确索引的行的额外查询不会成为问题。当某人的浏览器崩溃或以某种方式(您或他们的错)失去会话时丢失某人的测验结果可能是您更感兴趣避免的事情。

简而言之:您没有提供一个非常有说服力的理由来不将用户答案存储在数据库中,并且可能有几十个(如果不是更多)很好的理由不依赖用户的会话。

编辑补充:记住,数据库的工作很简单:存储数据。将其用于预期用途。;)

于 2012-11-17T19:40:07.277 回答