亚洲必赢手机入口_亚洲必赢官网_www.633.net

大数据量插入问题


构造数据

$data = [];
for ($i = 0;$i < 10000;$i++){

   $data[$i]['title'] = "我是标题".$i;
   $data[$i]['desc'] = "标签就是关键词标签,作用是告诉搜索引擎本页的重点、关键词。
               它的设置应该针对关键词的重要程度依次进行设置。值得注意的是:
               现在很多搜索引擎已经公开表示,算法中不再涉及标签,所以,要是没有把握可以放弃对其的优化。".$i;

   $data[$i]['user_id'] = rand(1,10);
   $data[$i]['create_time'] = time();
}

开始的时候 使用的DB来插入数据 但是 报错了


 //数据插入
       Db::startTrans();
       try{

           Db::name('test')->insertAll($data);


           Db::commit();
           echo "成功";

       }catch (Exception $e){
           Db::rollback();
           dump($e);
       }


错误如下 

Allowed memory size of 134217728 bytes exhausted (tried to allocate 54889453 bytes)


我把插入数据操作换成


$testModel = new TestModel();
$testModel->saveAll($data);

成功插入


image.png


 更换数据量  为 10万  


这时 也同样报错了

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 516 bytes) in D:\phpStudy\WWW\LifeCalendar\simplewind\thinkphp\library\think\db\Connection.htmp on line 483



将php.ini中的memory_limit = 128M改为512M,


运行了以后 又超时了、、

Maximum execution time of 30 seconds exceeded


增加 

set_time_limit(120);

结果如下


image.png

这里的操作也不是每次都是正常的是 

有时会报以下错误:

php Could not queue new timer

具体还没有查到问题所在




我这里测试了先把数组分割  

array_chunk()

分批插入  但是效果不是很理想 


这里插入所有数据耗时已经很大了。已经远远超出了承受范围









来源: up61技术博客 欢迎分享 (QQ:529857614)

qq交流群:63739043 up61博客-php交流群

上一篇: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54884479 bytes)
下一篇: 知名技术团队博客



Baidu
sogou