共计 6334 个字符,预计需要花费 16 分钟才能阅读完成。
原题目: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().
定义索引并同时创立它们能够进步创立索引的速度和效率。