事发经过:
之前用这个功能都是好好的,后来运营那边反应,突然就不行了,然后我自己测试了一下,新增了瞎写的卡号和卡密是正常的,运营那份表格批量导入就不行,我就向crmeb客服反馈,客服那边用我的表格导入也是正常的,当时我就纳闷了,因为自己也是开发,翻翻源码结合线上调试,终于找到问题了。
我编辑的商品product_id是31,发现product_virtual里面product_id 19已经有了我31想导入的数据,于是我返回product表看,发现是product_id 19是已经删除了,但是副表数据还存在,于是我把副表的数据删除了,然后导入就成功了,为了看看具体的原因我看了一下源码,代码上看副表数据应该是有删除的,但是执行了一大托业务既然没有做事务,我就知道大概得原因了,估计是网速卡顿或者高负载的情况下,由于没有事务脚本执行到一半就没有执行了,就会产生这样的奇怪问题。
我全局搜索了一下用事务的地方 Db::startTrans() ,只有3个地方用了事物,分别是
1.auto_upgrade
2.upgrade
3.databaseUpgrade
我个人建议
1、大量的业务进行多表操作还是需要加上事务,不然出现网速慢、断线、断电、高负载等不可抗因素好难保持数据的一致性。
2、批量写入数据不要在循环一条一条写入,应该拼接成数组一次性写入,如果导入的数据量大会耗没数据库链接的。
希望官方采纳,谢谢!!!