Может ли DB2 сообщить веб-приложению, когда обновляются данные таблицы? - PullRequest
2 голосов
/ 18 ноября 2009

У меня есть таблица нетривиального размера в базе данных DB2, которая обновляется X раз в день для каждого пользовательского ввода в другом приложении. Эта таблица также читается моим веб-приложением для отображения некоторой информации другим пользователям. У меня есть большое количество пользователей в моем веб-приложении, и им нужно много раз искать нечеткие строки с точностью до минуты. Итак, мне нужен кэш на стороне сервера, чтобы включить мою нечеткую логику и не дать забить БД.

Итак, какой вариант лучше? Я не хотел бы тянуть всю таблицу каждую минуту, когда данные изменяются так редко. Я мог бы установить триггер для обновления временной метки таблицы меньшего размера и опроса, чтобы узнать, нужно ли мне обновлять кэш, но это кажется хаком.

В идеале, я бы хотел, чтобы DB2 сообщала моему веб-приложению, когда что-то меняется, или, по крайней мере, предоставляла очень легкий механизм для обнаружения изменений уровня данных.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2009

Простое решение может состоять в том, чтобы иметь временную метку (где-то) для последнего изменения в таблице.

Временная метка может находиться в небольшой таблице / представлении, которое обновляется либо приложением, которое обновляет большую таблицу, либо триггером обновления на большой таблице.
Единственной задачей update-triggers было бы обновить «help» -timestamp с помощью currenttimestamp.

Тогда веб-приложение проверяет только эту метку времени.
Если временная метка новее, чем у веб-приложения, данные перечитываются из большой таблицы.

«Низкотехнологичное» решение, которое довольно не навязчиво существующей системе.

Надеюсь, что это решение подходит вам.

Привет
Sigersted

0 голосов
/ 24 ноября 2009

Наличие базы данных для отправки сообщения в ваше веб-приложение, безусловно, выполнимо с помощью различных механизмов (например, mqseries и т. Д.). Аналогичным и более простым является написание хранимой процедуры Java, которая запускается триггером и передает данные в ваш интерфейс обслуживания кэша. Но оба эти решения включают в себя множество зависимостей версий и т. Д., Которые могут быть настоящей PITA.

Другим вариантом может быть пересмотр всего подхода. Возможно ли, чтобы вместо поддержки кэша на стороне вашего приложения вы могли выполнять поиск текста в исходной таблице?

Но я предлагаю сделать то, что вы (и другой автор) упомянули, - и просто обновить временную метку в таблице из одной строки, предназначенной для этого, а затем сделать так, чтобы ваше веб-приложение провело опрос этой таблицы. Точно так же вы можете просто перенести измененные строки в эту небольшую таблицу - и ваша программа обслуживания кэша извлечет ее из этой таблицы. Любой из них очень прост в реализации - и должен быть очень надежным.

0 голосов
/ 18 ноября 2009

Я думаю, что если ваше веб-приложение работает в WebSphere, настройка MQ была бы довольно хорошим решением.

Вы можете написать триггеры, которые используют подпрограммы MQ Series для добавления объектов в очередь, и ваше веб-приложение может подписаться на очередь и прослушивать обновления.

Если ваше веб-приложение не находится в WebSphere, вы все равно можете посмотреть на эту опцию, но она может быть более сложной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...