基于PHP读取TXT文件向数据库导入海量数据的方法


Posted in PHP onApril 23, 2013

有一个TXT文件,包含了10万条记录,格式如下:

列1       列2       列3   列4   列5
a    00003131    0    0    adductive#1 adducting#1 adducent#1
a    00003356    0    0    nascent#1
a    00003553    0    0    emerging#2 emergent#2
a    00003700    0.25    0    dissilient#1

……………………后面有10万条………………

需求是要导入数据库中,数据表的结构为

word_id   自动增量
word     【adductive#1 adducting#1 adducent#1】这一个TXT记录要转换为3个SQL记录
value     =第三列-第四列;如果=0,则此条记录略过不插入数据表

<?php
    $file = 'words.txt';//10W条记录的TXT源文件
    $lines = file_get_contents($file); 
    ini_set('memory_limit', '-1');//不要限制Mem大小,否则会报错 
    $line=explode("\n",$lines);
    $i=0;
    $sql="INSERT INTO words_sentiment (word,senti_type,senti_value,word_type) VALUES ";    foreach($line as $key =>$li)
    {
        $arr=explode(" ",$li); 
        $senti_value=$arr[2]-$arr[3];
        if($senti_value!=0)
        {
            if($i>=20000&&$i<25000)//分批次导入,避免失败
            {
             $mm=explode(" ",$arr[4]);                
                 foreach($mm as $m)   //【adductive#1 adducting#1 adducent#1】这一个TXT记录要转换为3个SQL记录                 {
                     $nn=explode("#",$m);
                     $word=$nn[0];
                     $sql.="(\"$word\",1,$senti_value,2),";//这个地方要注意到是 word有可能包含单引号(如jack's),因此我们要用双引号来包含word(注意转义)                       
                 }
            }
   $i++;
        }         
    }
    //echo $i;
    $sql=substr($sql,0,-1);//去掉最后一个逗号
    //echo $sql;
    file_put_contents('20000-25000.txt', $sql);  //批量导入数据库,5000条一次,大概需要40秒的样子;一次导入太多max_execution_time会不够,导致失败     
?>

1,海量数据导入到时候,要注意PHP的一些限制,可以临时调整一下,否则会报错

Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes)

2,PHP操作TXT文件

file_get_contents()

file_put_contents()

3,海量导入的时候,最好分批次导入,失败的几率小一些

4,海量导入之前,脚本一定要多次测试无误再使用,比如用100条数据来测试

5,导入之后,如果PHP的mem_limit还是不够的话,程序仍然跑不起来

(建议用修改php.ini的方式来提高mem_limit,而不是用临时的语句)

PHP 相关文章推荐
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
PHP判断密码强度的方法详解
May 26 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 PHP
如何重写Laravel异常处理类详解
Dec 20 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 #PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 #PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 #PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 #PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 #PHP
php多文件上传功能实现原理及代码
Apr 18 #PHP
php实现多张图片上传加水印技巧
Apr 18 #PHP
You might like
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
如何用Python合并lmdb文件
2018/07/02 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
opencv+python实现均值滤波
2020/02/19 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
如何用python 操作zookeeper
2020/12/28 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
JS原生实现轮播图的几种方法
2021/03/23 Javascript
挂科检讨书范文
2014/02/20 职场文书
学校火灾防控方案
2014/06/09 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
个人事迹材料范文
2014/12/29 职场文书
小班下学期个人总结
2015/02/12 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python