zoukankan      html  css  js  c++  java
  • 记一次 tp5 操作50w 数据的项目(tp5真心很乏力)

    A:需求

    1、从excel把数据导入mysql 

    2、简单数据清洗

    3、数据查询优化

    B:解决方案

    1、excel的数据量比较大(60w),先把excel转成csv文件(手动操作),然后使用SpreadsheetReader(github)把数据写入txt(因为有些数据需要处理),使用mysql的load data local infile 把数据导入mysql。

    tp的一些配置和mysql配置

     
    tp5配置
    'break_reconnect' => true,//断线重连 'params' => [ PDO::ATTR_CASE => PDO::CASE_LOWER, PDO::ATTR_EMULATE_PREPARES => true,//预处理 PDO::MYSQL_ATTR_LOCAL_INFILE => true, //可以使用文件导入 ]
    相关代码:
     $sql = "load data local infile '路径' ignore into table 表名 character set gbk fields terminated by '_' lines terminated by '|'(`列名`);";
    Db::execute($sql);

    mysql 配置

    local-infile=1 #打开使用文件导入
    secure_file_priv = /www/www #路径

    2、简单数据清洗

    INSERT INTO 表名(`列名`) SELECT `列名` from 表名;//使用最多
    UPDATE 表名 a,表名 b set a.a=b.a,a.b=a.b+b.b WHERE a.`code`=b.`code` and a.lb=lb;//使用第二多
    

    3、使用tp5自带的left join 2w数据的两张表,查询速度会很慢,可以自己去修改对应代码,或者使用in来转化;用in就使用到索引比left join快很多。laravel框架不会有这个问题。

    使用paginate() 里面会自动去获取count,数据多了,也会很慢,直接使用tp5里面的简单查询即可paginate(10,true)

  • 相关阅读:
    java 多线程4: java线程的优先级
    Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
    go http
    go redis
    go tcp
    go 单元测试
    go 定时器
    go channel
    go goroutine
    go 错误处理
  • 原文地址:https://www.cnblogs.com/JANCHAN/p/11195623.html
Copyright © 2011-2022 走看看