第 5 章 创建持续查询


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

5.1. 持续查询

持续查询为应用程序提供有关查询过滤的数据的实时通知。当条目与查询数据平面将更新的数据发送到任何监听程序时,这提供了事件流,而不是需要执行查询的应用程序。

持续查询可以通知应用程序有关传入匹配项、用于已加入集合的值;针对已修改并继续匹配的匹配值,请针对已设置的值进行传出匹配。

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

  • 18 到 25 之间的年龄,假设 Person 实体具有 age 属性,并由用户应用程序更新。
  • 交易大于 $2000 的交易。
  • F1 竞争器的 lap 速度小于 1:45.00 秒,假设缓存包含 Lap 条目,并在竞争期间输入 laps。
注意

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

持续查询的工作方式

持续查询会通知客户端监听程序,并带有以下事件:

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

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

Data Grid 决定何时向客户端监听程序发送 JoinUpdateLeave 事件,如下所示:

  • 如果旧值和新值的查询不匹配,Data Grid 不会发送事件。
  • 如果旧值上的查询不匹配,但新值确实会发送 加入 事件。
  • 如果旧值和新值的查询都匹配,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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.