【问题标题】:Store sql results in session? Is this ok?在会话中存储 sql 结果?这个可以吗?
【发布时间】:2015-06-20 06:05:00
【问题描述】:

我正在一个网站上工作,我使用会话登录我的用户并存储他们的搜索结果(最多 480 行,18 列 - 编辑:gzcompress 后大约 35KB 的数据)

这就是我的工作:

$_SESSION['results_cache']= gzcompress(serialize($results),2); 

当我需要阅读它时:

$results = unserialize(gzuncompress($_SESSION['results_cache']));

我需要这样做,因为我的结果永远不会相同,它们是按日期排序的,并且可以高频率更新。 所以要浏览不同的页面而不弄乱结果,我需要保存结果。

我不确定我的方式是否正常,我不确定它如何与 100 000 个用户一起使用(我很乐观:)。

如果有人可以给我他们的意见。

【问题讨论】:

  • 480 行没什么好说的。序列化数据会有多大?您不想在会话中填充(比如() 10 gigs blob 数据。有 100,000 个用户,这对存储空间的要求会有点重...
  • 我想对于 100 000 名用户来说,这更像是 3.5GB 的数据。如果它太重了,那么有什么好的解决方案呢?我想不出别的了。无论如何,它会占用一些磁盘空间。
  • 35kb 压缩在磁盘方面并不多,但它在脚本启动时仍然是一个相当大的打击,每次用户点击启用会话的页面时都会执行此操作。当然,没有更好的选择。另一个主要的方法是简单地存储查询参数并每次重新运行查询,这只是将负载从磁盘上的文件转移到查询命中其他文件在磁盘上。
  • 我也在这样做,我将查询的参数存储到cookie中。实际上,当您到达搜索页面时,如果已存储参数,我会使用它们来刷新搜索结果并直接显示它们(并将新结果保存到会话中)。虽然存储在会话中的搜索结果用于为搜索时的搜索加载更多结果(使用 jquery)。正如我所说,我只能这样做,因为结果随时可能改变。如果我不这样做,我最终会在不同的页面上显示重复的结果,这没有任何意义。

标签: mysql session caching store


【解决方案1】:

好的,这就是我所做的。

由于我有一个可以通过 ID 检索产品的功能,我将搜索结果更改为仅返回必要的列“id”和另外 2 个,它们是在请求中创建的,并且需要对结果进行排序.

意思是我现在有 480 行 3 列,其中仅包含 int (id => int(10), column2 => int(3), column3 => int(1))

Id 当然是一个索引,所以检索一行不需要太多的数据库资源,我每页只显示 12 行。

这样做听起来更好吗?

我现在每页多发出 12 个短请求,但我为每个成员保存了大约 30kb 的数据。

【讨论】:

    猜你喜欢
    • 2015-06-19
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2020-02-02
    • 2016-03-24
    • 2023-03-07
    相关资源
    最近更新 更多