我们正在使用JTA事务和hibernate进行集群企业应用程序,以便在JBoss EAP上部署数据库操作。
为了提高系统性能,我们计划使用Jboss数据网格。这就是我计划使用jboss数据网格的方法:
但是,我对数据网格有以下问题:
答案 0 :(得分:0)
Galder的评论是正确的,最佳实践是将Infinispan用作第二级缓存提供程序。独自实现它很容易出现计时问题(缓存中有陈旧/未更新的条目)。
关于查询:使用2LC查询缓存时,在缓存中保留“ sql查询”->“结果列表”的映射。但是,一旦您更新了查询中使用的任何类型,所有这些查询都将失效(例如,如果查询中列出了年龄> 60岁的人,则更新新生儿仍然会使该查询无效)。因此,只有在查询优先于更新时,才应启用此功能。
Infinispan拥有自己的查询支持,但是将其用作2LC提供程序时不会公开。假定缓存仅保留数据库中实体的(最常访问的)子集子集,因此此类查询的结果将不正确。
如果您想使用Infinispan但要保持数据库的持久性,则可以选择使用JPA缓存存储(和索引)。请注意,尽管没有经过Infinispan的DB更新不会反映在缓存中,并且索引编制可能会有些滞后(因为它是异步的)。您可以拆分数据集,并将JPA用于一个部分,并将Infinispan + JPA缓存存储用于另一个部分。
第三个选择是使用Hibernate Search,它将数据保留在数据库中,但索引存储在Lucene中(也可能存储在Infinispan缓存中),并且您不使用Criteria API,而是使用Hibernate Search API。