Каналы (соединения)

Чтобы обратиться с запросом к СУБД, любое клиентское приложение должно предварительно открыть канал (установить соединение с ядром СУБД).

Канал СУБД ЛИНТЕР – это механизм, осуществляющий обмен данными между клиентским приложением и ядром СУБД. Управление каналами выполняется с помощью интерфейса, используемого клиентским приложением для доступа к БД (интерфейс нижнего уровня (CALL-интерфейс), прикладной интерфейс и т.п.) (рисунок 12). Каналы имеют свой уникальный числовой номер. Канал открывается при установлении соединения с СУБД ЛИНТЕР (после успешной идентификации и аутентификации пользователя), неявно жестко связывается с конкретным клиентским процессом и используется в дальнейшем для выполнения любых действий этого приложения с БД.

Схема доступа к БД
Рисунок 12. Схема доступа к БД

Архитектура СУБД ЛИНТЕР требует, чтобы клиентские приложения использовали разные (не пересекающиеся между ними) каналы. Параллельная (совместная) работа разных клиентских приложений по одному и тому же каналу невозможна. С каналом в ядре СУБД связаны различные характеристики, например:

  • имя сетевого узла, на котором находится БД;

  • идентификатор пользователя;

  • режим обработки транзакций;

  • кодировка обрабатываемых данных;

  • приоритет канала;

  • диагностика последнего кода завершения;

  • признак ожидания завершения асинхронной операции.

Очередь активных каналов в СУБД ЛИНТЕР обеспечивает квантование обработки запросов сразу по нескольким каналам: в каждый момент времени по одному из активных каналов нить ядра СУБД выполняет порцию (квант) текущей команды, затем выбирается следующий активный канал и т.д.

Канал может быть открыт как подчиненный от другого канала. В этом случае исходный канал играет роль соединения, а подчиненный – роль курсора.

Курсор – это канал, который связан с родительским каналом частью общих характеристик. С курсором соотносится область данных, описывающая состояние выполнения поискового SQL-запроса (например, результаты поискового запроса и последняя выданная запись). По одному и тому же курсору могут выполняться различные SQL-запросы, но курсор всегда будет содержать состояние последнего выполненного SQL-запроса. Приложение может открывать столько курсоров, сколько требуется (в рамках ограничений по памяти).

При открытии курсора устанавливается новый канал связи с СУБД ЛИНТЕР. Этому каналу идентификация и аутентификация уже не нужны, т.к. клиентское приложение уже выполнило соединение по главному каналу. Курсорный канал является дочерним (подчиненным) каналом по отношению к тому соединению, внутри которого он создается.

Соединение – средство объединения нескольких курсоров в одну транзакцию. Команда COMMIT/ROLLBACK, поданная по соединению, относится ко всем курсорам этого соединения. При закрытии соединения закрываются и все открытые в нем курсоры.

Как правило, приложение создает одно соединение (главный канал), и открывает внутри него несколько курсоров (подчиненных каналов), хотя может использовать и несколько независимых главных каналов. При открытии главного канала указывается, в частности, сервер СУБД ЛИНТЕР (логическое имя компьютера в локальной сети, на котором функционирует СУБД ЛИНТЕР и находится нужная БД). Открыв несколько главных каналов к разным серверам СУБД, приложение может одновременно работать с несколькими БД.

Открытие (закрытие) каналов, как и все другие операции доступа к БД, выполняются на уровне интерфейса нижнего уровня, используемого всеми программными интерфейсами СУБД ЛИНТЕР.

Механизм каналов обеспечивает параллельную обработку запросов, т.к. запросы, посланные по различным каналам, будут обрабатываться параллельно. По одному каналу запросы могут обрабатываться только последовательно.

Размер очереди каналов является параметром конфигурирования СУБД. Он определяет максимальное количество одновременных подключений к СУБД.