第 5 章 创建持续查询


应用程序可以注册监听程序来接收有关与查询过滤器匹配的缓存条目的持续更新。

5.1. 持续查询

持续查询为应用程序提供关于通过查询过滤的 Data Grid 缓存中数据的实时通知。当条目与查询 Data Grid 匹配时,会将更新的数据发送到任何监听程序,它提供事件流,而不是必须执行查询的应用程序。

持续查询可以通知应用程序有关传入匹配项、加入集合的值;更新匹配,以获得已修改并继续匹配项的匹配值;以及传出的匹配,对于离开该集合的值。

例如,持续查询可以通知应用程序:

  • 在 18 到 25 之间有年龄的个人,假设 Person 实体具有 年龄 属性,并由用户应用程序更新。
  • 交易量超过 2000美元.
  • F1 竞争者的 lap 速度小于 1:45.00 秒时,假设缓存包含 Lap 条目,并在竞争过程中输入 laps。
注意

持续查询可以使用所有查询功能,但分组、聚合和排序操作除外。

持续查询的工作方式

持续查询使用以下事件通知客户端监听程序:

join
缓存条目与查询匹配。
Update(更新)
与查询匹配的缓存条目已更新,仍然与查询匹配。
leave
缓存条目不再与查询匹配。

当客户端注册一个连续查询监听程序时,它会立即接收与查询匹配的任何条目的 Join 事件。客户端监听程序在每次缓存操作修改与查询匹配的条目时接收后续事件。

Data Grid 决定将 JoinUpdate 或 Leave 事件发送到 客户端监听程序的时间,如下所示:

  • 如果旧值和新值的查询不匹配,则 Data Grid 不会发送事件。
  • 如果旧值的查询不匹配,但新值不匹配,则 Data Grid 会发送 Join 事件。
  • 如果旧值和新值上的查询都匹配,Data Grid 会发送 Update 事件。
  • 如果对旧值的查询匹配但新值不匹配,则 Data Grid 会发送 Leave 事件。
  • 如果对旧值的查询匹配并且条目被删除或过期,则 Data Grid 会发送 Leave 事件。

5.1.1. 持续查询和数据网格性能

持续查询为应用程序提供持续的更新流,从而产生大量事件。Data Grid 会临时为它生成的每个事件分配内存,这可能会导致内存压力,并可能导致 OutOfMemoryError 异常,特别是对于远程缓存。因此,您应该仔细设计您的连续查询以避免出现性能影响。

Data Grid 强烈建议您将持续查询的范围限制为您需要的最小信息。要达到此目的,您可以使用 projections 和 predicates。例如,以下语句只提供与条件匹配的字段子集而不是整个条目的结果:

SELECT field1, field2 FROM Entity WHERE x AND y

还需要确保创建的每个 continuous QueryListener 可以快速处理所有接收的事件,而无需阻塞线程。要达到此目的,您应该避免任何不必要地生成事件的缓存操作。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.