Oracle Coherence中文教程二十三:使用连续查询缓存

使用连续查询缓存

虽然有可能取得时间从连贯缓存查询结果中的一个点,并有可能以接收事件,将改变该查询的结果,连贯性提供了一个功能,它结合了与一个连续的数据流中的相关事件的查询结果在一个实时的方式保持一个最新的日期的查询结果。这种能力被称作连续查询,因为它具有相同的效果,如果想要查询的零延迟和查询被执行多次,每毫秒!点时间查询结果和事件的更多信息,请参见第22章,“查询缓存中的数据。”

相干物化成一个连续查询缓存查询结果,然后,缓存保持最新实时查询使用事件侦听器实现连续查询功能。换句话说,一个连贯性的连续查询是一个缓存的查询结果,永远不会过期。

本章包含以下各节:

连续查询缓存的用途

连续查询缓存相干

构建连续查询缓存

只缓存键,或缓存键和值

监听ContinuousQueryCache的

使ContinuousQueryCache只读

23.1利用连续查询缓存

有几种不同的连续查询缓存一般用途类别:

它是一种理想的建筑块的复杂事件处理(CEP )系统和事件关联引擎。

这是理想的情况下,应用程序重复一个特定的查询,并且将受益于总是具有即时访问,查询到最新的结果。

连续查询缓存类似于物化视图,和一个查询的结果使用标准NamedCache API用于访问和操作,并接收该查询相关的事件持续流是非常有用的。

到接近缓存类似的方式,可以使用一个连续查询缓存,因为它保持一个最新的最新的一组本地正在使用它的数据,例如特定服务器上的节点或客户机上的桌面;注意,近缓存是无效的,但实际上连续查询缓存中维护其数据的最新方式。

一个例子使用的情况下是一个交易系统桌面,其中一位交易员的未结订单和所有相关的信息,必须始终保持在最新的方式。通过结合连续查询缓存相干*扩展功能,应用程序可以支持几十数千个并发用户。

注意事项:

连续查询缓存是非常有用的,因为它们提供了几乎所有类型的应用程序,包括基于客户端和基于服务器的应用程序的能力,很容易和有效地维护一个指定的子集到最新的本地副本更大,可能分布的高速缓存的数据集。

23.2 Coherence连续查询缓存

相干实施连续查询发现在com.tangosol.net.cache.ContinuousQueryCache类。这一类,像所有相干缓存,实行标准NamedCache的接口,其中包括以下功能:

缓存访问和操作使用的地图界面: NamedCache扩展了标准的Java集合框架,它的界面是相同的JDK的HashMap和Hashtable类实现的Map接口。

活动的所有对象的修改发生在缓存中: NamedCache延伸的ObservableMap接口。

基于身份的的群集范围锁定在缓存中的对象: NamedCache ConcurrentMap接口扩展。

查询缓存中的对象: NamedCache扩展属性查图的界面。

分布式并行处理和聚合缓存中的对象: NamedCache延伸接口InvocableMap 。

由于的ContinuousQueryCache实现NamedCache的接口,这是相同的API所提供的所有相干高速缓存,它是非常简单的使用,它可以很容易地取代的另一个高速缓存时,它的功能要求。

23.3构建一个连续查询缓存

有两个项目定义连续查询缓存:

它是基于底层的缓存;

产生子集,底层的缓存查询,连续查询缓存缓存。

底层的缓存是任何连贯性高速缓存,包括另一个连续查询缓存。高速缓存通常是获得递给CacheFactory ,它允许开发人员只需指定名称的缓存,它会自动配置基于应用程序的缓存配置信息,例如:

NamedCache cache = CacheFactory.getCache("orders");

见附录B , “缓存配置元素”的更多信息,指定缓存配置信息。

查询是将用于相同类型的查询,例如:

例23-1连续查询缓存的查询

Filter filter = new AndFilter(new EqualsFilter("getTrader", traderid),

new EqualsFilter("getStatus", Status.OPEN));

参见第22章“查询缓存中的数据”更多信息查询。

通常情况下,查询缓存,属性查方法的例子,此交易的所有开放的行业获得一个快照:

例23-2连续查询缓存中获取数据

Set setOpenTrades = cache.entrySet(filter);

同样,那些相同的两片连续查询缓存构造:

示例23-3构造连续查询缓存

ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter);

23.3.1清理相关的资源与ContinuousQueryCache

连续查询缓存放置一个或多个事件侦听器,其底层的缓存。如果连续查询缓存用于该应用程序的持续时间,然后清洁的资源时,该节点被关闭或以其他方式停止。但是,如果连续查询缓存仅用于一个时期,然后使用它来完成应用程序时,应用程序必须调用release()方法在ContinuousQueryCache上。

23.4只缓存键,或缓存键和值

当构建一个连续查询缓存,它是可以指定缓存应该只跟踪的关键,从查询的结果,并获得只有当它们被要求从底层的缓存值。创建一个连续的,代表一个非常大的查询结果集的查询缓存这个功能可能是有用的,如果值是从来没有或很少要求。要指定唯一的键应该是高速缓存,使用构造函数允许的CacheValues??属性进行配置,例如:

例23-4构造函数允许CacheValues属性

ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter, false);

如果有必要,也可以进行修改的CacheValues??属性缓存已经被实例化后,例如:

例23-5设置CacheValues属性

cacheOpenTrades.setCacheValues(true);

23.4.1 CacheValues属性和事件监听器

如果连续查询缓存有任何标准(非精简版)的事件监听器,或者如果任何事件侦听器过滤,然后的CacheValues??属性被自动设置为true ,因为连续查询缓存使用本地缓存的值来过滤事件供货旧的和新的值,它会引发的事件。

23.5监听ContinuousQueryCache

由于连续查询缓存本身是可观察的,它有可能为客户端在其上放置一个或多个事件侦听器。例如:

例23-6连续查询缓存中添加一个监听器

ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter);

cacheOpenTrades.addMapListener(listener);

假设一些处理发生缓存和每一个项目添加到缓存中,在对每一个项目,有两种方法。首先,处理可能发生的然后可以添加一个侦听器来处理任何后来增加:

例23-7处理连续查询缓存条目的添加一个监听器


ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter);

for (Iterator iter = cacheOpenTrades.entrySet().iterator(); iter.hasNext(); )

{

Map.Entry entry = (Map.Entry) iter.next();

// .. process the cache entry

}

cacheOpenTrades.addMapListener(listener);

然而,这代码是不正确的,因为它允许迭代后前监听在一瞬间发生的事件被添加到被错过!另一种方法是先添加一个侦听器,所以没有事件被错过,然后做加工:

例23-8添加一个监听器在处理连续查询缓存条目


ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter);

cacheOpenTrades.addMapListener(listener);

for (Iterator iter = cacheOpenTrades.entrySet().iterator(); iter.hasNext(); )

{

Map.Entry entry = (Map.Entry) iter.next();

// .. process the cache entry

}

然而,相同的条目可以出现在这两个事件中的迭代,事件可以是异步的,所以不能得到保证的操作顺序。

解决的办法是在施工期间提供侦听器,它接收到一个事件的连续查询缓存中的每个项目,是否它在那里,因为它是在查询开始( )或过程中或之后添加了,如果是缓存建设:

例23-9建设提供一个监听器,当连续查询缓存

ContinuousQueryCache cacheOpenTrades = new ContinuousQueryCache(cache, filter, listener);

23.5.1实现一个稳定的物化视图

ContinuousQueryCache实现面临着同样的挑战:如何组装一个确切的时间点的快照,底层的缓存,同时接收来自同一缓存的修改事件流。该解决方案有几个部分。首先, Coherence支持同步事件的一个选项,它提供了一组排序保证。此选项的更多信息,请参见第21章“使用高速缓存活动”, 。

其次, ContinuousQueryCache其初始人口,允许其先查询底层的缓存,然后解决所有的事件,排在第一阶段期间有一个两阶段实施。由于实现这些数据可见性担保没有任何缺失或重复的事件是相当复杂的,的ContinuousQueryCache允许开发人员通过一个监听器,在建设过程中,从而避免让这些相同的应用程序开发人员的复杂性。

23.5.2支持同步和异步的听众

默认情况下,听众ContinuousQueryCache的异步传递他们的活动。然而,的ContinuousQueryCache尊重如由SynchronousListener接口提供的同步事件的选项。此选项的更多信息,请参见第23章“使用连续查询缓存, ” 。

23.6制作ContinuousQueryCache的只读

ContinuousQueryCache可制作成一个只读缓存,例如:

示例23-10连续查询缓存只读

cacheOpenTrades.setReadOnly(true);

不允许只读ContinuousQueryCache的对象添加,更改,删除或锁定在缓存中。

当一个ContinuousQueryCache已被设置只读,不能改回读/写。

时间: 2024-10-06 23:15:53

Oracle Coherence中文教程二十三:使用连续查询缓存的相关文章

Oracle Coherence中文教程二十一:使用缓存事件

使用缓存事件 Coherence提供缓存使用JavaBean事件模型的事件.收到你的需要,你需要他们的地方,不管变化实际上是发生在集群中的事件,这是非常简单的.熟悉JavaBean模型的开发应与事件工作有没有困难,即使在复杂的群集. 本章包含以下各节: 监听器接口和事件对象 了解事件担保 支持活动的缓存和类 注册的所有活动 使用内部类作为MapListener 配置一个MapListener一个Cache 具体身份签约活动 过滤事件 "精简版"的活动 高级:听查询 高级:合成事件 高级

Oracle Coherence中文教程二:安装Oracle Coherence

安装Oracle Coherence 本章提供说明安装Oracle Coherence的java(简称为Coherence).本章不包括安装连贯性的说明*扩展的客户端分发(C ++和.NET)或相干*网站.请参阅Oracle Coherence的客户指南和Oracle Coherence的Oracle Coherence的网络,用户指南,安装这些组件的说明. 本章包含以下各节: 系统要求 提取分派 设置环境变量 初次运行连贯性 2.1系统需求 以下是建议的最低系统要求安装在开发环境中的连贯性:

Oracle Coherence中文教程二十:预加载缓存

预加载缓存 本章介绍了不同的模式,你可以用它来预加载缓存.该模式包括批量装载和分布载荷. 本章包含以下各节: 执行批量加载和处理 执行分布式批量加载 20.1执行批量加载和处理 例20-5, PagedQuery.java ,演示了在一个连贯缓存技术,有效地批量加载和处理项目. 20.1.1批量写入缓存 使用连贯性时,一个常见的场景是预先填充缓存应用程序使用它之前.一个简单的方法来做到这例20-1中的Java代码所示: 例20-1预加载缓存 public static void bulkLoad

Oracle Coherence中文教程二十五:Map管理操作触发器

Map管理操作触发器 Map触发补充标准的Oracle Coherence的能力,以提供高度自定义的缓存管理系统.例如,地图触发器可以防止非法交易,执行复杂安全授权或复杂的业务规则,提供透明的事件日志和审计,并收集统计数据修改.触发器的其他可能用途,包括限制行动,打击一个缓存,在应用程序重新部署时间发出. 例如,假设你有代码是与NamedCache工作,条目插入地图之前,你想改变一个条目的行为或内容.除了地图触发,而无需修改现有的代码,使你做出这种改变. 地图触发器也可以作为升级过程的一部分.除

Oracle Coherence中文教程二十六:使用Coherence Query语言

使用Coherence Query语言 本章介绍如何使用连贯性的查询语言(CohQL)互动与连贯性高速缓存. CohQL是一个重量轻语法(SQL的传统),用于执行高速缓存操作上的连贯群集.语言可用于以编程方式或从一个命令行工具. 本章包含以下各节: 了解连贯性查询语言语法 使用命令行工具CohQL 大厦过滤器在Java程序 其他相干查询语言范例 注意事项: 虽然可能会出现CohQL语法类似于SQL,重要的是要记住,不是SQL的语法,实际上是更多的上下文相关的Java持久化查询语言(JPQL)标准

Oracle Coherence中文教程二十四:在高速缓存中的数据处理

在高速缓存中的数据处理 coherence提供了理想的基础设施建设数据网格服务和客户端和基于服务器的应用程序使用数据网格.在一个基本的层面上,相干可以在大量的服务器在网格管理一个巨大的数据量,它可以提供接近零延迟访问该数据,它支持跨数据的并行查询中的map-reduce方式;它支持数据库和EIS系统,作为该数据的记录系统的集成.此外,Coherence提供一些服务,这是建立有效的数据网格的理想选择. 本章包含以下各节: 有针对性的执行 并行执行 基于查询的执行 数据网格范围内执行 代理针对性,并

Oracle Coherence中文教程十五:序列化分页缓存

序列化分页缓存 本章提供了大量的二进制数据的离堆缓存信息. 本章包含以下各节: 了解序列化分页缓存 分页缓存配置序列化 优化分区的高速缓存服务 配置高可用性 配置负载平衡和故障转移 支持巨大的缓存 15.1了解序列化分页缓存 Coherence提供高效巨额自动过期数据使用潜在的高延迟的存储机制,如磁盘文件缓存的明确支持.其优点包括支持更大的数据集可以管理在内存中,同时保留出了管理时序的一个有效的终止机制(和自动释放的资源管理有关的) ,该数据.最佳使用场景包括许多大型对象存储能力,很少访问XML

Oracle Coherence中文教程十三:实施存储和备份的Map

本章提供的信息存储使用备份地图.本章包含以下各节: 缓存层 本地存储 操作 容量规划 使用分区的备份地图 使用弹性数据功能来存储数据 使用三角洲备份的 13.1高速缓存层 分区(分布式)缓存服务在Coherence中有三个不同的层次: 客户视图 - 客户端视图代表一个虚拟层提供访问底层分区的数据.进入这一层提供使用NamedCache接口.在这一层,你也可以创建合成数据结构,如NearCache或ContinuousQueryCache的. 存储管理 - 存储管理器,服务器端负责处理高速缓存相关

Oracle Coherence中文教程十九:使用便携式对象格式

使用便携式对象格式 使用便携式对象格式(POF)具有许多优点,包括语言独立性的性能优势.建议你仔细看您的系列化解决方案时,在POF工作具有连贯性.对于如何使用POF建设.NET时,延长客户的信息,请参阅"楼宇集成对象NET客户端"Oracle Coherence的客户端指南.对于如何构建C++扩展客户时,与POF的信息,请参阅"楼宇集成对象的C + +客户端"Oracle Coherence的客户端指南. 本章包含以下各节: POF系列化概述 使用POF API序列