php中内存使用的问题

df300000 2015-06-24 10:53:32
项目需要从excel中导入大量数据存储到数据库中,一个excel文件大概有9万条数据。

导入数据是需要跟数据库已有的数据进行比对的,存在相同数据依据条件更新,不存在则插入。

目前是用phpexcel把文件转成2维数组,再读取数据库所有的数据,进行比对。

数据库没有的数据会进行sql语句拼接,整个脚本完成后一次性插入,已存在的数据则直接更新掉。

目前遇到的问题是报内存不够的错误
Out of memory (allocated 1126432768) (tried to allocate 67108864 bytes)


memory_limit改成4096M不行,现在改成-1也不行,都是使用了1024M多点就报错。

这种情况该如何解决
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-06-24
  • 打赏
  • 举报
回复
memory_limit 表示的是最大可能使用内存的数量 而实际可使用的数量由操作系统确定 所以仅靠调整 memory_limit 的值是没有用的 phpexcel 提供有多种缓存方式,你可以适合你的业务的方式,以缓解内存不足的矛盾 整个脚本完成后一次性插入,虽然可以加快插入的速度,但这是用内存换来的
傲雪星枫 2015-06-24
  • 打赏
  • 举报
回复
引用 5 楼 df300000 的回复:
[quote=引用 3 楼 fdipzone 的回复:] excel转为csv。每次从csv文件中读取若干行处理
数据量实在太大,逐条处理速度接受不了。所幸用2楼的方法解决了[/quote]
df300000 2015-06-24
  • 打赏
  • 举报
回复
引用 3 楼 fdipzone 的回复:
excel转为csv。每次从csv文件中读取若干行处理
数据量实在太大,逐条处理速度接受不了。所幸用2楼的方法解决了
df300000 2015-06-24
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
memory_limit 表示的是最大可能使用内存的数量 而实际可使用的数量由操作系统确定 所以仅靠调整 memory_limit 的值是没有用的 phpexcel 提供有多种缓存方式,你可以适合你的业务的方式,以缓解内存不足的矛盾 整个脚本完成后一次性插入,虽然可以加快插入的速度,但这是用内存换来的
用phpexcel提供的缓存方法解决了,谢谢。 以前就是取一条数据,跟已有数据比较,更新或插入。 1,2000条数据的小文件还行,这次都是8,9万的大文件,基本上早上上班开始导,到下班1个文件还没好, 所以改成了现在的一次性读取所有数据比较后再拼接sql的方法减少数据库的操作。 实际情况中大约比以前快了14倍,即使这样一个文件还是要1个小时多点
傲雪星枫 2015-06-24
  • 打赏
  • 举报
回复
excel转为csv。每次从csv文件中读取若干行处理
傲雪星枫 2015-06-24
  • 打赏
  • 举报
回复
用csv会占用少很多。 可以把execl分解成多个文件,再处理。 先分割,再逐步处理。这样就不会有问题了。

21,892

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧