And*_*tyn 14 java caching hibernate cluster-computing second-level-cache
我正在试图找出应该为我的应用程序使用哪种缓存并发策略(特别是实体更新).该应用程序是使用Hibernate开发的Web服务,部署在Amazon EC2集群上并在Tomcat上运行,因此没有应用程序服务器.
我知道,有非严格读写\读写和事务的可更新并且有成熟的,流行的,生产就绪2L缓存提供Hibernate数据缓存并发策略:Infinispan的,的Ehcache,Hazelcast.
但我并不完全理解Hibernate文档中的事务和读写缓存之间的区别.我认为事务缓存是集群应用程序的唯一选择,但现在(在阅读了一些主题之后),我对此并不那么确定.
所以我的问题是关于读写缓存.它是集群安全的吗?它是否保证数据库和缓存之间的数据同步以及所有连接的服务器之间的同步?或者它只适用于单服务器应用程序,我应该总是喜欢事务缓存?
例如,如果正在更新实体字段(名字等)的数据库事务失败并已回滚,那么读写缓存是否会丢弃更改,或者只是填充错误数据(更新后的名字)到所有其他节点?这需要JTA交易吗?
JBoss TreeCache的并发策略配置作为第二级Hibernate缓存主题说:
'READ_WRITE`是一个有趣的组合.在这种模式下,Hibernate本身就是一个轻量级的XA协调器,所以它不需要一个完整的外部XA.它的工作原理简短说明:
- 在这种模式下,Hibernate管理事务本身.所有数据库操作必须在事务内,自动提交模式将不起作用.
- 在flush()期间(可能在事务生存期内多次出现,但通常在提交之前发生)Hibernate会通过一个会话并搜索更新/插入/删除的对象.然后,这些对象首先保存到数据库,然后在高速缓存中锁定和更新,因此并发事务既不能更新也不能读取它们.
- 如果事务随后被回滚(显式或由于某些错误),则锁定的对象被简单地释放并从缓存中逐出,因此其他事务可以读取/更新它们.
- 如果事务成功提交,则只需释放锁定的对象,其他线程可以读/写它们.
是否有一些文档如何在集群环境中工作?
似乎事务高速缓存正常工作,但需要JTA环境与独立事务管理器(如JBossTM,Atomikos,Bitronix),XA数据源以及大量配置更改和测试.我设法部署了这个,但我的框架仍然存在一些问题.例如,Google Guice IoC不支持JTA事务,我必须用Spring替换它或将服务移动到某个应用程序服务器并使用EJB.
那么哪种方式更好?
提前致谢!
到目前为止,我只看到群集2LC与事务缓存模式一起使用。这正是Infinispan所做的,实际上,Infinispan到目前为止还没有实现其他缓存并发模式。为了减轻事务负担,Infinispan通过与Hibernate(而非XA)的事务同步进行集成。
归档时间: |
|
查看次数: |
13387 次 |
最近记录: |