Events 当更新表数据时,DB2能告诉web应用程序吗?

Events 当更新表数据时,DB2能告诉web应用程序吗?,events,web-applications,db2,Events,Web Applications,Db2,我在DB2数据库上有一个非常大的表,在另一个应用程序中,每个用户输入一天更新X次。我的web应用程序也会读取此表,以便向另一组用户显示一些信息。我的web应用程序上有大量用户,他们需要使用最新准确的数据进行大量模糊字符串查找。因此,我需要一个服务器端缓存来执行模糊逻辑,并防止数据库受到攻击 那么,最好的选择是什么?当数据变化如此之少的时候,我不愿意每分钟都拉整张表。我可以设置一个触发器来更新一个较小表的时间戳,并轮询该时间戳,以查看是否需要刷新缓存,但这对我来说似乎有点麻烦 理想情况下,我希望D

我在DB2数据库上有一个非常大的表,在另一个应用程序中,每个用户输入一天更新X次。我的web应用程序也会读取此表,以便向另一组用户显示一些信息。我的web应用程序上有大量用户,他们需要使用最新准确的数据进行大量模糊字符串查找。因此,我需要一个服务器端缓存来执行模糊逻辑,并防止数据库受到攻击

那么,最好的选择是什么?当数据变化如此之少的时候,我不愿意每分钟都拉整张表。我可以设置一个触发器来更新一个较小表的时间戳,并轮询该时间戳,以查看是否需要刷新缓存,但这对我来说似乎有点麻烦


理想情况下,我希望DB2在发生变化时告诉我的web应用程序,或者至少提供一个非常轻量级的机制来检测数据级别的变化

我认为如果您的web应用程序在WebSphere中运行,那么设置MQ将是一个非常好的解决方案

您可以编写触发器,使用向队列添加内容,您的web应用程序可以订阅队列并侦听更新


如果您的web应用程序不在WebSphere中,那么您仍然可以考虑此选项,但这可能会更加困难。

我认为如果您的web应用程序在WebSphere中运行,设置MQ将是一个非常好的解决方案

您可以编写触发器,使用向队列添加内容,您的web应用程序可以订阅队列并侦听更新


如果您的web应用程序不在WebSphere中,那么您仍然可以考虑使用此选项,但这可能会更加困难。

一个简单的解决方案可能是为表中的最新更改设置时间戳(某处)。

时间戳可以位于由更新大表的应用程序或大表上的更新触发器更新的小表/视图中。
更新触发器唯一的任务是用currenttimestamp更新“帮助”-时间戳。

那么webapp只会检查这个时间戳。
如果时间戳比webapp的更新,则从大表中重新读取数据。

一种“低技术”的解决方案,对现有系统来说是相当非侵入性的。

希望此解决方案适合您的设置。

问候

Sigersted

一个简单的解决方案是为表中的最新更改设置时间戳(某处)。

时间戳可以位于由更新大表的应用程序或大表上的更新触发器更新的小表/视图中。
更新触发器唯一的任务是用currenttimestamp更新“帮助”-时间戳。

那么webapp只会检查这个时间戳。
如果时间戳比webapp的更新,则从大表中重新读取数据。

一种“低技术”的解决方案,对现有系统来说是相当非侵入性的。

希望此解决方案适合您的设置。

问候

Sigersted

让数据库将消息推送到您的webapp当然可以通过各种机制(如mqseries等)实现。类似且更简单的方法是编写一个java存储过程,该过程由触发器启动,并将数据交给缓存维护接口。但这两种解决方案都涉及很多版本控制依赖项,等等,这可能是一个真正的PITA

另一个选择可能是重新考虑整个方法。有没有可能不在应用程序端维护缓存,而是在原始表上执行文本搜索


但我的建议是按照你(和另一张海报)提到的那样做——只需更新一个单行表中的时间戳,然后让你的web应用程序轮询该表。类似地,您可以将更改的行推送到这个小表中,并让缓存维护程序从此表中提取。这两种方法都非常容易实现,而且应该非常可靠

通过各种机制(如mqseries等),让数据库将消息推送到您的webapp当然是可行的。类似且更简单的方法是编写一个java存储过程,该过程由触发器启动,并将数据交给缓存维护接口。但这两种解决方案都涉及很多版本控制依赖项,等等,这可能是一个真正的PITA

另一个选择可能是重新考虑整个方法。有没有可能不在应用程序端维护缓存,而是在原始表上执行文本搜索


但我的建议是按照你(和另一张海报)提到的那样做——只需更新一个单行表中的时间戳,然后让你的web应用程序轮询该表。类似地,您可以将更改的行推送到这个小表中,并让缓存维护程序从此表中提取。这两种方法都非常容易实现,而且应该非常可靠

我在我的问题中说过。。。可以设置一个触发器来更新一个较小表的时间戳,并轮询该表以查看是否需要刷新缓存,但这似乎有点“啊,是的”。是的。仍然不是一个糟糕的解决方案。我在我的问题中说过。。。可以设置一个触发器来更新一个较小表的时间戳,并轮询该表以查看是否需要刷新缓存,但这似乎有点“啊,是的”。是的。仍然不是一个糟糕的解决方案。这看起来可能有效。我们使用WebLogic,所以我不确定这会有多棘手。这看起来可能会奏效。我们使用WebLogic,所以我不确定这会有多棘手。“更容易的是编写java存储过程”——我没有意识到DB2可以编写java存储过程,这可能是可行的。“在原始表上搜索文本”--请注意我对模糊逻辑的评论。此外,我们按MIP付费,这件事需要快一点。“更新单行表中的时间戳”--可行,但我宁愿使用EDA而不是轮询解决方案。“将更改的行推送到这个小表”