Closed terrymanu closed 6 years ago
急需该功能,循环新增数据太慢了
亮哥这么棒现在支持批量执行的语句了?
请问现在要支持批量的话,只能单独更新这几个类吗?有没有分支可以直接使用?
@terrymanu 建议亮哥优先考虑下支持透传方式执行sql,这样sharding-jdbc短时间不支持批量insert方式也能够通过透传方式,完成单一物理表的批量insert,毕竟在数据量较大的时候批量insert执行效率比一条一条的插入好太多。
批量instet 能解析出来吗?
建议亮哥优先考虑下支持透传方式执行sql,这样sharding-jdbc短时间不支持批量insert方式也能够通过透传方式,完成单一物理表的批量insert,毕竟在数据量较大的时候批量insert执行效率比一条一条的插入好太多。
insert多条语句,按道理是需要分布式事务配合的,如果不嫌弃网易中间件的话,可以尝试我们的:https://github.com/Lede-Inc/cetus
哥们,牛头不对马嘴啊。
批量插入,如果涉及到多个分库,当然需要分布式事务了
这个issues的问题是,insert解析与路由的问题。 sharding-jdbc支持两段提交啊
在哪儿支持,我没有发现有任何xa的机制
官方也只是说:
BASE Transaction
并不是真正的分布式事务
如果不支持两段提交,sharding-jdbc能上正式环境 两段提交,非常简单,需要纠结吗?
AbstractConnectionAdapter 看下这个类吧
insert into test ( A , B , C , D)VALUES('这是第0A','这是第0B','这是第0C','这是第0D'), ('这是第1A','这是第1B','这是第1C','这是第1D'), ('这是第2A','这是第2B','这是第2C','这是第2D'); Disconnected from the target VM, address: '127.0.0.1:63898', transport: 'socket' 2018-03-21 17:15:08.299 ERROR 15844 --- [ main] c.alibaba.druid.filter.stat.StatFilter : merge sql error, dbType mysql, sql : insert into test_0 ( A , B , C , D, id)VALUES, 183266118457098240);
com.alibaba.druid.sql.parser.ParserException: syntax error, expect ')', pos 46, line 2, column 28, token COMMA
这是为啥啊? 是按照批量格式来的啊
InsertStatement insertStatement = (InsertStatement)new SQLParsingEngine(DatabaseType.MySQL, insertSQL, shardingRule).parse();
这样写并没有更新. 这句代码是InsertStatementParserTest.java中找到的.
我参照example那的springboot项目配置,批量插入还是不行。
需要
connection = DataSourceUtils.getConnection(dataSource);
statement = connection.prepareStatement(sql);
int rows = 0,count = 0;
for(RebBusiLedgerDO busi : busiLedger){
int idx =1;
statement.setString(idx++, busi.getContractNo());
statement.setString(idx++, busi.getSupplierCode());
statement.setString(idx++, busi.getBusiNo());
statement.setString(idx++, busi.getLedgerNo());
statement.setInt(idx++, busi.getStatus());
statement.setString(idx++, busi.getLedgerNo());
statement.addBatch();
count++;rows++;
if (count % 5000 == 0) {
statement.executeBatch();
count = 0;
}
}
if (count != 0) {
statement.executeBatch();
}
2.1以下版本 按照分表规则拆分N个集合,然后做这种批量不是很完美么?
fixed at 3.0.0.M1
只支持很简单的sql语法,虽然有dialect但很多语法都不支持
@terrymanu 亮哥 INSERT INTO t_table_yymmdd (xx, xx,....M) VALUES (xx,xx,....M), (xx,xx,....M), (xx,xx,....M) ....N 当M(字段数)N(记录数)比较大,进行分表操作时,如50020时,sql执行非常慢,基本上卡死了。根据debug 应该问题出在 sqlRoute 和 sqlParse 这块。请确认。备注:版本为3.1.0
亮哥,在集成mybatis的时候 ,使用了批量新增,发现报了一个莫名的错误 (Parameter 'XXX' not found. Available parameters are [A, B]), 大致看了下,是不是因为单表mybatis的Invocation中是一条SQL,而批量的是一个集合,导致ShardingValue中的分片键和分片键的值对应不上的原因? 备注:版本为3.1.0
亮哥,插入多条数据,分表后,很慢,这个有什么方式可以解决吗
支持批量insert语句,例:
INSERT INTO t_table (xx, xx) VALUES (xx,xx), (xx,xx), (xx,xx);