MySQL+PHP大文件读取和写库

大文件内容写入数据库

问题和困难

1.文件太大,数据不能一次读取

2.数据存在冗余,所以不能单纯的插入操作

解决

1.按行读取文件,计数累加,超过10000万行进行写库操作

while ($str = fgetcsv($file)) { //每次读取CSV里面的一行内容
    $str = explode("    ",$str[0]);
    $insert_data[] = array(
        'phone' => $str[0],
        'type' => $str[2],
        'number' => $str[3],
    );
    $time++;
    if ($time > 10000) {
        $value = "";
        $time = 0;
        foreach ($insert_data as $key => $item) {
            $value .= "(" . join(",",$item) ."),";
        }
        $value = trim($value,',');
        // var_dump($value);die;
        save($value,$mysqli);
        // die;
    }
}

2.写数据库操作,自动根据数据库内容进行选择插入还是修改操作

INSERT INTO table (fild)  VALUES $value ON DUPLICATE KEY UPDATE number=number+VALUES(number)

如果主键存在,则更新,如不存在则执行插入操作,更新时将本次数据与原有数据相加保存

其中,向MySQL写入大量数据时,可以考虑采用PDO模式

ini_set('max_execution_time','0');
$pdo = new PDO("mysql:host=localhost;dbname=oradt_cloud1520","root","123456");

$sql = "insert into  scan_card_picture (uuid,account_id,handle_state,created_time,status,from_account,accuracy,ifupdate) values";

for($i=0; $i<100000; $i++){
  $str = strrand(32);
  $sql .="('".$str."','07:55:10','active','admin@qq.com','90',1),";
 }
$sql = substr($sql,0,strlen($sql)-1);
var_dump($sql);
if($pdo -> exec($sql)){
  echo "插入成功!";
  echo $pdo -> lastinsertid();
}
时间: 2024-12-21 20:38:59

MySQL+PHP大文件读取和写库的相关文章

Python按行读取文件的实现方法【小文件和大文件读取】_python

本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #function: 按行读取小文件 all_lines = [] try: file = open('txt.txt', 'r') all_lines = file.readlines() except IOError as err: print('File error: ' + str(err)) fin

mysql 导入大文件错误解决方法

命令行导入大文件直接使用source函数 导入数据库 常用source 命令 进入mysql数据库控制台, 如mysql -u root -p   mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source d:chai.sql 但导入小文件没事,大文件出现以下错误: 1.ERROR 2006 (HY000) at line ***: MySQL server has gone away 2.Got a packet bigger

PHP如何快速读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较

php使用file函数、fseek函数读取大文件效率对比分析_php技巧

php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,

nio-java读取大文件csv格式

问题描述 java读取大文件csv格式 有一个2g的文件,传统io读写可能出问题,所以我想用nio方法先分割,生成temp文件,然后读取每个temp. 但是因为这个文件里面一条record不是按照行来分隔,比较乱,要写代码去判断如何分隔. 有没有什么其他好的办法读取文件? 解决方案 按行读取,不会出问题的.按行读取的原理是遍历文件,遇到换行符返回一行数据,而不是全部装入内存后分割. 解决方案二: Java大文件读取java读取大文件Java读取大文件

BitBucket Cloud新增Git大文件存储Beta支持

Atlassian工程师Szilard Szasz-Toth在一篇文章中写道,以前是在BitBucket Server上,现在,Atlassian基于云的代码管理解决方案BitBucket Cloud也提供了Git大文件存储. Git LFS背后的基本理念是将大型二进制文件存储在并行存储中,而Git库只包含到那些文件的轻量级引用.这样,二进制文件的修改历史就可以表示为其实际版本的引用序列,而不是完全复制它们.这大大提升了克隆以及获取新版本库的速度,因为只有大文件的当前检出版本会被下载. 据Sza

PHP几个快速读取大文件例子

 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比

PHP读取大文件的类SplFileObject使用介绍

 一般读取文件我们用fopen 或者 file_get_contents ,前者可以循环读取,后者可以一次性读取,但都是将文件内容一次性加载来操作. 如果加载的文件特别大时,如几百M,上G时,这时性能就降下来了,那么PHP里有没有对大文件的处理函数或者类呢? 答案是:有的. PHP真的越来越"面向对象"了,一些原有的基础的SPL方法都开始陆续地实现出class了. 从 PHP 5.1.0 开始,SPL 库增加了 SplFileObject 与 SplFileInfo 两个标准的文件操作

文档流-C# 用FileStream读取写入大文件

问题描述 C# 用FileStream读取写入大文件 我想做个上传文件的功能但是大文件会报错有什么办法:比如分段读取 写入代码应该怎么样写? 解决方案 用内存映射类MemoryMappedFilehttp://www.cnblogs.com/briny/archive/2012/11/25/2787188.html 解决方案二: http://wenku.baidu.com/link?url=JWl0eaFhVwzWRqDspe1bJByMm0lOESldyE4lNWo3zwvAGtxQk9Iz