我刚加入了一个项目,并且一直在查看代码。我们需要为内部用户将大量数据导出到Excel。大约有5个人可以在给定时间访问此功能。为了输出到Excel,这是我发现的:
显示数据的HTML页面视图
当用户想要导出
时$ _SESSION中的这个存储即使在用户不打算导出时也会发生。这让我觉得非常低效,因为$ _SESSION变量可能会爆炸,因为每个数据库表都有每个表的检索数最多可达30MB,$ _SESSION的过期时间设置为24小时。因此,系统中最多可能有5个用户,最多有150MB $ _SESSION变量。 关于正确的声音?
有没有人见过这样的东西?这是一个盗版Memcache吗?将数据写入每隔几个小时更新一次的平面文件不是最好的吗?
答案 0 :(得分:2)
我会在会话中存储数据库中的一些数据,比如我在每个页面上使用的ID或小对象。
但是当涉及到每个页面加载无法动态提取的更大的数据集时,我通常更喜欢将它们存储在MEMORY / HEAP表(或临时文件)中,并且只需将ID存储在会话,所以我将能够轻松地提取它们。
您可能想看看有关会话最大大小的这个问题: Maximum size of a PHP session
答案 1 :(得分:0)
我也看过这个,这是一个坏主意。有时您希望在屏幕上显示数据表,但也可以将其导出,但没有充分理由填充会话内存。如果操作系统需要交换并且会话被写入文件,则会出现文件IO速度问题,因此在某些情况下,它可能比对数据库的新查询要慢。
答案 2 :(得分:0)
如果要导出,则应该有一个zip函数,它使用相同的SQL读取所有数据,并根据需要将其打包到excel文件中。理想情况下使用MVC,以便可以将相同的代码输入HTML或拉链函数;)
答案 3 :(得分:0)
如果您的数据库不经常更新,您的解决方案可能会有效,否则您的用户可能会收到过时的数据。 (而且我认为无论如何都不值得存储在会话数据中。)
正如您在此处所解释的,我认为您将在局域网中使用此功能,并且您没有超过5个并发用户。如果我说得对,为什么不直接从数据库中读取数据库并在HTML上显示它(我想你可以使用分页而不想在一个HTML页面中显示所有30MB数据)再次导出全部当用户请求数据时直接从数据库到Excel:)