0

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

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

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

在这种情况下有什么类似的最佳实践吗?切换到 ORM 有帮助吗?

4

1 回答 1

0

您提到了几件可以修复的事情,以显着提高性能:

  1. 不要在每次对象更新时创建新线程(例如,使用 ExecutorService 来管理线程池)​​。
  2. 不要为每个对象更新创建新连接。使用连接池。
  3. 使用多个线程/连接进行更新(参见上面的#1)。
  4. 使用 JDBC 批处理(如果更新的语义允许它们组合成更大的事务)。

即使只做前三个也可能让你获得 10 倍的加速。

于 2013-08-17T19:53:39.730 回答