hibernate中的一级缓存维护在会话对象上,并且在同一JVM的边界内。它是hibernate使用的强制缓存。我担心的是如何在集群环境中管理it。多个节点将拥有自己的一级缓存(等于会话数)。在单个JVM中,一个实体可以是不同会话的一部分,但事务管理器、乐观锁定可以处理这种情况。。。。但是,我们将如何在集群环境中管理it
1)一个实体可以在两个不同节点的一级缓存中被修改,导致数据过时、数据丢失等问题。
2) 如果我们使用乐观锁定。。。。这将很难恢复事务,而且可能会影响其他节点上的其他有用事务。
3) 我们不能对每个事务都使用悲观锁。这将破坏hibernate缓存的可用性。
4)隔离级别的设置也不起作用,因为事务管理是由Hibernate应用程序本身完成的,并且事务管理的边界是一个JVM。
一级缓存不会产生过时的数据,我一直在集群环境中使用JPA Hibernate,没有任何相关问题。重要的是事务的隔离级别。如果您不希望其他节点读取未限制的数据,请确保您至少使用read\u Committed级别。
您的第一条语句不正确,hibernate中的一级缓存不维护在同一JVM的边界内。它维护在Hibernate会话的边界内。
Hibernate单独处理会话(会话中的实体,这是一级缓存),即使在同一个jvm中,也可以在一个jvm中有多个Hibernate会话。
关于集群中不同节点上的不同一级缓存中的实体的问题与在同一jvm上的两个会话中这些实体发生了什么相同。
可能您没有收到错误,但如果节点不同,则不是无错误安排。事务管理由hibernate应用程序本身完成。它不使用数据库事务管理(悲观锁定的情况除外)。隔离级别的边界是单个JVM。
hibernate中的事务管理直接映射到DB事务,“hibernate事务启动”仅通过调用“DB事务启动”(通过JDBC或JTA)来标记。关于隔离级别,这与jvm无关,也不受其约束。
你的另一个问题
你不能在不同的节点上使用不同的隔离级别吗????如果是???将会发生什么。。。。如果没有???您将在哪个节点上收到错误消息????
这取决于执行的db语句的精确顺序以及全局或使用db事务设置的隔离级别。
我使用Spring调度程序,使用@调度注释来调度运行文件生成服务的作业。应用程序部署在集群环境中Tomcat的5个单独节点上,用于负载平衡和故障转移。正因为如此,服务被调度了5次,这是不可能的。有没有办法将调度程序配置为仅在当前节点上运行? 有一种方法使用数据库找出当前活动节点,并在这里调用该特定实例的调度器 另一种方法是使用石英调度器 由于我无法对部署的应用程序进行重大更改,是否有简单的解决方案
问题内容: 将Singleton对象重构到集群环境的最佳策略是什么? 我们使用Singleton从数据库中缓存一些自定义信息。它 主要是 只读的,但是在发生某些特定事件时会刷新。 现在,我们的应用程序需要部署在集群环境中。根据定义,每个JVM将具有自己的Singleton实例。因此,当在单个节点上发生刷新事件并且刷新其缓存时,JVM之间的缓存可能不同步。 保持缓存同步的最佳方法是什么? 谢谢。 编
目前Cloud-ML生态云只有武清集群。这个集群的基本配置如下: 武清集群 集群目前包括若干台CPU和GPU节点。 集群的Endpoint为:https://cnbj2.cloudml.api.xiaomi.com
主要内容:缓存,Hibernate 一级缓存,快照区Hibernate 是一款全自动 ORM 框架,它会在应用程序访问数据时,自动生成 SQL 语句并执行,因此开发人员不需要自己编写 SQL 语句,但这也造成它无法像 MyBatis 一样,能够直接从 SQL 层面严格控制其执行性能以及对数据库的访问频率,所以很容易出现性能不佳的情况。 为此,Hibernate 提供了多种性能优化手段(例如 HQL、懒加载策略、抓取策略以及缓存机制),其中缓存机制是
我的应用程序出现OutOfMemory异常。我已经把垃圾堆和垫子翻了个底朝天。在分析我的应用程序内存使用情况时,我发现以下疑点。我无法理解这些嫌疑人背后的主要原因。 请帮助我了解这种泄漏的怀疑和什么相关的解决方案。 “AJP-Bio-9002”-exec-5 at java.util.arrays.copyof([ci)[C(arrays.java:2882)at java.lang.abstra
我使用EhCache框架来缓存应用程序数据,并考虑使用JGroups缓存复制来复制集群环境中的缓存。 它真的是集群环境中缓存复制的行业标准吗?或者,我应该考虑其他更好的选择。请注意,此时我没有使用任何集中式缓存服务器。我已经在JGroups缓存复制上做了POC。你能就它的健壮性和主要关注点分享你的经验吗?使用JGroups进行缓存复制的利弊是什么?