E-mail:
Пароль:
Забыли пароль?

Защищённая СУБД ЛИНТЕР в среде ОС реального времени QNX

Защищённая СУБД ЛИНТЕР в среде ОС реального времени QNX

Конференция «QNX-Россия-2010»

Ермаков Михаил, Борисенков Дмитрий

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

Группа компаний РЕЛЭКС в течение 20 лет занимается разработкой российской СУБД. С 1990 года ЛИНТЕР работает на предприятиях самых разных отраслей экономики страны: финансы (банки, финансовые управления и т.д.), безопасность (подразделения МВД РФ, МО РФ, ЧОПы и т.д.), управление (государственные учреждения, министерства, ведомства и т.д.), промышленность (добывающая, нефтегазовая, атомная, авиационная и т.д.).

Среди решений, реализованных на СУБД ЛИНТЕР можно выделить сотни различных систем, функционирующих на ОС РВ QNX у наших заказчиков: ФГУ РНЦ «Курчатовский институт», ОАО «Сургутнефтегаз», ОАО «Концерн «ВЕГА», ОАО «ВНИИРА-ОВД», РФЯЦ-ВНИИЭФ г. Саров, РФЯЦ-ВНИИЭТ г. Снежинск, и других предприятий.

Говоря об ОС РВ QNX в целом, следует отметить некоторые особенности, о которых должны знать разработчики программного обеспечения для этой платформы. Все они связаны с функционированием файловой системы.

Первая особенность, с которой столкнулись программисты РЕЛЭКС – файловая система QNX не поддерживает файлы размером больше 2Гб. При этом есть одна интересная деталь – если написать файл размером ровно 2Гб, то последний байт не записывается, точнее, при считывании считывается на 1 байт меньше.

Вторая особенность заключается в том, что операции write и read, выполняемые для блочного файла и с границы в 512 байт (в нашем случае 4096), могут завершиться с указанием на факт считывания меньшего количества байт (кратного 512, но меньшего 4096).

Третья особенность – очень редкая ситуация, при которой операция write завершается с ошибкой нехватки памяти. Эта ошибка не предусмотрена ни в документации QNX, ни в стандарте. Анализ исходного текста примера драйвера для QNX показал, что такая ситуация действительно возможна в случае недостатка оперативной памяти.

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

Важно и то, что ЛИНТЕР поддерживает более 20 программно-аппаратных платформ – как для клиентской части, так и для серверной – ядра.

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

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

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

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

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

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

СУБД ЛИНТЕР позволяет назначать приоритеты исполнения запросов. В системах реального времени этому вопросу уделяется особое внимание. Возможность исполнения запросов с различными приоритетами была заложена в ЛИНТЕР с самых первых версий и с тех пор значительно усовершенствована.

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

В качестве промежуточного хранилища данных СУБД ЛИНТЕР предоставляет две возможности – временные таблицы и таблицы «в памяти» (in-memory tables).

Временные таблицы соответствуют спецификации глобальных временных таблиц SQL. Они позволяют под одним именем таблицы видеть собственные копии с собственными данными.

Таблицы «в памяти» гарантированно располагаются только в оперативной памяти, им не требуются дополнительные ресурсы – они всегда доступны для приложения и работа с ними не журнализируется, что значительно повышает производительность. В случае любой ошибки в данных или конфликта транзакций, такая таблица откатывается на последнее сохранённое состояние.

Возможность пакетной загрузки и извлечения данных является хорошим дополнением к преимуществам асинхронной работы – она позволяет продолжать обработку информации параллельно с её загрузкой большими порциями. Завершает список наиболее востребованных в системах реального времени возможностей простота интеграции СУБД ЛИНТЕР в программные пакеты. Для инсталляции как клиентской, так и серверной частей СУБД не требуется специальная процедура установки.

К другим немаловажным свойствам ЛИНТЕР относятся: поддержка сверхбольших объёмов памяти для кэширования (в 64-битных ОС), поддержка длинных файлов (в файловых системах, которые поддерживают такие файлы), поддержка Oracle-расширений (join, connect by, функций и т.п), поддержка расширений стандарта SQL 2003 (sequences, аналитические функции, siblings, similar, match, select в select и т.п), триггеры и хранимые процедуры (с возможностью вызова как пользовательских функций), ссылочная целостность с возможностью отложенных проверок целостности, графические утилиты администрирования и утилиты командной строки, различные программные интерфейсы (кроме внутренних это odbc, jdbc, .NET, OLEDB, perl, php, python, Ruby) и множество других возможностей.


Возврат к списку

ѕрокрутить вверх