我刚参加了一个项目,一直在复习代码。我们需要为内部用户导出大量数据到Excel中。大约有5个人可以在给定的时间访问这个功能。为了输出到Excel,我发现:
从数据库检索数据,存储在$会话中
显示数据的HTML页面视图
当用户想要导出
从$会话检索数据库数据
在CSV的内存中创建字符串
以Excel作为文件类型打印HTTP头
打印CSV格式的字符串
即使用户不打算导出,也会在$u会话中进行此存储。这让我觉得非常低效,因为$u SESSION变量可能会爆炸式增长,因为每个DB表的检索次数最多可达30MB/表,并且$u SESSION的过期时间设置为24小时。因此,系统中可能最多有5个用户,最多有150MB$u会话变量。听起来不错吧?
有人见过这样的东西吗?这是一个非法的Memcache吗?最好将数据写入一个每隔几个小时更新一次的平面文件中吗?
最佳答案
我确实在会话中存储了一些数据,比如ID或我在每个页面上使用的小对象。
但是当涉及到较大的数据集时,我不能为每个页面加载动态提取它们,我通常更喜欢将它们存储在内存/堆表(或临时文件)中,并且只在会话中存储一个ID,这样我就可以轻松提取它们。
您可能想看看这个关于会话最大大小的问题:
Maximum size of a PHP session