PHP 50W 条记录 EXCEL 文件导入数据库求指导下方法

2018-04-11 10:33:58 +08:00
 jd186

数据库表有 50W 左右的记录。每条记录有 300 的个的字段。

要以 EXCEL 或者 CSV 形式的文件批量导入数据库。

我用 PHPEXCEL 做导入时一直报错。文件都打不开。求大神指导下。谢谢

5583 次点击
所在节点    PHP
37 条回复
greed1is9good
2018-04-11 10:39:00 +08:00
每条记录 300 个字段。。。。
服。。。
vincenttone
2018-04-11 10:39:57 +08:00
保存成 csv,然后 php 或者 shell 直接读文件,按行读取,别一口气载入内存,读取几百条就往数据库塞一次,没塞进去的记录一下。
jd186
2018-04-11 10:40:10 +08:00
@greed1is9good 确实是这样是一个汽车配件关联表。他 300 多个字段全是配件关联 ID。很奇葩
lbp0200
2018-04-11 10:40:52 +08:00
你为什么不说 PHP 爆出的错误信息?
b821025551b
2018-04-11 10:42:36 +08:00
用 csv 然后按行读文件吧,PHPEXCEL 一下子导入那么多会爆炸的。
yogogo
2018-04-11 11:04:14 +08:00
yield 了解下
YMB
2018-04-11 11:08:10 +08:00
建议解决方案:
1.看看有没有支持将 Excel 转换为 sql 语句的工具。
2.看看有没有支持将 Excel 导入到数据库的工具,不知道 navigate 是否支持。
3.看看有没有工具能分割 Excel,多跑几次。
4.PHP 语言本身没问题,看咋用。
jimmyczm
2018-04-11 11:09:58 +08:00
之前我是用 access 将数据库里面的导出来,再转成相应的文件
cdwyd
2018-04-11 11:12:48 +08:00
必须用 php 吗?
不是的话用 load from 这个数据量很容易
sarices
2018-04-11 11:19:42 +08:00
navicat
lsls931011
2018-04-11 11:20:06 +08:00
使用 PHP 每一次读取几百条记录然后放入 redis 的队列里面, 再使用另外一个 PHP 进程读取 redis 并放入数据库。 如果怕内存暴涨, 可以判断队列长度,等待队列的数据被读取完了, 再放入队列里面,继续工作. 50W 数据你直接使用 PHPExcel 然后 foreach 去读取,php 可能会因为耗时太久报错了
houshengzi
2018-04-11 11:21:32 +08:00
生成器,了解一下
gouchaoer
2018-04-11 11:31:31 +08:00
用 csv 一次读取一部分数据,然后导入数据库
mylopk
2018-04-11 11:32:57 +08:00
mysql load data file,整个文件导入,一条 sql 语句解决
mosliu
2018-04-11 11:39:41 +08:00
不熟悉 php
不过感觉可以用工具来做啊
用 navicat 这个应该没问题。。。
Mac
2018-04-11 12:02:17 +08:00
@b821025551b 没那么恐怖,我 I3 的机器,8G 内存,用 PHPEXCEL 导 5W 条记录,几乎是秒倒的
tomczhen
2018-04-11 12:02:48 +08:00
上传文件,把 CSV / excel 当数据库来操作。
akira
2018-04-11 12:22:18 +08:00
@Mac 加载都不能秒加载吧,何况是导入到库里面。

@jd186 本地想办法把 excel 文件转化成 csv 格式或者处理成 sql,再来做到数据库的导入动作。不要拿着个 php 就到处敲
lianxiaoyi
2018-04-11 12:27:47 +08:00
50 万数据量并不大啊。。。。。就内存稍微大点吧 。加根内存条解决啊。。。。云服务器暂时买一台内存比较大的服务器就好了啊。。。然后用 cli 模式导入。。。。
Mac
2018-04-11 12:38:34 +08:00
@akira 可能是我的列数没他这么夸张,我大概是 10 列。excel 文件里有很多暗桩的,有些\n \r 你导出成 csv 还是有,我就吃过这个暗亏,groupby 出来看上去是相同的,其实是不同的。还是用 php 过滤处理一下比较干净。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/445854

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX