2014-08-27 61 views
1

数据库插入速度,我在哪里,我迁移数百万或记录从源数据库到目标数据库弹簧批处理应用程序的工作。在将记录插入到目标数据库时,我在批量插入(每批1000个)中执行此操作,并以这种方式在一秒钟内插入大约3000。节流(降低)在Spring应用程序

目标DB型 - MS SQL Server 2012中, JDBC驱动程序 - JTDS

现在,我有,我应该能减少(未改善)的要求迁移率的表现说,1000条记录中1秒而不是插入3000.有没有一种直接的方式来做到这一点,无论是在春季使用JDBC驱动程序或任何其他配置?

感谢,

+0

只是一些想法,你可以:1.删除索引2.使用Insert语句代替3.降低网络带宽4.增加网络延迟(VPN) – nshah 2014-08-27 16:35:36

回答

1

我会用番石榴的RateLimiter

这很简单。实例在某个地方(可能是因为一个Spring bean):

double CALLS_PER_SECOND = 100; 

RateLimiter rateLimiter = RateLimiter.create(CALLS_PER_SECOND); 

然后用它在你的循环:

rateLimiter.acquire(); 

你真的不能做记录/秒,但你可以做字节/秒或呼叫/秒。

+0

谢谢,这就是我正在寻找.. – sampath 2014-08-27 20:48:20

0

查询管理类似于Oracle中的限制选项:Link

资源调控,您可以设置服务器的最小和最大内存:Link2

+0

你可以如何使用这些配置从一个Java应用程序更具体.. – sampath 2014-08-27 18:28:35

2

相信我,这是降低性能比改善性能要容易得多。 春天批处理应用程序,最简单的方法是在例如你ItemWriter实现再睡会儿。

+0

听起来像是我的解决方案。将尝试它,让你知道.. – sampath 2014-08-27 18:29:37