0

我的 Java 应用程序需要在启动时从不同的 MySQL 表中收集信息。没有数据库信息,应用程序将无法使用。因此,启动最多需要几秒钟(尽可能使用缓存减少此时间)。

  1. 在单独的线程中执行这些 SQL 查询中的每一个,允许具有多个 CPU 内核的计算机最终更快地启动应用程序(我知道,不能保证),这会是不好的做法吗?
  2. 在实施这个“系统”之前,我需要知道什么缺点吗?
4

5 回答 5

1

不,当然不是。例如,当多个用户同时访问您的 Web 应用程序时,像 Tomcat 这样的 Java Web 服务器会一直运行。

只需确保使用事务正确管理数据完整性即可。

于 2012-09-07T12:23:55.883 回答
1

通过并行化而不是串行执行请求来执行请求可能是一个好主意。

注意使用数据源,每个请求都必须使用自己的数据库连接(切勿同时在不同线程之间共享连接)。

于 2012-09-07T12:25:28.097 回答
1

确保你的连接池和你的线程池大小适应良好

于 2012-09-07T12:28:29.303 回答
1

数据库会话是相对昂贵的对象。并行到几个线程是没有问题的,但是如果你有 1000 个表,就不要创建 1000 个线程。

此外,多线程具有复杂性和潜在的巨大维护成本(例如,竞争条件导致的不可重现的问题)。所以,做你的测量,如果你发现速度只有几个百分点,就把所有的东西放回去。

有更多方法可以避免您看到的延迟。例如,您可以在单个命令批处理中发送多个查询,从而减少代码和数据库之间的往返次数。

于 2012-09-07T12:30:20.587 回答
1

这是你必须尝试的事情。

如果您从每个表中带回相对较少的行,那么在每个线程(或 jdbc 连接池)中建立数据库连接可能比建立一次并执行查询需要更长的时间。

幸运的是,它的代码并不多,因此您应该能够很快尝试一下。

于 2012-09-07T13:52:50.820 回答