搜索
系统检测到您的用户名不符合规范:

thinkphp对180万数据批量更新支持事务回滚

浏览:1877 发布日期:2018年05月03日 分类:功能实现
目前测试180万多的数据,大概是正常的,不知道再多了会怎么样了
首先我们要给表改成 innodb类型

其次下面是干货请认真看: set_time_limit(0);
ini_set("memory_limit","800M");//180万数据 数据越多越消耗内存
$t1 = microtime(true);
$Model = M('orderlisttest');//先用 M 函数实例化一个空对象
$rr['goods_tuihuo']=1;
$subQuery = $Model->field('orderlist_id')->table('vc_orderlisttest')->where($rr)->buildSql();//建立临时表
$Model->startTrans();//开启事务
$result=$Model->table($subQuery.'a')->field('orderlist_id')->select();
$total=count($result);
$num=100000;//每次执行的数量
$fornumber =ceil($total/$num) ;//分多少次处理
echo "事务已开启.........<br>";
sleep(1);
ob_flush();
echo 'Begin ...<br />';
echo '正在批量更新,请耐心等待...<br />';
echo "共有".$total."条数据<br />";
echo "事务正在处理.........<br />";
echo "正在执行第<span id='c'></span>组/共有".$fornumber."组</br>";
foreach ($result as $value)
{
$order[]=$value['orderlist_id'];
}
$index=0;
for ($i=1;$i<=$fornumber;$i++)
{
echo '<script>document.getElementById("c").innerHTML = "'.$i.'";</script>';
ob_flush();
flush();
$arr = array();
for($j = $index; $j < $index+$num;$j++)
{
$arr[] = $order[$j];
}
$this->updatestatus($arr,$i);
$index += $num;
}
echo "执行完毕<br />";
$t2 = microtime(true);
echo '共耗时'.round($t2-$t1,3).'秒<br>';
echo '共消耗内存: ' . memory_get_usage() . '<br />';
}
public function updatestatus($arr,$i)
{
$value='';
foreach ($arr as $k=>$v)
{
if($k==0)
{
$value.=$v;
}
else
{
$value.=','.$v;
}
}
$condition['orderlist_id'] =array('in',$value);
$update['goods_tuihuo'] =0;
$res = M('Orderlisttest')-> where($condition)->setField($update);
if($res)
{
$map = true;
}
else
{
$map = false;
}
if($map==true)
{
M('Orderlist')->where($condition)->commit();
echo '第'.$i.'组成功<br/>';
}else
{
M('Orderlist')->where($condition)->rollback();//执行失败回滚
echo '第'.$i.'组失败<br/>';
}
}
效果图:
收藏
niwsmbulai1989
积分:2896 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /