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

Mic*_*l B 6 java database collections

我已经看到了一些Java代码,其中数据库表中的行被保存在集合中(通常是ArrayList或HashMap).

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

这是一个好习惯吗?

ast*_*eri 6

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

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

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

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

当然,这是否会提高性能将取决于您的数据库被其他程序修改的频率.

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

  • @MichaelB当然可以.:)大多数时候你需要将数据库中的信息暂时*存储在你提到的那些数据结构中,但是就长期保存数据而言...是的,我会说这很糟糕实践.我确定在那里有一个用例,但我知道在我的公司,至少,我们只需要在需要信息时再次查询数据库.这是确保您拥有最新数据的唯一(最简单?)方式. (2认同)