加速多个不同的更新查询

时间:2013-08-17 17:11:35

标签: java sql jdbc orm

我正在使用管理大量存储对象的应用程序(每个存储对象存储一堆简单变量)。这些对象通过外部数据库保存,即MySQL和SQlite。

我目前所做的是在启动时将所有对象加载到内存中(需要直接访问,延迟加载不是一个选项,至少目前是这样)。更改对象的值时,它会通过在新线程中调用相应的更新语句自动在数据库中更新自身。 数据库通信使用PreparedStatements在纯JDBC中处理,连接不是池,一次只有一个活动连接。

如上所述,我对整个过程不满意,因为当需要将多个操作写入数据库时​​,它往往会很慢,我正在寻找一种方法来改进它。我试图实现一个队列来使用一次处理多个更新的批处理操作,但似乎这只有在每个更新值都有一个分开的队列时才有可能,这似乎是一些开销。 添加连接池可以加速MySQL,但不会改变SQLite方面的任何内容。

在这种情况下,有什么比最好的做法更好吗?可以切换到ORM帮助吗?

1 个答案:

答案 0 :(得分:0)

您提到了一些可以解决的问题,以提高性能:

  1. 不要在每个对象更新上创建新线程(例如,使用ExecutorService来管理线程池)​​。
  2. 不要为每个对象更新创建新连接。使用连接池。
  3. 使用多个线程/连接进行更新(请参阅上面的#1)。
  4. 使用JDBC批处理(如果更新的语义允许它们组合成更大的事务)。
  5. 即使只是做前三个也可能让你加速10倍。