【发布时间】:2012-11-23 02:17:24
【问题描述】:
我正在寻找 Java Web 应用程序的缓存解决方案。我们有一个 Oracle 数据库实例和 2-3 个远程到我们的数据库的实例。 我们希望将数据本地缓存到我们的应用程序,因为我们不能接受数据库响应时间。 我们的数据集是平均大小(每个表几千行),并且是从我们的应用程序手动修改的(所以不经常)(没有直接的数据库访问)。
因此,我们一直在考虑一种解决方案,该解决方案使我们能够拥有本地所需的所有数据。我们希望减少从 db 检索并重写到缓存的数据量。
因此,例如,当修改一个实体时,我们不希望使该表上的所有缓存查询无效,我们希望能够修改本地缓存的查询结果集,以便查询仍然可以从缓存的本地运行数据。 缓存必须复制它们的更改\从数据库中检索由其他应用程序实例修改的数据。
我们一直将 EhCache 视为 Hibernate 2 级缓存,但它会在任何表修改时使给定表的所有缓存查询无效。我快速浏览了 Hibernate Services,但还不知道这是否允许我们覆盖 Hibernate 二级缓存默认行为以满足我们的需求。
还有其他我们可以使用的解决方案吗?
编辑我们希望能够非常快速地访问数据。实际上,我们正在寻找的是一个 quaryable 缓存。
【问题讨论】:
-
为什么不创建一个本地数据库并将其复制到远程?除了连接字符串之外,它将避免任何代码更改,提供更快的速度并确保与远程数据库的数据一致性。
-
您是否建议每个应用程序实例使用一个数据库实例?对我来说似乎有很多设置开销。
-
否 - 在本地服务器/虚拟机上运行数据库的完整副本,然后以主/从关系将其复制到远程。
-
您仍然没有在应用层缓存任何数据,这种方法需要始终从数据库中读取任何正在处理的请求。我认为这样做是为了避免每次都受到打击数据库的惩罚。
-
我们希望能够非常快速地访问数据。实际上,我们正在寻找的是一个 quaryable 缓存。
标签: java hibernate caching ehcache