分布式缓存系统的出现解决了数据库变得过载和滞后的问题。 今天,这些分布式缓存可以处理每秒发生的数百万个数据事务的负载,但存在一个问题。
大多数企业级应用程序依赖于该数据的某些特定部分发生的变化。 这些应用程序必须根据这些变化做出关键的业务决策,并且由于这些数据的大小为数千 GB,因此监控特定的变化成为一项艰巨的任务。
为了解决这个问题 NCache,内存中的分布式缓存带来了一个称为 连续查询. 这个博客将解释连续查询是如何工作的,你可以如何配置它 NCache,以及您将从中获得什么好处。
NCache 更多信息 NCache 配套文档 下载 NCache
连续查询以监控 NCache
连续查询功能 NCache 允许您跟踪分布式缓存集群内的选择性数据集中发生的更改。 缓存中的这个选择性数据集是通过类 SQL 定义的 OQL(对象查询语言) 查询。 此数据集中发生的更改以以下形式传播到应用程序(已注册事件回调) 缓存级别事件.
无论您的缓存集群有多大,您都只会收到在您定义然后在缓存中注册的数据集中发生的更改的通知。 这也是 Continuous Query 在通过 OQL 查询过滤数据时实现应用程序解耦的方式。 这种解耦确保应用程序不会相互重叠。
还应注意,Continuous Query 本身不会更改您的应用程序数据。 相反,Continuous Query 提供了一种在运行时通过事件在应用程序之间监视和共享数据的机制。 然后,开发人员通过注册连续查询事件的回调并定义其业务逻辑来确保应用程序如何处理这些数据。
在中配置连续查询 NCache
在中配置连续查询很容易 NCache. 你只需要遵循一个两步的过程。 一旦您按照这些步骤操作,您的应用程序将能够接收针对您定义的数据集的通知并采取相应措施。
这两个步骤如下:
第 1 步:注册事件回调
您需要为缓存级别事件注册回调: 已添加项目, 物品已更新, or 物品已移除. 通过这些事件,您将定义您的业务逻辑,如果这些事件之一被触发,您的应用程序应该做什么。
在下面的代码示例中,为事件 ItemAdded 注册了一个回调。
1 2 3 4 5 6 7 8 9 |
static void QueryItemCallBack(string key, CQEventArg arg) { switch (arg.EventType) { case EventType.ItemAdded: Console.WriteLine(“Item has been added”); break; } } |
第 2 步:注册查询和通知
一旦您注册了事件的回调,您必须创建一个连续查询来指定结果数据集的标准。 事件将基于此连续查询触发。 在此之后,回调将注册到查询中。 完成此操作后,查询将使用缓存服务器注册 注册CQ 方法。
下面的代码示例描述了所有这些是如何发生的。
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT $VALUE$ FROM FQN.Product WHERE Category = ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("Category", "Beverages"); // Create Continuous Query var cQuery = new ContinuousQuery(queryCommand); // Item add notification cQuery.RegisterNotification(new QueryDataNotificationCallback(QueryItemCallBack), EventType.ItemAdded, EventDataFilter.None); cache.MessagingService.RegisterCQ(cQuery); |
注销连续查询
NCache 当您不再需要通知时,您可以选择从连续查询中取消注册通知。 这是使用 取消注册通知 方法。
在以下代码示例中,事件通知从连续查询中注销。
1 |
cQuery.UnRegisterNotification(new QueryDataNotificationCallback(QueryItemCallBack), EventType.ItemAdded); |
NCache 还为您提供了从缓存集群中取消注册连续查询本身的选项。 当您不再需要它时,没有必要让它在缓存中运行,因为它会消耗资源。 要从缓存中注销连续查询, NCache 给你 取消注册CQ 方法。
在以下代码示例中,连续查询从缓存服务器中注销。
1 |
cache.MessagingService.UnRegisterCQ(cQuery); |
NCache: 最好的解决方案
对于大型复杂的业务应用程序,数据提炼是一个巨大的挑战。 流处理 in NCache 通过将大而复杂的数据转换为易于处理的数据流来应对这一挑战。
流处理的一个流行应用是 发布者 订阅者 模型 NCache. 但是,这有以下限制:
- 一旦消息被传递给订阅者,应用程序就不会保留消息。
- 数据过滤发生在客户端,使应用程序架构更加复杂。
连续查询通过以下方式解决了这两个问题:
- 即使在处理后也将数据保留在缓存中。
- 通过在服务器端而不是客户端通过相当简单的 OQL 语句过滤数据。 这确保了简单的应用程序架构。
结论
NCache 是一种速度极快、易于扩展的分布式缓存,可以有效地处理数据库瓶颈。 就像连续查询、流处理和 Pub/Sub 消息传递一样, NCache 还有许多其他丰富而强大的功能,您应该尝试一下。 这些功能为您提供定量和定性结果。 尝试 NCache 现在!