高效TDDL批量插入详解编程语言
消费时间:
居然花了144秒,悲剧啊!
批量插入
第一种批量插入,ibatis批量插入数据-iterate
TDDL不支持SQL多条插入,INSERT INTO tableName (col_name,…) VALUES (expression,…),(…);所以要添加备注,绕开语法校验,
/*+TDDL({type:executeByCondition,parameters:["seller_id=#sellerId#;l"],virtualTableName:jxc_check_item})*/
/*+TDDL({type:executeByCondition,parameters:["seller_id=#sellerId#;l"],virtualTableName:jxc_check_item})*/
jxc_check_item (id, check_item_id, check_id, from_site, seller_id, warehouse_id, product_id, before_check_num, after_check_num, creator, modifier, gmt_create, gmt_check, gmt_modified)
#checkItems[].id#, #checkItems[].checkItemId#, #checkItems[].checkId#, #checkItems[].fromSite#, #checkItems[].sellerId#, #checkItems[].warehouseId#, #checkItems[].productId#, #checkItems[].beforeCheckNum#, #checkItems[].afterCheckNum#, #checkItems[].creator#, #checkItems[].modifier#, now(), now(), now()说白了这种方式就是拼接SQL,但是MySQL长度是有限制的,默认限制是1M,所以,如果一次性插入10000调数据,程序会出现假死状态。所有,要分批插入,一批插入1000调,插10次。Java代码如下:
消费时间: 只消耗了40秒不到,性能提升了3.5倍。
虽然时候性能已经提高了不少,但是,还有没有更给力的方法呢?答案是:Yes。
第二种批量插入,jdbc Rewrite Batched Statements批量插入
java代码如下:
这里,要求mysql url必须带rewriteBatchedStatements=true。此处是jdbc的代码,而本人的开发环境是基于ibatis的,下面为ibatic批量插入的实现代码:
SqlBaseExecutorImp sqlBaseExecutorImp = (SqlBaseExecutorImp)checkItemDaoImpl.getSqlBaseExecutor();
消费时间:质的飞跃,3.384秒,性能提升了40倍,Perfect。
注意事项
第一,MySql的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。
Mysql JDBC驱动,各个版本测试结果:
第二,保证表插入的顺序,如果要批量插入A和B两个表的数据,要保证先批量插入表A,再批量插入表B。原因在于磁盘IO,应为MySQL会保证SQL的顺序性,不断在A,B表之间切换,相当与磁盘寻址要不断改变,相当损耗性能,这无异于单条插入。
第三,小心事务嵌套,jdbc Rewrite Batched Statements批量插入要求在一个事务中进行批量插入,所以,外面不应该再嵌套事务,在使用TestNG事务的时候,要声明为无事务,即:@Transactional(TransactionMode.DISABLED)。
相关文章
- docker | 脚本方式批量导出&导入镜像
- Python批量去除UTF8的Bom标签详解编程语言
- python3 写的一个通过ftp远程批量处理的工具__界面处理代码详解编程语言
- Python批量修改word文档详解编程语言
- python 给目录下的图片批量加水印详解编程语言
- 将Excel中的数据批量导入数据库表详解编程语言
- ibatis 对事务和批量提交的处理,以及回滚的处理详解编程语言
- 自写脚本实现上线前本地批量压缩混淆 js , css 代码。详解编程语言
- Python3 批量替换文本内容详解编程语言
- Python3 根据m3u8下载视频,批量下载ts文件并且合并详解编程语言
- sap批量创建盘点凭证以及盘点凭证过账详解编程语言
- SAP如何批量设置采购信息记录删除标记详解编程语言
- SAP批量锁定用户详解编程语言
- SAP-批量修改主数据(客户、供应商、物料)详解编程语言
- SAP MM ME55 不能批量审批部分多个PR详解编程语言
- Linux批量添加文件后缀的简单方法(linux批量添加后缀)
- 安装华为红帽批量安装Redis集群(华为redis集群批量)
- .net开发中批量删除记录时实现全选功能的具体方法