我目前正在开发一个Java应用程序,用于比较2个不同数据库中存在的表数据。

我正在使用连接池和线程池执行器服务。我将连接数和线程数配置为可配置的,因此试图找到最佳连接数和所需的最佳线程数。

我知道获得最佳数量的最佳方法是尝试不同的数量,但是我的问题是我应该考虑哪些因素或如何计算连接/线程所需的数量。

通常有3000个要比较的表,并且表的列表/模式可以预先使用,并且暂时假设每个表中的记录数是几百个(因此我不需要一次查询一个表)。

当前,我的应用程序为每个表生成一个线程(从线程池),并且它与2个不同的数据库建立2个不同的数据库连接(现在依次),一旦检索到数据,同一线程将调用一个比较数据的方法。

这是我有的几个问题,说N不。芯数,M为最大编号。数据库可以连接的数据库连接数

  • 如果我的线程数多于N,那么这对我的用例有用吗?如果是,怎么办?
  • 此处的限制因素是-内核数或否。连接?
  • 是否有比M多的线程有用?
  • 最佳答案


  • 是的,产生更多线程而不是内核会有所帮助,因为在任何给定时间,某些线程将被阻塞以进行I/O,这时其他线程可以进行处理。
  • 从上面可以看出,限制因素当然不是核心数。但是,连接数也可能不是限制因素。当然,您不能超过连接数,但是从达到磁盘限制(在数据库服务器端)或网络拥塞可能成为问题之前,您甚至可能无法达到该限制上限。
  • 如果您确保a)从连接池中获得连接,b)读取所有数据,c)将连接释放回池中,则线程数超过最大连接数可能会带来一些小的好处。 d)比较数据。那是因为当一个线程比较数据时,另一个线程可以使用该连接来读取数据。但是,比较数据听起来像是一个非常简单而又快速的工作,所以好处就不会那么大:您的线程将相当快地完成数据比较,之后它将希望从池中获得另一个连接,然后如果所有连接都在使用中,它将被阻止。

  • 话虽如此,我希望您知道以下事实:现有的工具,甚至是免费工具,都可以为您做这些比较。搜索“SQL比较”。 (我知道,这是一个错误的称呼,这些工具不比较SQL,它们比较数据库,并且碰巧使用SQL查询它们比较的数据库;我没有给出名称,这些工具的创建者做了。 )

    10-01 03:06
    查看更多