首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加速大量插入到多个数据库中

加速大量插入到多个数据库中
EN

Stack Overflow用户
提问于 2016-01-03 21:34:22
回答 2查看 397关注 0票数 0

我编写了一个使用MyBatis执行大量插入到多数据库的脚本。之前的脚本没有使用MyBatis an,或多或少,的速度是的两倍(一百万条记录的25分钟,使用MyBatis的1小时10分钟)。我尝试过不同的东西,但是我不知道如何配置MyBatis来提高它的性能。关于我的问题和解决方案的一些具体考虑:

  1. 数据库位于VPC中,因此网络时间非常重要。
  2. 我使用guice绑定每个数据库的映射器。以编程方式设置连接信息。当我需要执行一个插入时,映射器就会得到。
  3. 需要插入的行没有排序,因此它们由数据库排队。当队列达到给定大小时,将执行多行插入。我能用更好的注射贴图吗?
  4. 我使用连接。这是否意味着当映射器第一次被使用,然后再被重用时,打开3个连接?如果每隔几分钟使用一次给定的映射器,那么这些空闲连接就会关闭吗?
  5. 有时我会随机地得到这个错误: org.apache.ibatis.transaction.TransactionException:错误配置AutoCommit。您的驱动程序可能不支持getAutoCommit()或setAutoCommit()。请求设置:假。原因: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路失败--从服务器成功接收的最后一个数据包是4,030,088毫秒前。最后一个成功发送到服务器的数据包是0毫秒前。

我能做些什么来提高性能和避免通信错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-04 08:23:50

1、似乎需要更改连接池param。

数据库(如mysql )在目标时间间隔空闲时可能会关闭连接,但可能不会注意到连接池,因此当映射器使用封闭连接时,就会发生CommunicationsException。

(1)如果使用c3p0,可以指定idle_test_period来解决这个问题。

(2)或者您可以指定jdbc 超时设置(最大等待时间、空闲超时)

2连接池具有minSize和maxSize属性,当空闲连接num大于minSize时,超出部分将关闭。

票数 1
EN

Stack Overflow用户

发布于 2016-01-04 10:12:51

我认为您必须对mysql配置进行优化才能批量插入:在这里输入链接描述看起来像是mybatis试图将自动提交设置为false,这是一个很好的优化。我认为最好通过数据库创建mapper实例,并使用guice创建3个数据源。

另一种方法是使用平方港,但这是一个很大的突破。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34581863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档