数据库表有 50W 左右的记录。每条记录有 300 的个的字段。
要以 EXCEL 或者 CSV 形式的文件批量导入数据库。
我用 PHPEXCEL 做导入时一直报错。文件都打不开。求大神指导下。谢谢

数据库表有 50W 左右的记录。每条记录有 300 的个的字段。
要以 EXCEL 或者 CSV 形式的文件批量导入数据库。
我用 PHPEXCEL 做导入时一直报错。文件都打不开。求大神指导下。谢谢
1 greed1is9good Apr 11, 2018 via Android 每条记录 300 个字段。。。。 服。。。 |
2 vincenttone Apr 11, 2018 保存成 csv,然后 php 或者 shell 直接读文件,按行读取,别一口气载入内存,读取几百条就往数据库塞一次,没塞进去的记录一下。 |
3 jd186 OP @greed1is9good 确实是这样是一个汽车配件关联表。他 300 多个字段全是配件关联 ID。很奇葩 |
4 lbp0200 Apr 11, 2018 你为什么不说 PHP 爆出的错误信息? |
5 b821025551b Apr 11, 2018 用 csv 然后按行读文件吧,PHPEXCEL 一下子导入那么多会爆炸的。 |
6 yogogo Apr 11, 2018 yield 了解下 |
7 YMB Apr 11, 2018 建议解决方案: 1.看看有没有支持将 Excel 转换为 sql 语句的工具。 2.看看有没有支持将 Excel 导入到数据库的工具,不知道 navigate 是否支持。 3.看看有没有工具能分割 Excel,多跑几次。 4.PHP 语言本身没问题,看咋用。 |
8 jimmyczm Apr 11, 2018 之前我是用 access 将数据库里面的导出来,再转成相应的文件 |
9 cdwyd Apr 11, 2018 via Android 必须用 php 吗? 不是的话用 load from 这个数据量很容易 |
10 sarices Apr 11, 2018 navicat |
11 lsls931011 Apr 11, 2018 使用 PHP 每一次读取几百条记录然后放入 redis 的队列里面, 再使用另外一个 PHP 进程读取 redis 并放入数据库。 如果怕内存暴涨, 可以判断队列长度,等待队列的数据被读取完了, 再放入队列里面,继续工作. 50W 数据你直接使用 PHPExcel 然后 foreach 去读取,php 可能会因为耗时太久报错了 |
12 houshengzi Apr 11, 2018 生成器,了解一下 |
13 gouchaoer Apr 11, 2018 用 csv 一次读取一部分数据,然后导入数据库 |
14 mylopk Apr 11, 2018 mysql load data file,整个文件导入,一条 sql 语句解决 |
15 mosliu Apr 11, 2018 不熟悉 php 不过感觉可以用工具来做啊 用 navicat 这个应该没问题。。。 |
16 Mac Apr 11, 2018 @b821025551b 没那么恐怖,我 I3 的机器,8G 内存,用 PHPEXCEL 导 5W 条记录,几乎是秒倒的 |
17 tomczhen Apr 11, 2018 via Android 上传文件,把 CSV / excel 当数据库来操作。 |
18 akira Apr 11, 2018 |
19 lianxiaoyi Apr 11, 2018 50 万数据量并不大啊。。。。。就内存稍微大点吧 。加根内存条解决啊。。。。云服务器暂时买一台内存比较大的服务器就好了啊。。。然后用 cli 模式导入。。。。 |
20 Mac Apr 11, 2018 @akira 可能是我的列数没他这么夸张,我大概是 10 列。excel 文件里有很多暗桩的,有些\n \r 你导出成 csv 还是有,我就吃过这个暗亏,groupby 出来看上去是相同的,其实是不同的。还是用 php 过滤处理一下比较干净。 |
21 moro Apr 11, 2018 用 Navicat,可以直接导入 excel |
22 heretreeli Apr 11, 2018 Navicat +1 |
23 fortunezhang Apr 11, 2018 我一般是用 python 读取 excel 文件,然后一次读取一条,组织成 sql,写入一个 sql 文件中,然后 mysql source 一下。 |
24 Bisn Apr 11, 2018 Perl |
25 yujieyu7 Apr 11, 2018 估计是一次性读取入内存做写入的,这个数据量,一个字段 10 字节,都 50w*300*10B,小 1.4g 。 自己写个脚本,一行行的读取导入吧 |
26 wingoo Apr 11, 2018 load data 最快的 |
27 xiaoyang7545 Apr 11, 2018 直接 navicat 可以的话就 navicat,如果实在需要 php。请分段用 csv。用 xls 的格式+phpexcel 效率非常低下。你这个估计是超出内存限制了。 |
28 tegic Apr 11, 2018 |
29 lihongjie0209 Apr 11, 2018 forkjoin thread pool 了解一下. 本质上也是切割文件然后多线程插入数据库. |
30 silencefent Apr 11, 2018 干嘛不用工具呢,mysqlfront 十分钟之内搞掂 |
31 liujinsong668 Apr 11, 2018 生成器,了解下 |
32 wwww961h Apr 11, 2018 用工具吧,最简单了,navicat |
33 ericgui Apr 12, 2018 |
34 DavidNineRoc Apr 12, 2018 via Android 使用 excl 转化成 csv,现在很多数据库可以直接把 csv 转成表,变成表之后再做字段的修改之类的 |
35 dy7338 Apr 16, 2018 数据库可以直接导入 excel 格式的 |
36 jourdon Apr 19, 2018 300 个字段还放一个表里,历害了。。。 |
37 jourdon Apr 19, 2018 用 SplFileObject 来读取吧,几万条写一次,速度很快,我试过 50 万条数据 不到一分钟搞定 |