建议在循环中连续查询数据库,以获取添加到特定表的任何新数据吗?
我有一段代码:
while(true)
try{
// get connection
// execute only "SELECT" query
}
catch(Exception e){}
finally{// close connection
}
//Sleep 5 sec's
}
答案 0 :(得分:1)
在许多情况下,这是一种简单的方法。确保您使用的select语句不会在数据库上放置尽可能少的负载。
更好(但更难设置)的变体要么是使用某种机制来让数据库主动了解变化。例如,某些数据库可以使用某种排队机制发送信息,这也可以使用数据库触发器触发。
答案 1 :(得分:0)
不建议在循环中查询数据库,但如果您需要相同的数据,则可以对程序进行守护。
答案 2 :(得分:0)
如果超过5秒,则计时器将是合适的。
对于一种完全保持最新状态:
触发器和级联插入/删除可以在数据库本身内传播数据。
否则在更改数据库之前,在消息队列中发出消息。这不一定需要是Message Queue(大写),但可以是任何类型的队列,如发布/订阅机制或其他任何类型。
答案 3 :(得分:0)
一方面,如果您的数据库变化率较低,那么最好使用/实施通知系统。许多RDBMS都有通知功能(Oracle的数据库更改通知,Postgres'异步通知......),如果您的RDBMS没有它们,使用触发器很容易实现/模拟(如果您的RDBMS支持它们)。
另一方面,如果变化率非常高,那么您的解决方案更可取。但是你需要仔细调整间隔时间,你必须注意:间隔读取以检测变化会产生负面的附带效应。
但如果您按时间间隔读取数据,则很难确定已更改的内容。那你有两个选择:
a)您不仅要阅读,而且每隔一段时间加载/处理所有信息;
b)或者你不仅要阅读,而且还要将数据库数据与内存驻留数据进行比较,以确定每个时间间隔发生了什么变化。