我正在导入一个包含超过5,000条记录的csv文件。目前我正在做的是将所有文件内容作为数组获取并逐一保存到数据库中。但是如果脚本失败,整个过程将再次运行,如果我从数据库中逐一开始检查它们,这将使用大量查询,因此我想将导入的值暂时保存在会话中。
在会话中保留那么多记录是好的实践吗?还是有其他方法可以做到这一点?
谢谢。
在会话中保留那么多记录是好的实践吗?还是有其他方法可以做到这一点?
谢谢。
我认为这不是一个好主意,因为会对每个页面请求进行序列化/反序列化会话数据,即使它们与你执行的操作无关。
我建议使用以下解决方案:
如果发生错误,插入将被回滚,因此您知道可以安全地重新插入而不必担心重复数据。
回答实际问题(有人刚刚问了一个重复的问题,但删除了它以支持这个问题)
默认的会话数据处理程序将其数据存储在临时文件中。理论上,这些文件可以像文件系统允许的那样大。
然而,正如@symcbean指出的那样,会话数据在初始化会话时自动加载到脚本的内存中。这严重限制了您应该在会话数据中存储的最大大小。此外,加载大量数据对性能有巨大影响。
如果您有大量数据需要连接到会话存储,建议使用按当前会话ID命名的临时文件。然后,您可以根据需要处理这些文件,并尽可能在脚本的memory_limit
限制范围内处理。
这取决于操作系统文件大小,无论会话大小如何,每页默认为128 MB。