HarmonyOS 鸿蒙Next Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四 Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四(Spring中国教育管理中心)

5.5.4.压缩

Apache Geode Regions 也可能被压缩,以减少 JVM 内存消耗和压力,从而可能避免全局 GC。当您为区域启用压缩时,存储在该区域内存中的所有值都将被压缩,而键和索引保持未压缩状态。新值在放入 Region 时被压缩,所有值在从 Region 读回时自动解压缩。当保存到磁盘或通过线路发送到其他对等成员或客户端时,值不会被压缩。

以下是启用压缩的区域示例:

<beans>
  <gfe:replicated-region id="exampleReplicateRegionWithCompression">
    <gfe:compressor>
      <bean class="org.apache.geode.compression.SnappyCompressor"/>
    </gfe:compressor>
  </gfe:replicated-region>
</beans>

有关区域压缩的更多信息,请参阅 Apache Geode 的文档。

5.5.5.堆外

Apache Geode Regions 也可以配置为将 Region 值存储在堆外内存中,这是 JVM 内存的一部分,不受垃圾收集 (GC) 的影响。通过避免昂贵的 GC 周期,您的应用程序可以将更多时间花在重要的事情上,例如处理请求。

使用堆外内存就像声明要使用的内存量然后启用您的区域使用堆外内存一样简单,如以下配置所示:

<util:properties id="gemfireProperties">
  <prop key="off-heap-memory-size">200G</prop>
</util:properties>

<gfe:cache properties-ref="gemfireProperties"/>

<gfe:partitioned-region id="ExampleOffHeapRegion" off-heap="true"/>

您可以通过使用<gfe:cache>元素设置以下 Apache Geode 配置属性来控制堆外内存管理的其他方面:

<gfe:cache critical-off-heap-percentage="90" eviction-off-heap-percentage="80"/>

Apache GeodeResourceManager将使用这两个阈值 (critical-off-heap-percentage & eviction-off-heap-percentage) 来更有效地管理堆外内存,其方式与 JVM 在管理堆内存时所做的大致相同。Apache GeodeResourceManager将通过驱逐旧数据来防止缓存消耗过多的堆外内存。如果堆外管理器无法跟上,则ResourceManager拒绝向缓存添加内容,直到堆外内存管理器释放足够数量的内存。

有关管理堆和堆外内存的更多信息,请参阅 Apache Geode 的文档。

具体来说,请阅读“ 管理堆外内存”部分。

5.5.6.次区域

Spring Data for Apache Geode 也支持 Sub-Regions,允许 Region 以层级关系排列。

例如,Apache Geode 允许一个/Customer/Address区域和一个不同的/Employee/Address区域。此外,一个子区域可能有自己的子区域和配置。子区域不会从其父区域继承属性。区域类型可以混合和匹配受 Apache Geode 约束。Sub-Region 自然地被声明为 Region 的子元素。Sub-Region 的name属性是简单的名称。前面的示例可能配置如下:

<beans>
  <gfe:replicated-region name="Customer">
    <gfe:replicated-region name="Address"/>
  </gfe:replicated-region>

  <gfe:replicated-region name="Employee">
    <gfe:replicated-region name="Address"/>
  </gfe:replicated-region>
</beans>

请注意,该[id]属性不允许用于子区域。子区域是使用 bean 名称创建的(在本例中分别为 /Customer/Address 和 /Employee/Address)。因此,它们可能会通过使用区域的完整路径名注入到其他需要它们的应用程序 bean 中,例如。还应在 OQL 查询字符串中使用区域的完整路径名。

5.5.7.区域模板

Spring Data for Apache Geode 也支持 Region 模板。

此功能允许开发人员一次性定义公共 Region 配置和属性,并在 Spring 中声明的多个 Region bean 定义中重用该配置ApplicationContext。

Spring Data for Apache Geode 在其命名空间中包含五个 Region 模板标签:

除了标签之外,具体<gfe:*-region>元素(连同抽象<gfe:*-region-template>元素)还有一个template属性,用于定义区域模板,区域从该模板继承其配置。区域模板甚至可以从其他区域模板继承。

以下示例显示了一种可能的配置:

<beans>
  <gfe:async-event-queue id="AEQ" persistent="false" parallel="false" dispatcher-threads="4">
    <gfe:async-event-listener>
      <bean class="example.AeqListener"/>
    </gfe:async-event-listener>
  </gfe:async-event-queue>

  <gfe:region-template id="BaseRegionTemplate" initial-capacity="51" load-factor="0.85" persistent="false" statistics="true"
      key-constraint="java.lang.Long" value-constraint="java.lang.String">
    <gfe:cache-listener>
      <bean class="example.CacheListenerOne"/>
      <bean class="example.CacheListenerTwo"/>
    </gfe:cache-listener>
    <gfe:entry-ttl timeout="600" action="DESTROY"/>
    <gfe:entry-tti timeout="300" action="INVLIDATE"/>
  </gfe:region-template>

  <gfe:region-template id="ExtendedRegionTemplate" template="BaseRegionTemplate" load-factor="0.55">
    <gfe:cache-loader>
      <bean class="example.CacheLoader"/>
    </gfe:cache-loader>
    <gfe:cache-writer>
      <bean class="example.CacheWriter"/>
    </gfe:cache-writer>
    <gfe:async-event-queue-ref bean="AEQ"/>
  </gfe:region-template>

  <gfe:partitioned-region-template id="PartitionRegionTemplate" template="ExtendedRegionTemplate"
      copies="1" load-factor="0.70" local-max-memory="1024" total-max-memory="16384" value-constraint="java.lang.Object">
    <gfe:partition-resolver>
      <bean class="example.PartitionResolver"/>
    </gfe:partition-resolver>
    <gfe:eviction type="ENTRY_COUNT" threshold="8192000" action="OVERFLOW_TO_DISK"/>
  </gfe:partitioned-region-template>

  <gfe:partitioned-region id="TemplateBasedPartitionRegion" template="PartitionRegionTemplate"
      copies="2" local-max-memory="8192" persistent="true" total-buckets="91"/>
</beans>

区域模板也适用于子区域。请注意,“TemplateBasedPartitionRegion”扩展了“PartitionRegionTemplate”,后者扩展了“ExtendedRegionTemplate”,后者扩展了“BaseRegionTemplate”。在后续继承的 Region bean 定义中定义的属性和子元素会覆盖父元素中的内容。

模板的工作原理

Spring Data for Apache Geode 在ApplicationContext解析Spring配置元数据时会应用 Region 模板,因此必须按照继承的顺序声明 Region 模板。换句话说,父模板必须在子模板之前定义。这样做可确保应用正确的配置,尤其是在覆盖元素属性或子元素时。

同样重要的是要记住 Region 类型只能从其他类似类型的 Region 继承。例如,一个 <gfe:replicated-region> 不可能从一个 <gfe:partitioned-region-template> 继承。

区域模板是单继承的。

关于区域、子区域和查找的注意事项

此前,的基本属性之一 replicated-region,partitioned-region,local-region,和 client-region 在春季的数据元素的 Apache 的 Geode XML 命名空间是第一次尝试创建一个区域之前执行查找。这是在 Region 已经存在的情况下完成的,如果该 Region 是在导入的 Apache Geode 本机 cache.xml 配置文件中定义的,则会出现这种情况。因此,首先执行查找以避免任何错误。这是设计使然,可能会发生变化。

此行为已更改,现在默认行为是先创建区域。如果 Region 已经存在,则创建逻辑会快速失败并抛出适当的异常。但是,与 CREATE TABLE IF NOT EXISTS … DDL 语法非常相似 ,Apache Geode <gfe:*-region> XML 命名空间元素的 Spring Data 现在包含一个 ignore-if-exists 属性,该属性通过在尝试创建区域之前首先执行按名称标识的现有区域的查找来恢复旧行为。如果通过名称找到现有 Region 并将 ignore-if-exists 设置为 true,则忽略 Spring 配置中定义的 Region bean 定义。

Spring 团队强烈建议仅将 replicated-regionpartitioned-regionlocal-region,和 client-region XML 命名空间元素严格用于定义新区域。当这些元素定义的 Regions 已经存在并且 Region 元素首先执行查找时可能出现的一个问题是,如果您在应用程序配置中为驱逐、到期、订阅等定义了不同的 Region 语义和行为,那么 Region 定义可能不匹配,并可能表现出与应用程序要求的行为相反的行为。更糟糕的是,您可能希望将 Region 定义为分布式 Region(例如,PARTITION),而实际上现有的 Region 定义仅是本地的。

推荐做法 - 仅使用 replicated-regionpartitioned-regionlocal-region,和 client-region XML 命名空间的元素来定义新的地区。

5.5.8.数据驱逐(溢出)

基于各种限制,每个区域都可以有一个驱逐策略,用于从内存中驱逐数据。目前,在 Apache Geode 中,驱逐适用于最近最少使用的条目(也称为 LRU)。被驱逐的条目要么被破坏,要么被分页到磁盘(称为“溢出到磁盘”)。

Spring Data for Apache Geode 通过使用嵌套 eviction 元素支持分区区域、复制区域和客户端、本地区域的所有驱逐策略(条目计数、内存和堆使用)。

例如,要配置一个 PARTITION Region 在内存大小超过 512 MB 时溢出到磁盘,您可以指定以下配置:

<gfe:partitioned-region id="examplePartitionRegionWithEviction">
  <gfe:eviction type="MEMORY_SIZE" threshold="512" action="OVERFLOW_TO_DISK"/>
</gfe:partitioned-region>

副本不能使用 local destroy 驱逐,因为这会使它们无效。有关更多信息,请参阅 Apache Geode 文档。

在为溢出配置 Region 时,您应该通过 disk-store 元素配置存储以获得最大效率。

有关驱逐政策的详细说明,请参阅有关驱逐的 Apache Geode 文档。


更多关于HarmonyOS 鸿蒙Next Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

写的太详细了 收藏了

更多关于HarmonyOS 鸿蒙Next Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好家伙,没有一句是废话

全是干货,顶礼膜拜。已收藏

针对帖子标题“HarmonyOS 鸿蒙Next Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程四”所隐含的问题,我们可以从鸿蒙(HarmonyOS)与Apache Geode及Spring集成的角度进行回答,同时遵循您的要求:

在HarmonyOS鸿蒙系统中,若您关注Apache Geode与Spring数据的集成教程,这通常涉及在鸿蒙应用中使用Spring框架来访问和管理Apache Geode分布式缓存数据。Apache Geode是一个开源的分布式内存数据存储,它提供了高性能、低延迟的数据访问能力,非常适合与Spring框架结合使用,以实现数据的高效管理和访问。

在教程四中,您可能会学习到如何在鸿蒙应用中配置和使用Spring Data GemFire(Spring对Apache Geode的官方支持库)来连接和操作Geode集群。这包括定义实体类、创建仓库接口、配置Geode客户端和服务器等步骤。通过这些步骤,您可以在鸿蒙应用中实现数据的分布式存储和访问,提高应用的性能和可扩展性。

如果您在按照教程操作时遇到问题,可能是由于配置错误、版本不兼容或环境设置不当等原因造成的。请仔细检查您的项目配置和代码实现,确保一切符合教程要求。如果问题依旧没法解决请联系官网客服,官网地址是:

https://www.itying.com/category-93-b0.html
回到顶部