我们的设计有一个jvm这是一个boss/webapp(read/write),用于维持数据通过休眠(访问用户使用)的数据库。该模型具有10-15个持久类有3-5级别的深度的关系。

然后我们有一个独立的jvm是服务器使用这些数据。因为它是连续运行我们只有一个长db届会议(只读)。

目前没有内jvm缓参与-所以我们手一个信号jvm从其他。

现在当的网络应用程序的变化的一些数据,它的信号服务器重新加改变的数据。我们发现,我们需要告诉休眠清除的数据,然后重新装载它。只是做一个取/合并数据库不做的工作,主要是在尊重的对象几层下的层次结构。

任何想法是否有什么事情从根本上是错误的这个设计或如果任何人都是这样做的,并具有更好的运气与工作与休眠状态的重新加载。

谢谢, 克里斯

有帮助吗?

解决方案

休眠的会议载所有的数据读取的数据库成什么样他们叫的 第一级高速缓存.一旦一个行载入数据库,任何随后获取的行与同一PK将返回的数据,从这一高速缓存。此外,休眠gaurentees的参考平等的对象相同的PK在一个单一的会议。

从什么我明白了,你只读的服务器应用程序永远不会关闭它的休眠届会议。所以当该数据库得到最新通过的读写的应用程序,该届会议上只读服务器是不知道的改变。有效的,你只读应用程序是装在存储器数据库的副本和使用,复制、获取陈旧在适当的时候。

最简单和最好的行动当然我可以建议是以关闭和开放的会议的需要。这避免整个问题。休眠的会议旨在以一个窗口,一个短暂的交互数据库。我同意是有效得不重新装载的对象的图一次又一次但你需要衡量它,并说服自己,它是值得的痛苦。

另一种选择是将关闭并重新打开的会议周期性。这将确保只读应用程序的工作与数据不超过一定时间间隔。但那肯定是一个窗口,在这里只读应用程序的工作,与陈旧的数据(尽管设计保证它得到的最新数据的最终).这可能是允许的,在许多应用的-你需要评估的情况。

第三个选择是使用 第二级缓存 执行,并使用短暂的会议。有各种不同的缓存软件包的工作与休眠有相对优点和缺点。

其他提示

克里斯,我有点困惑你的情况。如果我理解正确的话,你有一个网络应用程序(read/write)一个独立的应用程序(只读?) 使用休眠访问一个共用数据库。您做的变动与网络的应用程序是不可见的独立的应用程序。是这样吗?

如果是这样,你有没有考虑使用一个不同的二级缓执行?我想知道如果你可能可以使用的群集的高速缓存,共享通过这两个网络应用程序和独立的应用程序。我认为,SwarmCache,这是综合与休眠,将允许这样做,但是我没尝试过了我自己。

在一般情况下,虽然,你应该知道的内容给予高速缓冲将永远不会知道的活动由另一个应用程序(这就是为什么我建议具有两个应用程序共享缓冲存储)。祝你好运!

从我的角度看,你应该改变你的强调,休眠的高速缓存这一个,它支持集群模式。这可能是一个 Boss缓存群缓存.第一个拥有一个更好的支助的数据同步(复制和失效)以及也支持JTA。

然后你将能够配置高速缓存之间的同步网络应用程序和服务器。还看看隔离水平,如果你将使用Boss缓存。我认为你应该使用 READ_COMMITTED 模式,如果你想获得新的服务器上的数据来自同一届会议。

最常用的实践是有一个 容器管理实体管理 因此,两个或多个应用程序在相同的容器(即下、Tomcat Websphere)可能共享相同的缓冲。但如果你不使用应用程序的容器,因为你使用玩!例如,然后我将建立一些web服务在 主要应用程序 阅读写一直在高速缓存。

我认为,使用过时的数据是一个敞开的门用于灾害。只是喜欢单身成为Multitons、只读应用往往是一个 有时候写.

带牙套 :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top