是在一个单独的线程(启动期间)运行每个SQL查询不好的做法?

时间:2012-09-07 12:20:53

标签: java mysql sql multithreading thread-safety

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

  1. 在a中预先形成每个SQL查询是不好的做法 单独的线程,允许具有多个CPU核心的计算机启动 应用程序最终更快(没有保证,我知道)?
  2. 在实施此功能之前,我是否需要了解任何缺点 "系统"吗

5 个答案:

答案 0 :(得分:1)

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

确保使用交易正确管理数据完整性。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

确保您的连接池和线程池大小适应性

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

这是你必须要尝试的东西。

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

幸运的是,这不是很多代码,所以你应该可以很快地尝试一下。