<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html class="client-nojs" dir="ltr" lang="en"> <head> <meta charset="UTF-8" /> <title>Модулі/Шлюз баз даних - OpenSCADAWiki</title> <meta content="MediaWiki 1.26.4" name="generator" /> <link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" /> <link href="../../en/files/doc.css" rel="stylesheet" /></head> <body><div class="floatright"><a href="../index.html"><img alt="OpenSCADA" src="../../en/files/index.png" /></a></div><div id="mw_header"> <div class="mw-indicators"> </div> <h1 id="firstHeading" lang="uk">Модулі/Шлюз баз даних</h1> </div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="uk"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&group=page-Modules%2FDBGate&action=page&filter=&language=uk" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/DBGate" title="Modules/DBGate">Modules/DBGate</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/DBGate.html" title="Modules/DBGate (100% translated)">English</a> • ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">УкраїнÑька</span></div></div> <table class="wikitable"> <tr> <th> Модуль </th> <th> Ім'Ñ </th> <th> ВерÑÑ–Ñ </th> <th> Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ </th> <th> Джерело </th> <th> Мови </th> <th> Платформи </th> <th> Тип </th> <th> Ðвтор </th> <th> ÐžÐ¿Ð¸Ñ </th></tr> <tr> <td> <a href="../Modules/DBGate.html" title="Special:MyLanguage/Modules/DBGate">DBGate</a> </td> <td> Шлюз БД <ul><li> <b><a href="../Program_manual.html#DBFeat" title="Special:MyLanguage/Documents/Program manual">ВлаÑтивоÑті</a>:</b> SQL, LIST, STRUCT, GET, SEEK, PRELOAD, SET, DEL, FIX, TR, ERR</li></ul> </td> <td> 1.1 </td> <td> GPL2 </td> <td> bd_DBGate.so </td> <td> en,uk </td> <td> x86,x86_64,ARM </td> <td> БД </td> <td> Роман Савоченко </td> <td> Модуль БД. ДозволÑÑ” виконувати ÑˆÐ»ÑŽÐ·ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ð· даних віддалених OpenSCADA Ñтанцій до локальних. <ul><li> <b><a href="../../en/To_do.html" title="Special:MyLanguage/Works/To do">Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ (To Do)</a>:</b></li></ul> <dl><dd>- Ñ€ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ кешу Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— fieldSeek() через глибоке ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ XML-контекÑÑ‚ на віддаленій чаÑтині.</dd></dl> </td></tr></table> <p>ОÑновною функцією цього Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ” Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… <a href="../Program_manual.html#DB" title="Special:MyLanguage/Documents/Program manual">підÑиÑтеми "Бази даних"</a> віддалених OpenSCADA Ñтанцій на локальні. Ð’ Ñвоїй роботі модуль викориÑтовує <a href="../Modules/SelfSystem.html" title="Special:MyLanguage/Modules/SelfSystem">ВлаÑний Протокол OpenSCADA</a> та ÑервіÑні функції підÑиÑтеми "Бази даних". Цей модуль може бути кориÑним: </p> <ul><li> у множинному-мережевому доÑтупі до БД віддалених Ñтанцій, побудованих на оÑнові локальних на кшталт <a href="../Modules/SQLite.html" title="Special:MyLanguage/Modules/SQLite">SQLite</a>, таким чином транÑформуючи Ñ—Ñ… у мережеві;</li> <li> у прокÑÑ–-доÑтупі до БД віддалених Ñтанцій, побудованих на оÑнові мережевих СУБД, через Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŽ OpenSCADA, Ñкий може також бути безпечним, викориÑтовуючи <a href="../Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">SSL</a>;</li> <li> у рознеÑені між мережевими ÑтанціÑми функцій Ñкладного кориÑтувацького проÑтору із чаÑтинами Збору Даних та Графічного ІнтерфейÑу, пов'Ñзаних на БД на кшталт <a href="../Libs_Prescriptions.html" title="Special:MyLanguage/Libs/Prescriptions">Рецептів</a>.</li></ul> <p>Модуль реалізує наÑтупні функції: </p> <ul><li> Ð’Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ— БД при ввімкнені об'єкту локальної БД.</li> <li> ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÑƒ наÑвних таблиць віддаленої БД.</li> <li> Ð”Ð¾Ð´Ð°Ð½Ð½Ñ Ñ–Ð· ÑтвореннÑм нових запитуваних таблиць на віддаленій БД.</li> <li> Цілковите Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð¾Ñ— таблиці на віддаленій БД.</li> <li> ÐŸÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ð½Ð¸Ñ… SQL-запитів до віддаленої БД.</li> <li> ÐŸÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ OpenSCADA запитів БД до віддаленої БД щодо: fieldStruct(), fieldSeek(), fieldGet(), fieldSet() та fieldDel().</li></ul> <div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="tocnumber">1</span> <span class="toctext">Операції над БД</span></a></li> <li class="toclevel-1 tocsection-2"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D1.8E"><span class="tocnumber">2</span> <span class="toctext">Операції над таблицею</span></a></li> <li class="toclevel-1 tocsection-3"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.B2.D0.BC.D1.96.D1.81.D1.82.D0.BE.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.96"><span class="tocnumber">3</span> <span class="toctext">Операції над вміÑтом таблиці</span></a></li> <li class="toclevel-1 tocsection-4"><a href="#.D0.9F.D1.80.D0.B0.D0.B2.D0.B0_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D1.83"><span class="tocnumber">4</span> <span class="toctext">Права доÑтупу</span></a></li> <li class="toclevel-1 tocsection-5"><a href="#.D0.9F.D1.80.D0.BE.D0.B4.D1.83.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D1.96.D1.81.D1.82.D1.8C_.D0.91.D0.94"><span class="tocnumber">5</span> <span class="toctext"><span>ПродуктивніÑть БД</span></span></a></li> </ul> </div> <h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.91.D0.94"><span class="mw-headline-number">1</span> Операції над БД</span></h2> <p>ПідтримуютьÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð‘Ð” лише Ð´Ð»Ñ Ð¾Ð±'єкту локальної БД та без можливоÑті ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— бази даних та Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ–Ñнуючої при закритті, на віддаленій Ñтанції. У термінах підÑиÑтеми "БД" OpenSCADA, відкриттÑм БД Ñ” Ñ—Ñ— реєÑтраціÑ-Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½Ð°Ñтупного викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¾ÑŽ. Також, підтримуєтьÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ переліку таблиць у віддаленій БД. </p><p>Сторінка конфігурації об'єкту БД також віддзеркалює більшіÑть влаÑтивоÑтей віддаленої БД, окрім: </p> <ul><li> "Стан > Ввімкнено" — влаÑний Ñтан Ñ– команда динамічного Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¾Ð±'єкта.</li> <li> "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ > Ідентифікатор" — влаÑний ідентифікатор об'єкту.</li> <li> "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ > {Ім'Ñ,ОпиÑ}" — влаÑні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½ÐµÐ¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ або Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ñ— БД.</li> <li> "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ > ÐдреÑа" — влаÑна адреÑа БД, далі про Ñ—Ñ— формат.</li> <li> "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ > Вмикати" — влаÑний Ñтан його Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ запуÑку програми.</li></ul> <p>БД DBGate адреÑуєтьÑÑ ÑˆÐ»Ñхом визначеннÑ-Ð¾Ð±Ñ€Ð°Ð½Ð½Ñ Ñ–Ð¼'Ñ Ð‘Ð” у форматі "<b>{ВіддаленаСтанціÑ}.{МодульБД}.{БД}</b>", де: </p> <ul><li> <i>ВіддаленаСтанціÑ</i> — віддалена ÑÑ‚Ð°Ð½Ñ†Ñ–Ñ OpenSCADA, зареєÑтрована у <a href="../Program_manual.html#Transports" title="Special:MyLanguage/Documents/Program manual">таблиці Ñтанцій OpenSCADA</a>;</li> <li> <i>МодульБД</i> — ідентифікатор Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð‘Ð” віддаленої Ñтанції;</li> <li> <i>БД</i> — ідентифікатор бази даних віддаленої Ñтанції.</li></ul> <h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B5.D1.8E"><span class="mw-headline-number">2</span> Операції над таблицею</span></h2> <p>ПідтримуєтьÑÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ віддаленої Ñтанції операцій відкриттÑ, Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ–, з можливіÑтю ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— таблиці при відкритті та Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ–Ñнуючої при закриті, а також запит Ñтруктури таблиці. </p> <h2><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BD.D0.B0.D0.B4_.D0.B2.D0.BC.D1.96.D1.81.D1.82.D0.BE.D0.BC_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.96"><span class="mw-headline-number">3</span> Операції над вміÑтом таблиці</span></h2> <p>ÐŸÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾ БД віддаленої Ñтанції операцій над таблицею: </p> <ul><li> ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів таблиці;</li> <li> запит значень визначених запиÑів;</li> <li> вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ визначених запиÑів;</li> <li> Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів.</li></ul> <p>API підÑиÑтеми "БД" передбачає доÑтуп до вміÑту таблиці за значеннÑм ключового(их) полів. Так, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ запиÑу передбачає попереднє вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¸Ñ… Ñтовпчиків об'єкту TConfig, за Ñким буде здійÑнено запит. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ запиÑу(Ñ€Ñдка) здійÑнюєтьÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ”ÑŽ вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ запиÑу, Ñкий відÑутній. </p><p>Динамічна зміна Ñтруктури таблиці залежить лише від типу пов'Ñзаної віддаленої БД. </p><p>Модуль реалізує механізм підтримки багатомовних текÑтових змінних непрÑмо функціÑми Ñдра роботи із <a href="../API.html#TBDS" title="Special:MyLanguage/Documents/API">конфігураційним файлом</a>: <i>TBDS::dataSeek()</i>, <i>TBDS::dataGet()</i> та <i>TBDS::dataSet()</i>. </p> <h2><span class="mw-headline" id=".D0.9F.D1.80.D0.B0.D0.B2.D0.B0_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D1.83"><span class="mw-headline-number">4</span> Права доÑтупу</span></h2> <p>Права доÑтупу до кінцевої БД визначаютьÑÑ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸, Ñпецифічними до типу віддаленої БД, та правами доÑтупу кориÑтувача віддаленої Ñтанції до підÑиÑтеми БД загалом, за правами опиÑаними у наÑтупній таблиці: </p> <table class="wikitable"> <tr> <th> ФункціÑ/операціÑ/ÑÐµÑ€Ð²Ñ–Ñ </th> <th> Права відноÑно до "root:BD:{інші}" </th></tr> <tr> <td> Ð’Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð‘Ð” </td> <td> W:W:- </td></tr> <tr> <td> Перелік наÑвних таблиць </td> <td> R:R:R </td></tr> <tr> <td> Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– </td> <td> W:W:- </td></tr> <tr> <td> Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– </td> <td> W:W:- </td></tr> <tr> <td> Запит SQL (call:/serv/SQL) </td> <td> W:W:- </td></tr> <tr> <td> Структура запиÑу (call:/serv/fieldStruct) </td> <td> R:R:R </td></tr> <tr> <td> Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу (call:/serv/fieldSeek) </td> <td> R:R:R </td></tr> <tr> <td> ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу (call:/serv/fieldGet) </td> <td> R:R:R </td></tr> <tr> <td> Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу (call:/serv/fieldSet) </td> <td> W:W:- </td></tr> <tr> <td> Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу (call:/serv/fieldDel) </td> <td> W:W:- </td></tr></table> <h2><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D0.B4.D1.83.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D1.96.D1.81.D1.82.D1.8C_.D0.91.D0.94"><span class="mw-headline-number">5</span> <span id="Tests" title="#Tests">ПродуктивніÑть БД</span></span></h2> <p>Ð’Ð¸Ð¼Ñ–Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð¸Ð²Ð½Ð¾Ñті БД, точніше шлюзуваннÑ, здійÑнюєтьÑÑ Ñ‚ÐµÑтом "БД" Ð¼Ð¾Ð´ÑƒÐ»Ñ "SystemTests", шлÑхом Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ над запиÑами Ñтруктурою "<b>name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string</b>" двічі, Ñпочатку Ð´Ð»Ñ Ð‘Ð” віддаленого оточеннÑ, а потім до цієї-ж БД, але через шлюз — цей модуль. </p> <table class="wikitable"> <tr> <th> Operations for 1000 records, seconds </th> <th> AMD A8-6500 <Ethernet> AMD Phenom II X4 [RAID1] <> SQLite </th> <th> AMD A8-6500 <Ethernet> AMD Phenom II X4 [RAID1] <> MySQL </th></tr> <tr> <td> <i>Creating:</i> </td> <td> 2.36 > 0.35 </td> <td> 3.39 > 1.35 </td></tr> <tr> <td> <i>Updating:</i> </td> <td> 2.31 > 0.31 </td> <td> 2.97 > 0.94 </td></tr> <tr> <td> <i>Getting:</i> </td> <td> 2.45 > 0.2 </td> <td> 2.67 > 0.49 </td></tr> <tr> <td> <i>Seeking:</i> </td> <td> 2.22 > 0.13 </td> <td> 3.59 > 1.48 </td></tr> <tr> <td> <i>Seeking in preload<sup>*</sup>:</i> </td> <td> 1.93 > 0.02 </td> <td> 1.88 > 0.04 </td></tr> <tr> <td> <i>Deleting:</i> </td> <td> 1.85 > 0.051 </td> <td> 2.14 > 0.27 </td></tr></table> <p><sup>*</sup> — this operation has no effect because preloading-caching is performed only on the remote station side. </p> </div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Modules/DBGate/uk">Modules/DBGate/uk</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body> </html>