3.同步数据到其他表的。

这种又分插入和更新字段两种情况,除了sql方面的逻辑外,要考虑记录执行sql和变化前后数据记录。总是要做最坏的打算,一旦更新错了还能回滚数据。

比如在更新之前先记录被更新的数据记录到某表(新建表)或文件中。在编写阶段也做到先跑一条数据,然后再进循环去测试。

一步一步,小心驶得万年船,毕竟你是在做非select操作。

4.从一种DB迁移数据到另外一种DB的。(比如从mssql->mysql,或反之)
这种迁移其实和第二种是类似的,除了业务逻辑外,也要考虑上线后数据的回滚,还有查询和插入需要做到分批。编写代码的时候各种引用渠道和调用model不要写到foreach里面了,驱动也别滥用,每一次的初始化都会消耗链接资源和时间成本。
把不必要的查询都干掉,集中在一次查询里面,同时也避免什么都select *之类的查询,用到哪几个字段列就select那几个。
在设计数据表的时候(mysql),还是多用时间戳,方便查询,即使显示格式要求,也可以在脚本层面去做。

在插入的时候还应该多用框架自带的批量方法,比如CI中有insert_batch方法,多了解一下驱动底层的实现,免得自己重复造轮子还加一些多于判断。

比如我之前写的分批插入:

for ($i = 1; $i<= $times;$i++) {$insertData = array();$partData = $this->mssql->select($sql, array(), $i, 10000);//var_dump($partData);die();foreach ($partData as $p) {$insertData[] = array('user_id' => $p['user_id'],'login_from' => $p['login_from'],'type' => $p['type'],'ip' => $p['ip'],'created' => $p['created']);}$allData = array_chunk($insertData, 1000); // 分批插入$num = count($allData);for ($n = 0; $n< $num; $n++) {$mysql->insert_batch($tableName , $allData[$n]);}
}

其中array_chunk那句是把装好的10000条数据的数组再分成1000个一份,然后每一千个记录插入一次。看起来很合理,但实际上CI的insert_batch里面已经帮我们这么做了。

DB_active_rec.php源码如下:

// Batch this baby
for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 1000)
{$sql = $this->_insert_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_keys, array_slice($this->ar_set, $i, 1000));$this->query($sql);
}

这里面已经是1000条一次性批量插入了(这是我修改过的,默认是100),当然mssql的官方驱动比较二逼,那个_insert_batch方法并不存在,我把mysql驱动对应的那个_insert_batch方法给拷贝过去即可。

多了解一些底层实现,就少一些麻烦。

转载于:https://www.cnblogs.com/freephp/p/5094238.html

写一些脚本的心得总结系列第3篇------同步数据到其他表相关推荐

  1. 【Flink系列】开发篇:1. Flink维表关联方案

    数据流往往需要访问外部的数据源来丰富自己的信息,比如通过record中的ip地址查询ip数据库maxmind的GeoIP2 Databases得到ip对应的城市名称,城市经纬度,将这些作为新的字段添加 ...

  2. php语+言教程,写给thinkphp开发者的laravel系列教程(九)打印数据-Fun言

    php这种脚本语言调试起来是很方便的: 大多时候看报错打印一下数据就知道问题所在了: php 内置了常用打印函数 print 和 var_dump : 但是打印出来的样式实在让人目瞪狗呆: think ...

  3. python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  4. python游戏最简单代码-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  5. 《Genesis-3D游戏引擎系列教程-入门篇》五:脚本

    2019独角兽企业重金招聘Python工程师标准>>> 注:本系列入门教程仅针对引擎编辑器:v1.2.2及以下版本 脚本系统 工程文件 这是Genesis-3D脚本系统的一个实例,使 ...

  6. 1个月增长15000 star,zx 库写shell脚本真不错~

    大家好,我是若川.持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  7. python写安卓游戏_10分钟学会python写游戏脚本!Python其实很简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  8. 如何用python写游戏脚本?

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后 ...

  9. 【Unity3D 教程系列第 12 篇】如何用Unity写一个简易的计时器工具?

    这是[Unity3D 教程系列第 12 篇],如果觉得有用的话,欢迎关注专栏. 平常关于延时的处理很多人都喜欢用携程去处理,但是在 Unity 里,并不建议大家用过多的携程,因为会出现一些莫名其妙的 ...

最新文章

  1. LeetCode OJ:Remove Element(移除元素)
  2. Android逆向与病毒分析
  3. chroot环境怎么重启linux,linux下简易chroot环境的塔建
  4. BZOJ2730 HNOI2012 矿井搭建 连通性
  5. Druid 分析报表中的实战(一)
  6. python spark进行大数据分析_第2天Python实战Spark大数据分析及调度-RDD编程
  7. 浅谈PHP面向对象编程(九)
  8. Nginx 极简入门教程
  9. win8.1 库 计算机,Win8.1资源管理器库丢失?一键轻松找回
  10. RabbitMQ提升消息传输可靠性方法总结
  11. 添加manifest解决IDirect3DDevice9::GetFrontBufferData抓屏返回失败
  12. mac检测是否安装mysql_mac安装mysql
  13. MindSpore,易用性提升的思考与实践
  14. 2021数学建模B题及思路
  15. 《Linux内核分析》期末总结
  16. 互联网高手教你如何搜集你想要的信息
  17. 官方活动|最高可免费领60天会员时长
  18. 计算机实训应用,计算机应用基础及实训
  19. php 在线选座,捷西网络在线选座系统
  20. 新闻发布系统之分页查询and评论

热门文章

  1. c语言指针改良,重新认识C语言指针(上)(示例代码)
  2. 二进制包如何知道go 版本_gops 是怎么和 Go 的运行时进行交互的?
  3. React ref的转发
  4. Nodejs 路由封装 封装一个类似 express 的路由
  5. LeetCode MySQL 570. 至少有5名直接下属的经理
  6. LeetCode MySQL 1517. Find Users With Valid E-Mails(正则表达式)
  7. 基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践
  8. centos5.8安装mysql5.3_CentOS 5.8 64位 源码安装mysql5.5.28
  9. python第k序元素查找列表_【Python】第8次练习:列表——程序填空题 -合并队列、列表元素零的移动、列表逆序输出、第K序元素查找...
  10. 设计精美Power Bi报告的诀窍以及让人眼前一亮的精美Power Bi图表