6

我见过一些 Java 代码,其中数据库表中的行保存在集合中(通常是 ArrayList 或 HashMap)。

  • 这种方法有什么好处?
  • 你如何保持集合和表同步?
  • 为什么不为每次检索向数据库发送查询?

这是一个好习惯吗?

4

2 回答 2

6

好处是性能。 查询数据库是资源和时间密集型的。如果您的表足够小,可以将项目保存在内存中,那么对本地内存的简单引用会快几个数量级。

就使它们保持同步而言,这是一个更困难的答案,并且取决于用例。在大多数情况下,除非您设置了一些良好的自定义架构,否则一旦您将数据库和内存中的集合检索到内存中,就无法保证同步。

如果您采用这种方法并使集合和数据库保持同步(就像吃蛋糕一样),您可以执行以下操作:

  1. 在您的表上为任何创建、插入、更新或删除设置数据库触发器。
  2. 让触发器运行一个脚本,以某种方式通知您的应用程序(监控线程、服务等)。
  3. 让应用程序在收到通知后通过读取数据库来更新集合。

当然,这是否会给您带来性能改进取决于您的数据库被其他程序修改的频率。

你也可以在你的程序中简单地维护一个数据库锁,这样在你的处理期间没有其他人可以修改它(允许你将项目保存在内存中保证数据库不变),但这非常糟糕练习,因为您基本上会同时破坏使用该表的任何其他应用程序(除了阅读之外的任何其他应用程序)。

于 2013-04-15T13:35:41.790 回答
4

如果您经常读取永远不会更改的相同数据,那么将这些数据保存在 Java 集合中是有意义的,例如 List 或 Set。这一切都与性能有关,通过 Java 进行数据库调用和执行数据库事务确实需要时间(我在伦敦大学的论文就是关于这个问题的)。但是,如果您在 Java 集合中拥有该数据,则不必继续与具有“阻抗不匹配”的数据库通信,因为它们是两个独立的实体;一个使用 Java 范式,另一个使用数据库范式。

至于让它们保持同步,那是完全不同的野兽。

于 2013-04-15T13:44:53.027 回答