原题目:Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程六(Spring中国教育管理中心)

5.5.15.客户地区
Apache Geode 反对用于治理和散发数据的各种部署拓扑。Apache Geode 拓扑的主题超出了本文档的范畴。然而,疾速回顾一下,Apache Geode 反对的拓扑可分为:对等 (p2p)、客户端-服务器和广域网 (WAN)。在最初两个配置中,通常会申明连贯到缓存服务器的客户端区域。

Spring Data for Apache Geode 通过其客户端缓存元素为每个配置提供专门的反对: client-region和pool. 顾名思义,client-region定义了一个客户端区域,同时pool定义了一个由各种客户端区域应用和共享的连接池。

以下示例显示了典型的客户端区域配置:

<bean id="myListener" class="example.CacheListener"/>

<!-- client Region using the default SDG gemfirePool Pool -->
<gfe:client-region id="Example">
<gfe:cache-listener ref="myListener"/>
</gfe:client-region>

<!-- client Region using its own dedicated Pool -->
<gfe:client-region id="AnotherExample" pool-name="myPool">
<gfe:cache-listener ref="myListener"/>
</gfe:client-region>

<!-- Pool definition -->
<gfe:pool id="myPool" subscription-enabled="true">
<gfe:locator host="remoteHost" port="12345"/>
</gfe:pool>
与其余 Region 类型一样,client-region反对CacheListener实例以及 aCacheLoader 和 a CacheWriter。它还须要一个连贯Pool来连贯到一组定位器或服务器。每个客户区域能够有本人的Pool,也能够共享同一个。如果未指定池,则将应用“DEFAULT”池。

在后面的示例中,Pool配置了一个定位器。定位器是一个独自的过程,用于发现分布式系统中的缓存服务器和对等数据成员,举荐用于生产零碎。也能够Pool应用该server元素将 配置为间接连贯到一个或多个缓存服务器。

对于选项来设置客户端上,特地是对的残缺列表Pool,请参阅阿帕奇的Geode架构春数据(“春数据为Apache的Geode模式”)和Apache的Geode对文档 的客户端-服务器配置。

客户利益
为了最小化网络流量,每个客户端能够独自定义本人的“趣味”策略,向 Apache Geode 批示它理论须要的数据。在 Spring Data for Apache Geode 中,能够别离为每个客户端区域定义“趣味”。反对基于键和基于正则表达式的趣味类型。

以下示例显示了基于键和基于正则表达式的interest类型:

<gfe:client-region id="Example" pool-name="myPool">

<gfe:key-interest durable="true" result-policy="KEYS">    <bean id="key" class="java.lang.String">         <constructor-arg value="someKey"/>    </bean></gfe:key-interest><gfe:regex-interest pattern=".*" receive-values="false"/>

</gfe:client-region>
非凡键 ,ALL_KEYS示意为所有键注册了“趣味”。应用正则表达式".*".

该<gfe:*-interest>键和正则表达式的元素反对三个属性:durable,receive-values,和result-policy。

durable批示当客户端连贯到集群中的一个或多个服务器时为客户端创立的“趣味”策略和订阅队列是否跨客户端会话保护。如果客户端来到并返回,durable则在客户端断开连接的同时保护客户端服务器上的订阅队列。当客户端从新连贯时,客户端会接管在客户端与集群中的服务器断开连接时产生的任何事件。

集群中服务器上的订阅队列为Pool客户端中定义的每个连贯保护,其中订阅也已“启用” Pool。订阅队列用于存储(并可能合并)发送到客户端的事件。如果订阅队列是长久的,它会在客户端会话(即连贯)之间继续存在,可能达到指定的超时。如果客户端在给定的工夫范畴内没有返回,则客户端池订阅队列将被销毁,以缩小集群中服务器的资源耗费。如果订阅队列不是durable,当客户端断开连接时立刻销毁。您须要决定您的客户端是应该接管断开连接时呈现的事件,还是只须要在从新连贯后接管最新的事件。

该receive-values属性批示是否为创立和更新事件接管条目值。如果true,则接管值。如果false,则只接管生效事件。

最初,'result-policy' 是一个枚举:KEYS, KEYS_VALUE, 和NONE。默认为KEYS_VALUES。result-policy当客户端第一次连贯以初始化本地缓存时,它管制初始转储,本质上是为客户端提供与趣味策略匹配的所有条目标事件。

Pool如前所述,如果不启用 上的订阅,客户端趣味注册并没有多大用处。事实上,在未启用订阅的状况下尝试注册趣味是谬误的。以下示例显示了如何执行此操作:

<gfe:pool ... subscription-enabled="true">
...
</gfe:pool>
此外subscription-enabled,您还能够设置subscription-ack-interval、
subscription-message-tracking-timeout、 和subscription-redundancy。subscription-redundancy用于管制集群中的服务器应该保护多少订阅队列的正本。如果冗余大于 1,并且“次要”订阅队列(即服务器)呈现故障,则“辅助”订阅队列接管,避免客户端在 HA 场景中失落事件。

除了Pool设置之外,服务器端区域还应用附加属性
enable-subscription-conflation来管制发送到客户端的事件的合并。这也有助于进一步缩小网络流量,并且在应用程序只关怀条目标最新值的状况下很有用。然而,当应用程序保留产生的事件的工夫序列时,合并将妨碍该用例。默认值为false。以下示例显示了服务器上的 Region 配置,客户端蕴含[CACHING_]PROXY对此服务器 Region 中的密钥感兴趣的相应客户端Region:

<gfe:partitioned-region name="ServerSideRegion" enable-subscription-conflation="true">
...
</gfe:partitioned-region>
要管制客户端与集群中的服务器断开连接后保护“长久”订阅队列的工夫量(以秒为单位),请 按如下形式设置元素durable-client-timeout上的属性<gfe:client-cache>:

<gfe:client-cache durable-client-timeout="600">
...
</gfe:client-cache>
对于客户利益如何运作和能力的全面深刻探讨超出了本文档的范畴。

无关 更多详细信息,请参阅 Apache Geode 对于客户端到服务器事件散发的文档 。

5.5.16.JSON 反对
Apache Geode 反对在 Regions 中缓存 JSON 文档,以及应用 Apache Geode OQL(对象查询语言)查问存储的 JSON 文档的能力。通过应用JSONFormatter类执行与 JSON 文档的转换(作为),JSON 文档在外部存储为 PdxInstance类型。String

Spring Data for Apache Geode 提供了一个<
gfe-data:json-region-autoproxy/>元素,使 AOP组件可能倡议适当的代理区域操作,它无效地封装了JSONFormatter,从而让您的应用程序间接应用 JSON 字符串。

此外,写入到 JSON 配置区域的 Java 对象会应用 Jackson 的 ObjectMapper. 当这些值被读回时,它们将作为 JSON 字符串返回。

默认状况下,<
gfe-data:json-region-autoproxy/>对所有 Region 执行转换。要将此性能利用于选定的区域,请在region-refs属性中提供以逗号分隔的区域 bean ID 列表。其余属性包含pretty-print标记(默认为false)和convert-returned-collections。

此外,默认状况下,会为配置的 Region 转换getAll()和values()Region 操作的后果。这是通过在本地内存中创立并行数据结构来实现的。这可导致显著开销大汇合,所以设置
convert-returned-collections到false,如果你想为这些地区的业务禁用主动转换。

某些地区的业务(特地是那些应用Apache的Geode的专利Region.Entry,如: entries(boolean),entrySet(boolean)和getEntry()类型)没有针对AOP倡议。此外,entrySet()办法(返回 a Set<java.util.Map.Entry<?, ?>>)也不受影响。

以下示例配置显示了如何设置pretty-print和
convert-returned-collections属性:

<gfe-data:json-region-autoproxy region-refs="myJsonRegion" pretty-print="true" convert-returned-collections="false"/>
如果GemfireTemplate模板被申明为 Spring bean,则此性能还可与操作无缝合作。目前QueryService不反对原生操作。

5.6.配置索引
Apache Geode 容许在区域数据上创立索引(有时也称为索引),以进步 OQL(对象查询语言)查问的性能。

在 Spring Data for Apache Geode 中,索引是用index元素申明的,如以下示例所示:

<gfe:index id="myIndex" expression="someField" from="/SomeRegion" type="HASH"/>
在 Spring Data for Apache Geode 的 XML 模式(也称为 SDG XML 命名空间)中,indexbean 申明不绑定到区域,这与 Apache Geode 的原生cache.xml. 相同,它们是相似于<gfe:cache>元素的顶级 元素。这使您能够在任何区域上申明任意数量的索引,无论它们是刚刚创立的还是曾经存在的——这是对 Apache Geode 的原生cache.xml格局的重大改良。

一个Index必须有一个名字。您能够Index应用该name属性为该名称指定一个显式名称。否则,将应用 bean 定义的 bean 名称(即id属性的值)index作为Index名称。

的expression和from条款模式的次要部件Index,辨认所述数据索引(即,在所辨认的地区from子句)用什么样的规范沿(即,expression)用于索引的数据。本expression应以什么样的应用程序域对象字段在利用程序定义OQL的谓语应用的查问用来查问和查找存储在该区域中的对象。

思考上面的例子,它有一个lastName属性:

@Region("Customers")
class Customer {

@Id
Long id;

String lastName;
String firstName;

...
}
当初思考以下示例,其中有一个利用程序定义的 SDG 存储库来查问Customer对象:

interface CustomerRepository extends GemfireRepository<Customer, Long> {

Customer findByLastName(String lastName);

...
}
SDG Repository finder/query 办法会生成并运行以下 OQL 语句:

SELECT * FROM /Customers c WHERE c.lastName = '$1'
因而,您可能心愿创立一个Index相似如下的语句:

<gfe:index id="myIndex" name="CustomersLastNameIndex" expression="lastName" from="/Customers" type="HASH"/>
Spring认证中国教育管理中心-Apache Geode 的 Spring 数据教程六
该from子句必须援用无效的现有区域,并且是如何Index将 a 利用于区域。这不是特定于 Apache Geode 的 Spring Data。它是 Apache Geode 的一个个性。

该Index type可能是由Spring数据为Apache的Geode的定义了三种枚举值的一个 IndexType枚举: FUNCTIONAL,HASH,和PRIMARY_KEY。

每个枚举值对应于在理论创立(或“定义”——您能够在下一节中找到无关“定义”索引的更多信息)时调用的办法之一。例如,如果是,则 调用
QueryService.createKeyIndex(..)以创立.QueryService create[|Key|Hash]IndexIndexIndexTypePRIMARY_KEYKEY Index

默认值为FUNCTIONAL并导致QueryService.createIndex(..)调用办法之一。请参阅 Spring Data for Apache Geode XML 模式以获取残缺的选项集。

无关 Apache Geode 中索引的更多信息,请参阅Apache Geode 用户指南中的“应用索引”。

5.6.1.定义索引
除了Index在 Spring 容器初始化时 Spring Data for Apache Geode 解决 bean 定义时事后创立索引,您还能够在应用define 属性创立它们之前定义所有应用程序索引,如下所示:

<gfe:index id="myDefinedIndex" expression="someField" from="/SomeRegion" define="true"/>
当define设置为true(默认为false)时,它实际上不会Index在那个时候创立。当 SpringApplicationContext被“刷新”时,或者换句话说,当 aContextRefreshedEvent由 Spring 容器公布时,所有“定义的”索引都是一次性创立的。Spring Data for Apache Geode 将本人注册ApplicationListener为ContextRefreshedEvent. 触发时,Apache Geode 的 Spring Data 调用
QueryService.createDefinedIndexes().

定义索引并同时创立它们能够进步创立索引的速度和效率。