Цитата: Oleg K. от 02.02.2017 10:11:19Ну тогда я не знаю, как вы можете обоснованно рассуждать о работе в реальном времени, не понимая, как оно устроено до самого нижнего уровня. Вы же не знаете, что используете...
Ну то есть сделать вы это можете ("раз работало так раньше - то и сейчас будет работать"), но аргументированно что-либо утверждать - нет. И рассуждения ваши о базах данных и их применимости мне теперь кажутся пустыми.
1) Как работают в деталях БД - чтобы правильно ответить на все вопросы - нужно быть одним из разработчиков БД - тогда будешь знать все нюансы работы конкретного продукта. Я им не являюсь, а использую что есть. Написано в литературе подписка на события - я использую этот термин. Возможно, у других авторов документации/литературы может быть свои мнения.
2) Реальную картину, как это работает, можно получить только в боевых условиях. Абсолютно все предусмотреть невозможно, хотя и необходимо. Потому как теория -это одно, а практика, как показывает жизнь - это совсем другое. То, что должно теоретически рабоать так как задумано, в реальности так не работает. Поэтому я очень много экспериментирую, прежде чем использую ту или иную вещь, алгоритм. У меня лежит много тестовых программ, на которых я отрабатываю отдельные элементы, выбирая оптимальный вариант для конкретной задачи.
Элементы механизма
Инициаторами событий являются операции изменения состояния базы данных - успешно выполненные операции INSERT, UPDATE и DELETE. Сигнализация о событии выполняется в триггерах или хранимых процедурах с помощью оператора PSQL
POST_EVENT.
Однако POST EVENT является только одним элементом этого механизма- изолированно он ничего не делает. Это просто посылка сигнала слушающим приложениям. Он не несет никакой информации, о каком событии базы данных он сигнализирует; задачей приложения является обеспечение собственного контекста для каждого события.
Сам механизм событий состоит из нескольких взаимодействий между серверной стороной и приложением.
Элементы на стороне сервера
Элементами на стороне сервера являются:
* один или более триггеров или хранимых процедур, которые выдают оператор
POST_EVENT;
* внутренняя таблица событий - адресат вызовов POST_EVENT - содержит список направленных ей событий процедурами и триггерами во время работы транзакций, при которых возникли события;
* подсистема управления внутренними событиями, которая поддерживает список прослушивающих и ожидающих приложений и работает как "полицейский- регулировщик" для направления соответствующих событий прослушивающим приложениям.
Элементы приложения
На стороне приложения этому механизму нужно:
* приложение, которое способно зарегистрировать свой интерес в событиях;
* другие приложения, которые выполняют те операции DML, которые прослушивает заинтересованное приложение.
Естественно, прослушивающему приложению также необходим механизм реагирования на события.
Элементы интерфейса
При пересылке событий от сервера клиенту используется пара портов, отличная от порта, используемого в главном канале клиент-сервер (обычно порт 3050). Сервер и клиентская библиотека находят произвольную пару портов для использования в качестве трафика событий.
Элементом программного обеспечения является клиентская подпрограмма, называемая функцией обратного вызова события. Это код на клиенте, который вызывается сервером для информирования клиента о событиях, как только подтвердится транзакция, в рамках которой было отправлено ожидаемое событие. Для встроенных приложений предкомпилятор gpre генерирует код для таких функций обратного вызова. Для динамических приложений, которые хотят выполнять прослушивание синхронно (см. следующий раздел), как это делают приложения ESQL, функция обратного вызова содержится в клиентской библиотеке. Динамические приложения могут - и обычно так и делают - прослушивать асинхронно (см. разд. "Асинхронная сигнализация" и "Асинхронное прослушивание"). Для этого они должны предоставить пользовательскую функцию обратного вызова, называемую асинхронным перехватчиком (Asynchronous Trap, AST).