哪个更好?将结果存储在Session或重新查询数据库?

时间:2012-11-17 19:33:58

标签: php mysql codeigniter session

我使用Codeigniter和MySQL进行了测验网站构建。

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

  1. 每次用户提交答案时发送请求。(10个数据库查询10个问题)。
  2. 在测验结束时发送请求。 (这将需要查询和大量计算来搜索来自结果数组的答案。)
  3. 我正在考虑在Session中存储临时(直到测验未提交)数据。

      

    注意:存储的数据不是从数据库直接获取的结果,但是在将其发送到View

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

    这是我得到的最佳解决方案,直到我在Stackoverflow上阅读这几个问题

    Question 1 Question 2 Question 3

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

    是的,它会消耗大量的磁盘空间,但我认为同样会增加网站的性能。

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

1 个答案:

答案 0 :(得分:6)

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

一般来说,不要关心“它要采取多少查询”,至少不要考虑这个特定问题(特别是因为你可能无论如何都要在数据库中存储与会话相关的数据),关心自己“最有意义的是什么。”

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

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

编辑添加:记住,数据库的工作非常简单:存储数据。将它用于它的目的。 ;)