我们有一个Java应用程序,可以从Postgres数据库中缓存所有信息(7个表中的约5000个条目)。问题是数据库在外部更新,缓存需要知道何时无效。需要注意的是,我们并不期望有很多插入/更新。
Postgres通过插入/更新的Listen / Notify和Trigger为此提供了一个很好的解决方案;唯一的问题是Postgres的JDBC驱动程序does not know to listen on notifications是异步的并且需要轮询并且没有找到从Java异步监听的解决方案。
问题是如何在这种情况下设计缓存更新触发,以实现最佳性能并限制缓存不一致的时间量。上述机制是否值得(为每个表创建触发器,然后为通知分隔通道以进行监听/通知和轮询通知),或者创建像select * from table where update_timestamp > ?
这样的查询并且给出的参数是快速的最新的缓存更新时间戳(假设该列已编入索引)。
简单来说,是通过polling值得通知/收听还是更快地查询?
答案 0 :(得分:3)
取决于通知频率。如果你每秒得到100个通知,它可能会“慢”(=需要更多CPU资源)然后轮询,因为你有更多的OS上下文切换。
答案 1 :(得分:1)