我使用Codeigniter和MySQL进行了测验网站构建。
使用这两种方法评估测验。
我正在考虑在Session中存储临时(直到测验未提交)数据。
通过这样做,我可以在第一种情况下保存10个查询 在第二种情况下,它为我节省了数据库查询和处理数据库结果的时间。注意:存储的数据不是从数据库直接获取的结果,但是在将其发送到View
之前,它是使用PHP的已处理数组。
这是我得到的最佳解决方案,直到我在Stackoverflow上阅读这几个问题
Question 1 Question 2 Question 3
从上述问题得到的基本思想是使用数据库查询(因为KISS规则,可能会返回陈旧数据)。
是的,它会消耗大量的磁盘空间,但我认为同样会增加网站的性能。
所以问题就是:
1.哪个更好的想法“存储计算结果”或“重新查询然后计算结果”?
2.会议将如何影响网站的性能?
答案 0 :(得分:6)
什么是“更好”取决于您希望网站的执行方式。如果用户会话因任何原因丢失,您是否希望忘记部分完成的测验数据?
一般来说,不要关心“它要采取多少查询”,至少不要考虑这个特定问题(特别是因为你可能无论如何都要在数据库中存储与会话相关的数据),关心自己“最有意义的是什么。”
无论如何,对于每个页面请求,您至少要一次(也可能是几次)往返数据库,插入/更新正确索引的行的另一个查询不会成为问题。当他们的浏览器出现问题或者以某种方式失去他们的会话(你的错误或他们的错误)时,丢失某人测验的结果可能是你想要更有兴趣避免的。
简而言之:您没有提供非常令人信服的理由不将用户答案存储在数据库中,并且可能有数十个(如果不是更多)理由不依赖于用户的会话。
编辑添加:记住,数据库的工作非常简单:存储数据。将它用于它的目的。 ;)