- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个 Java 应用程序,用于比较 2 个不同数据库中存在的表数据。
我正在使用连接池和线程池执行器服务。我将连接和线程的数量设置为可配置,因此尝试找到所需的最佳连接数和最佳线程数。
我知道获得最佳数量的最佳方法是尝试不同的数字,但我的问题是我应该考虑哪些因素或如何计算所需的连接/线程数量。
通常有 3000 个表需要比较,并且表的列表/架构可以预先获得,并且暂时假设每个表中的记录数为数百条(因此我不需要多次查询表)。
目前,我的应用程序为每个表生成一个线程(来自线程池),并且它与 2 个不同的数据库建立 2 个不同的数据库连接(目前按顺序),一旦检索到数据,同一个线程就会调用一个方法来比较数据。
这是我的几个问题,说 N 就是不。核心数,M 是最大核心数。数据库可以采用的数据库连接数
最佳答案
N is no. of cores and M is max no. of db connections the dbs can take
- If I have more threads than N, will that be useful for my use case? if yes, how?
- What is the limiting factor here - No. of cores or no. of connections?
- Does having more threads than M is of any use?
是的,生成比核心更多的线程会有所帮助,因为在任何给定时间,一些线程在执行 I/O 时都会被阻塞,此时其他线程可以进行处理。
从上面可以看出,限制因素肯定不是核心数量。然而,连接数量也可能不是限制因素。当然,您不能超过连接数,但您可能会发现甚至无法最大限制,因为在达到该限制之前,磁盘吞吐量(在数据库服务器端)或网络拥塞可能会成为问题。
线程数超过最大连接数可能会产生一些小好处,如果您确保 a) 从连接池获取连接,b) 读取所有数据,c) 将连接释放回池,然后 d) 进行数据比较。这是因为当一个线程比较数据时,另一个线程可以使用该连接来读取数据。然而,比较数据听起来是一个相当简单和快速的工作,所以好处不会那么大:您的线程将相当快地完成数据比较,之后它将想要从池中获取另一个连接,此时如果所有连接都在使用中,它将被阻止。
话虽如此,我希望您知道这样一个事实:存在可以为您进行此类比较的工具,甚至是免费工具。搜索“SQL 比较”。 (我知道,这是一个用词不当,这些工具不比较 SQL,它们比较数据库,并且它们碰巧使用 SQL 来查询它们比较的数据库;这个名称不是我想出来的,是这些工具的创建者想出来的。 )
关于java - 数据库连接数与 Java 线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062786/
我是一名优秀的程序员,十分优秀!