在Collection中保存表行的好处是什么?

时间:2013-04-15 13:31:52

标签: java database collections

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

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

这是一个好习惯吗?

2 个答案:

答案 0 :(得分:6)

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

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

如果你想要采用这种方法让收集和数据库同步(有点像吃蛋糕和吃它),你可以做类似以下的事情:

  1. 在桌面上为任何“创建”,“插入”,“更新”或“删除”设置数据库触发器。
  2. 让触发器运行一个脚本,以某种方式通知您的应用程序(监视线程,服务,等等)。
  3. 通知应用程序后,通过阅读数据库来更新集合。
  4. 当然,这是否会提高性能将取决于您的数据库被其他程序修改的频率。

    您也可以在程序中简单地保持对数据库的锁定,以便在处理期间没有其他人可以修改它(允许您将项目保留在内存中保证数据库没有变化),但这是非常糟糕的做法,因为你基本上会破坏使用该表的任何其他应用程序(除了阅读之外的其他任何东西)。

答案 1 :(得分:4)

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

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