【问题标题】:JDBC batch insert - control the insert speedJDBC批量插入——控制插入速度
【发布时间】:2014-09-09 16:47:26
【问题描述】:

我有一个简单的 JDBC 批量插入程序。我正在从一个数据库表中获取数据,并在处理后将这些记录插入到另一个数据库中的表中。但是目标数据库存在一些性能问题。所以目标数据库管理员在我们的程序中请求一个选项来控制每秒插入的记录数。

它可能不是动态的。如果他想改变插入速度,他可以相应地改变配置属性并重新启动应用程序。

我们的源数据库和目标数据库是 MQ SQL 数据库。

有可能吗?

【问题讨论】:

  • 是的,有可能。但这也很奇怪。
  • 限制任何命令序列并不一定很困难。我不确定我是否知道你在寻求什么建议。这只是暂存插入的问题,以便每秒只能将一定数量的插入写入目标数据库,并在运行时使该值可配置。
  • @user3062946 你是对的。它应该是可配置的。但不一定是在运行时。我正在寻找的是 JDBC 驱动程序级别的配置,以控制每秒刷新到数据库的插入数量。
  • @Luiggi Mendoza 我知道这很奇怪,但这是我们的要求,因为目标数据库存在一些限制。你能告诉我怎么做吗?

标签: java sql jdbc


【解决方案1】:

插入指定数量的记录后,您可以让线程进入休眠状态。

        int recordsPerSecond = 100;
        int totalRecords = 1000;
        long sleepTime = 900; // in milis (Assuming that 100 mili seconds lapsed in inserting 100 rows)

        for(int i=1; i<=totalRecords; i++){

            if(i%recordsPerSecond==0)
                Thread.sleep(sleepTime);

            DAO.insert();
        }

【讨论】:

  • 感谢您的回答。你知道 JDBC 驱动程序级别是否有任何可用的配置来控制每秒刷新到数据库的插入数。
  • 我不知道是否有任何 JDBC 驱动程序实现了这种事情。但或者,您可以暂停程序以减少目标服务器上的负载。 This 问题很好地解释了批量插入。
猜你喜欢
  • 2011-01-14
  • 2011-02-28
  • 1970-01-01
  • 2019-06-24
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多