在java中连续查询循环中的DB

时间:2015-06-29 07:24:05

标签: java database sleep

建议在循环中连续查询数据库,以获取添加到特定表的任何新数据吗?

我有一段代码:

  while(true)
      try{
         // get connection
         // execute only "SELECT" query
       }
      catch(Exception e){}
      finally{// close connection

      }
         //Sleep 5 sec's
      }

4 个答案:

答案 0 :(得分:1)

在许多情况下,这是一种简单的方法。确保您使用的select语句不会在数据库上放置尽可能少的负载。

更好(但更难设置)的变体要么是使用某种机制来让数据库主动了解变化。例如,某些数据库可以使用某种排队机制发送信息,这也可以使用数据库触发器触发。

答案 1 :(得分:0)

不建议在循环中查询数据库,但如果您需要相同的数据,则可以对程序进行守护。

答案 2 :(得分:0)

如果超过5秒,则计时器将是合适的。

对于一种完全保持最新状态:

触发器和级联插入/删除可以在数据库本身内传播数据。

否则更改数据库之前,在消息队列中发出消息。这不一定需要是Message Queue(大写),但可以是任何类型的队列,如发布/订阅机制或其他任何类型。

答案 3 :(得分:0)

一方面,如果您的数据库变化率较低,那么最好使用/实施通知系统。许多RDBMS都有通知功能(Oracle的数据库更改通知,Postgres'异步通知......),如果您的RDBMS没有它们,使用触发器很容易实现/模拟(如果您的RDBMS支持它们)。

另一方面,如果变化率非常高,那么您的解决方案更可取。但是你需要仔细调整间隔时间,你必须注意:间隔读取以检测变化会产生负面的附带效应。

  • 使用/实施通知系统很容易通知程序已更改的内容。 (在表A上插入新的行X,在表B上插入新的更新的行Y,...)。
  • 但如果您按时间间隔读取数据,则很难确定已更改的内容。那你有两个选择:

    a)您不仅要阅读,而且每隔一段时间加载/处理所有信息;

    b)或者你不仅要阅读,而且还要将数据库数据与内存驻留数据进行比较,以确定每个时间间隔发生了什么变化。