我必须缓存oracle数据库更改通知和查询结果,并使用它来更新另一个oracle数据库中的另一个表。我以前的question的答案建议我使用缓存,我不确定java中是否有内置的缓存机制,或者我必须使用一些外部框架/库来实现这一点?
注意:我正在使用oracle jdbc来获取结果。
例如:如果用户通过sql developer或命令提示符手动更新表,则应缓存来自oracle数据库的结果change-notifications。
答案 0 :(得分:1)
Java JDBC API本身没有内置的缓存机制本身。
Oracle JDBC驱动程序(显然)支持结果集的客户端缓存,但我看不出它有何帮助:
它缓存结果集,而不是插入和删除。
它只缓存当前客户端JVM完成的查询/结果集,而不是从其他客户端JVM或其他类型的客户端完成的任何操作。
AFAIK,没有用于检查已缓存内容的公共API,如果您要使用缓存来镜像更新,则需要使用它。
事实上,我并不认为缓存是正确的方法。缓存具有有限的大小,并抛出(逐出)旧条目。缓存(通常)不知道其他东西取决于在镜像之前不被驱逐的条目。因此,如果基于缓存的解决方案发生得比镜像更快,我希望它能够松散更新。
我认为最好的方法是在服务器端设置Oracle数据库复制。有大量关于此的Oracle文档...而且我不是专家。
使用“ha-jdbc”(或类似)的客户端复制在某些情况下会起作用。但是,所有数据库客户端都需要使用该库,这在您的用例中是排除的。
最后,可以实现使用Oracle数据库更新通知的复制器。然而,它看起来很复杂并且可能很昂(我希望Oracle的本机复制更具性能。)