我的 Java 应用程序需要在启动时从不同的 MySQL 表中收集信息。没有数据库信息,应用程序将无法使用。因此,启动最多需要几秒钟(尽可能使用缓存减少此时间)。
- 在单独的线程中执行这些 SQL 查询中的每一个,允许具有多个 CPU 内核的计算机最终更快地启动应用程序(我知道,不能保证),这会是不好的做法吗?
- 在实施这个“系统”之前,我需要知道什么缺点吗?
我的 Java 应用程序需要在启动时从不同的 MySQL 表中收集信息。没有数据库信息,应用程序将无法使用。因此,启动最多需要几秒钟(尽可能使用缓存减少此时间)。
不,当然不是。例如,当多个用户同时访问您的 Web 应用程序时,像 Tomcat 这样的 Java Web 服务器会一直运行。
只需确保使用事务正确管理数据完整性即可。
通过并行化而不是串行执行请求来执行请求可能是一个好主意。
注意使用数据源,每个请求都必须使用自己的数据库连接(切勿同时在不同线程之间共享连接)。
确保你的连接池和你的线程池大小适应良好
数据库会话是相对昂贵的对象。并行到几个线程是没有问题的,但是如果你有 1000 个表,就不要创建 1000 个线程。
此外,多线程具有复杂性和潜在的巨大维护成本(例如,竞争条件导致的不可重现的问题)。所以,做你的测量,如果你发现速度只有几个百分点,就把所有的东西放回去。
有更多方法可以避免您看到的延迟。例如,您可以在单个命令批处理中发送多个查询,从而减少代码和数据库之间的往返次数。
这是你必须尝试的事情。
如果您从每个表中带回相对较少的行,那么在每个线程(或 jdbc 连接池)中建立数据库连接可能比建立一次并执行查询需要更长的时间。
幸运的是,它的代码并不多,因此您应该能够很快尝试一下。