哪个更好?将结果存储在 Session 中还是重新查询数据库?
Posted
技术标签:
【中文标题】哪个更好?将结果存储在 Session 中还是重新查询数据库?【英文标题】:Which is Better? Store the result in Session or Re-Query the Database? 【发布时间】:2012-11-06 05:02:40 【问题描述】:我有一个使用 Codeigniter 和 mysql 构建的测验网站。
使用这两种方法评估的测验。
-
每次用户提交答案时发送请求。(10 个数据库查询对应 10 个问题)。
在测验结束时发送请求。 (这需要一个查询和大量计算才能从 Resulted 数组中搜索答案。)
我正在考虑将临时(直到未提交测验)数据存储在 Session 中。
注意:存储的数据不是直接从数据库中获取的结果,而是在将其发送到 View 之前使用 php 处理的数组
这样做我可以在第一种情况下保存 10 个查询。 在第二种情况下,它为我节省了数据库查询和处理数据库结果的时间。
在我阅读 *** 上的这些问题之前,这是我得到的最佳解决方案
Question 1Question 2Question 3
从上述问题中得到的基本思想是使用数据库查询(由于 KISS 规则,可能会返回陈旧数据)。
是的,它会占用大量磁盘空间,但我认为同时它会提高网站的性能。
所以我的问题是: 1.“存储计算结果”或“重新查询然后计算结果”哪个更好? 2. 会话将如何影响网站的性能?
【问题讨论】:
【参考方案1】:什么是“更好”实际上取决于您希望网站如何运行。如果用户会话因任何原因丢失,您是否希望忘记部分完成的测验数据?
一般来说,不要担心“它将进行多少查询”,至少对于这个特定问题(特别是因为您可能无论如何都将与会话相关的数据存储在数据库中),关注自己“什么是最有意义的。”
无论如何,对于每个页面请求,您至少要往返于数据库一次(并且可能是几次),插入/更新正确索引的行的额外查询不会成为问题。当某人的浏览器崩溃或以某种方式(您或他们的错)失去会话时丢失某人的测验结果可能是您更感兴趣避免的事情。
简而言之:您没有提供一个非常有说服力的理由不将用户答案存储在数据库中,并且可能有几十个(如果不是更多)充分的理由不依赖用户的会话。
编辑补充:记住,数据库的工作很简单:存储数据。将其用于预期用途。 ;)
【讨论】:
感谢@StudyOfCrying,但是在 Question 表和 Option 表中都有几千行......所以如果访问会话而不是查询数据库会更快。你的意见是什么? 如果您已经优化了查询,那么上千行都不算什么。session
在您的情况下无法替换数据库查询。这是底线。
在你不得不担心它之前不要担心更快——如果你有一个可靠的模式、良好的查询和正确的索引,几千行就不算什么。有很多不同的方法可以使一种或另一种解决方案更快,如果速度是一个问题,还有许多优化途径。 正确设计,不用担心毫秒。
itachi 有它的权利,几千行绝对是微不足道的。如果我们谈论数百万行,我会给出同样的建议。如果您在使用如此小的数据集存储用户问题响应时遇到性能问题,我怀疑是以下两种情况之一:您的模型设计不良或您的表没有正确索引。您是否也没有将会话数据存储在数据库中?如果您依赖用户浏览器中与内容相关的会话数据存储,那您就错了。会话(主要)用于识别用户并将其与内部数据联系起来,仅此而已。
谢谢大家..这真的帮了我很多..你们真的改变了我对会议的看法:) 非常感谢大家。以上是关于哪个更好?将结果存储在 Session 中还是重新查询数据库?的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 模型验证中使用哪个更好:Proc 还是 lambda? [关闭]