From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/FireBird and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська
Модуль Ім'я Версія Ліцензія Джерело Мови Платформи Тип Автор Опис
FireBird БД FireBird 2.2 GPL2 bd_FireBird.so en,uk,ru,de x86,x86_64,ARM БД Роман Савоченко Модуль БД. Надає підтримку СУБД FireBird.

Модуль надає до OpenSCADA підтримку СУБД FireBird, та InterBase, яка є невеликою та вбудованою СУБД з функціями мережевої та підтримкою SQL-запитів. FireBird побудовано на основі комерційної СУБД InterBase та вона розповсюджується за вільною ліцензією. Ознайомитися з СУБД можна на сайті http://www.firebirdsql.org. Модуль засновано на бібліотеці API виробника СУБД на мові "С" та він дозволяє виконувати дії над базами даних, таблицями та вмістом таблиць.

1 Операції над БД

Підтримуються операції відкриття та закриття БД, з можливістю створення нової БД при відкритті та видалення існуючої при закритті. У термінах підсистеми "БД" OpenSCADA, відкриттям БД є її реєстрація для наступного використання програмою. Також, підтримується операція запиту переліку таблиць у БД.

СУБД FireBird адресується шляхом визначення ім'я файлу БД, користувача та пароля. Загалом адреса БД записується наступним чином: {file};{user};{pass}[;{conTm}]. Де:

  • file — повне ім'я файлу БД;
  • user — користувач БД, від ім'я якого здійснюється доступ;
  • pass — пароль користувача, від ім'я якого здійснюється доступ;
  • conTm — таймаут підключення, секунд.

2 Операції над таблицею

Підтримуються операції відкриття, закриття таблиці, з можливістю створення нової таблиці при відкритті та видалення існуючої при закриті, а також запит структури таблиці.

3 Операції над вмістом таблиці

  • сканування записів таблиці;
  • запит значень визначених записів;
  • встановлення значень визначених записів;
  • видалення записів.

API підсистеми "БД" передбачає доступ до вмісту таблиці за значенням ключового(их) полів. Так, операція запиту запису передбачає попереднє встановлення ключових стовпчиків об'єкту TConfig, за яким буде здійснено запит. Створення нового запису(рядка) здійснюється операцією встановлення значень запису, який відсутній.

Модуль дозволяє динамічно міняти структуру таблиць БД FireBird. Так, у випадку невідповідності структури таблиці та структури запису що встановлюється, структуру таблиці буде приведено до потрібної структури запису. У випадку запиту значень запису та невідповідності структур запису і таблиці, буде отримано тільки значення загальних елементів запису та таблиці. Модуль не відстежує послідовності розташування елементів запису та структури таблиці, крім цього операція зміни типу стовпчика не є безпечною та дані у стовпчиках що змінюються буде втрачено!

Модулем реалізується механізм підтримки багатомовних текстових змінних. Для полів із багатомовною текстовою змінною створюються стовпчики окремих мов у форматі "{lang}#{FldID}" (en#NAME). При цьому, базовий стовпчик містить значення для базової мови. Стовпчики окремих мов створюються за потреби, у момент збереження до БД та при виконанні OpenSCADA у відповідній локалі. У випадку відсутності значень для конкретної мови буде використано значення для базової мови.

Типи елементів СУБД FireBird наступним чином відповідають типам елементів OpenSCADA:

Типи полів OpenSCADA Типи полів FireBird
TFld::String VARCHAR, BLOB SUBTYPE TEXT
TFld::Integer INTEGER
TFld::Real DOUBLE
TFld::Boolean SMALLINT

4 Доступ до БД

Права доступу до БД визначаються правами файлу БД.

Коротко розглянемо процедуру первинного налаштування серверу FireBird, з метою підключення до нього за допомогою цього модуля:

  • Встановлення СУБД FireBird у вигляді пакету або збіркою.
  • Запуск СУБД:
    # Запуск класичного серверу
    $ service firebird start
    # Запуск у супер-сервері
    $ service xinetd restart
  • Встановлення потрібного пароля системного користувача "sysdba":
    $ gsec -user sysdba -pass masterkey -mo sysdba -pw 123456
  • Підключення до СУБД за допомогою цього модуля, ввівши адресу БД: "/var/tmp/test.fbd;sysdba;123456"

5 Продуктивність СУБД

Вимірювання продуктивності СУБД здійснювалося тестом "БД" модуля тестів "SystemTests", шляхом виконання операцій над записами структурою: "name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string".

Operations for 1000 records, seconds FireBird 2.5
AMD Turion L625 1.6, 2G, FireBird [2.1.3 Local SuperServer; 100Base-TX; 2.5.2 100Base-TX SuperServer ForcedWrites=Off; ForcedWrites=On]
Intel(R) Core(TM) i3 CPU 1.33GHz, 3G, HDD [2.5.2 100Base-TX SuperServer ForcedWrites=Off; ForcedWrites=On]
FireBird 3
Intel(R) Core(TM) i7 CPU 2.6GHz, 12G, FastSSD, Local network
Creating: [0.93; 1.15; 4.4; 5.2]; [3.68; 4.67] 0.5
Updating: [2.74; 2.94; 5.1; 5.2]; [3.88; 4.54] 0.47
Getting: [1.64; 2.22; 5.0; 27.8]; [3.69; 28.8] 2.95
Seeking: - ; [5.36; 32] 3.3
Seeking in preload: - ; [0.045; 0.065] 0.047
Deleting: [0.65; 1.04; 2.0; 2.4]; [1.69; 1.66] 0.17

6 Зауваження

СУБД FireBird має багато архітектурних обмежень та проблем у зв'язку із спадковістю InterBase та батьківської ОС MS Windows, які заважають її широкому використанню у багатьох задачах. Відомі проблеми:

  • СУБД повільніше у порівнянні з MySQL або PostgreSQL, див. попередній розділ. Особливо у режимі ForcedWrites On(sync).
  • СУБД має фіксоване обмеження на розмір виразу SQL у 65536 КБ, яке заважає розташуванню великого вмісту виключно за посередництвом SQL.
  • Класичний сервер на Linux, у режимі вимикання ForcedWrites, може намертво зависати.
  • Відсутній контроль за лімітами часу підключення, що призводить до тривалого та неконтрольованого очікування у клієнтських додатках.