<?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="ru">Модули/Архивация на БД</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="ru"><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&amp;group=page-Modules%2FDBArch&amp;action=page&amp;filter=&amp;language=ru" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/DBArch" title="Modules/DBArch">Modules/DBArch</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/DBArch.html" title="Modules/DBArch (100% translated)">English</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">mRussian</span>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../uk/Modules/DBArch.html" title="Модулі/Архівація на БД (100% translated)">Українська</a></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/DBArch.html" title="Special:MyLanguage/Modules/DBArch">DBArch</a> </td>
<td> Архиватор на БД
</td>
<td> 3.1 </td>
<td> GPL2 </td>
<td> arh_DBArch.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> Архив </td>
<td> Роман Савоченко </td>
<td> Модуль архиватора. Предоставляет функции архивирования сообщений и значений на БД.
<ul><li> <b>Общая трудоёмкость:</b> &gt; 5 <span title="человеко-дней, 1ЧД — 10 часов">ЧД<sup style="color: blue">[!]</sup></span></li>
<li> <b>Спонсировано, имплементации групповых таблиц на 3.5 <span title="человеко-дней, 1ЧД — 10 часов">ЧД<sup style="color: blue">[!]</sup></span>:</b> Устьянцев Михаил</li></ul>
</td></tr></table>
<p>Модуль предназначен для архивирования сообщений и значений OpenSCADA на одну из баз данных, поддерживаемых OpenSCADA.
</p><p>Любая SCADA система предоставляет возможность архивирования собранных данных, т.е. формирование истории изменения (динамики) процессов. Архивы условно можно разделить на два типа: архивы сообщений и архивы значений.
</p><p>Особенностью архивов сообщений является то, что архивируются так называемые события. Характерным признаком события является его время возникновения. Архивы сообщений обычно используются для архивирования сообщений программы, т.е. ведение логов и протоколов. В зависимости от источника, сообщения могут классифицироваться по различным критериям. Например, это могут быть: протоколы аварийных ситуаций, протоколы действий операторов, протоколы сбоев связи и др.
</p><p>Особенностью архивов значений является их периодичность, определяемая промежутком времени между двумя смежными значениями. Архивы значений применяются для архивирования истории непрерывных процессов. Поскольку процесс непрерывный то и архивировать его можно только путём введения понятия квантования времени опроса, поскольку иначе мы получаем архивы бесконечных размеров ввиду непрерывности самой природы процесса. Кроме этого, практически мы можем получать значения с периодом ограниченным самими источниками данных. Например, довольно качественные источники данных в промышленности редко позволяют получать данные с частотой более 1кГц. И это без учёта самих датчиков, имеющих ещё менее качественные характеристики.
</p><p>Для ведения архивов в OpenSCADA предусмотрена <a href="../Program_manual.html#Arch" title="Special:MyLanguage/Documents/Program manual">подсистема "Архивы-История"</a>. Данная подсистема, в соответствии с типами архивов, состоит из двух частей: архив сообщений и архивы значений. Подсистема, в целом, является модульной, что позволяет создавать архивы, основанные на различной природе и способах хранения данных. Данный модуль предоставляет механизм архивирования на файловую систему как для потока сообщений, так и для потока значений.
</p>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.90.D1.80.D1.85.D0.B8.D0.B2.D0.B0.D1.82.D0.BE.D1.80_.D1.81.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D0.BD.D0.B8.D0.B9"><span class="tocnumber">1</span> <span class="toctext">Архиватор сообщений</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.D0.90.D1.80.D1.85.D0.B8.D0.B2.D0.B0.D1.82.D0.BE.D1.80_.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B9"><span class="tocnumber">2</span> <span class="toctext">Архиватор значений</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D0.B0.D1.8F_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B0_.D0.B0.D1.80.D1.85.D0.B8.D0.B2.D0.BD.D1.8B.D1.85_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86"><span class="tocnumber">3</span> <span class="toctext">Информационная таблица архивных таблиц</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.D0.AD.D1.84.D1.84.D0.B5.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D0.BE.D1.81.D1.82.D1.8C"><span class="tocnumber">4</span> <span class="toctext"><span>Эффективность</span></span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"><span class="tocnumber">5</span> <span class="toctext">Ссылки</span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.90.D1.80.D1.85.D0.B8.D0.B2.D0.B0.D1.82.D0.BE.D1.80_.D1.81.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D0.BD.D0.B8.D0.B9"><span class="mw-headline-number">1</span> Архиватор сообщений</span></h2>
<p>Архивы сообщений формируются архиваторами, которых может быть множество и с индивидуальными настройками, что позволяет разделять архивирование различных классов сообщений.
</p><p>Архиватор сообщений этого модуля хранит данные в таблице БД, которая называется "DBAMsg_{ArchID}", где:
</p>
<ul><li> <i>ArchID</i> — идентификатор архиватора сообщений.</li></ul>
<p>Модулем предоставляются дополнительные параметры настройки процесса архивирования, рисунок 1.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:848px;"><a class="image" href="http://oscada.org/wiki/File:DBArch_mess_a_prm_ru.png"><img class="thumbimage" height="710" src="../files/DBArch_mess_a_prm_ru.png" width="846" /></a>  <div class="thumbcaption">Рис.1. Дополнительные параметры настройки процесса архивирования сообщений.</div></div></div></div>
<p>В число дополнительных параметров входят:
</p>
<ul><li> <i>Размер архива, дней</i> — определяет размер архива по времени. После превышения лимита старые записи начнут удаляться! Установить в 0 для отключения данного лимита и некоторого повышения производительности.</li>
<li> <i>Формировать время как строка</i> — сохранять время сообщения в читабельном виде. Только для БД поддерживающих такое посредством специфических типов данных вроде "datetime" в MySQL. <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> Данная опция несовместима, т.е. при её изменении Вы потеряете существующие архивы.</li>
<li> <i>Уникальные и недублирующие сообщения только за временем и категорией</i> — в первичном ключе используются поля <b>MIN</b>, <b>TM</b>, <b>TMU</b> и <b>CATEG</b>; иначе поле сообщения включается к первичному ключу и его ограничено 255 символами.</li></ul>
<p>Таблица БД архиватора сообщений имеет структуру <b>{<u>MIN</u>, <u>TM</u>, <u>TMU</u>, <u>CATEG</u>, MESS, LEV}</b>, где:
</p>
<ul><li> <i>MIN</i> — UTC время, в минутах, используется для ускорения при чтении минутами.</li>
<li> <i>TM</i> — UTC время сообщения, секунды от эпохи (01.01.1970). Тут может использоваться специализированный тип для параметра "Формировать время как строка", если он поддерживается БД.</li>
<li> <i>TMU</i> — микросекунды времени.</li>
<li> <i>CATEG</i> — категория сообщения.</li>
<li> <i>MESS</i> — текст сообщения.</li>
<li> <i>LEV</i> — уровень сообщения.</li></ul>
<h2><span class="mw-headline" id=".D0.90.D1.80.D1.85.D0.B8.D0.B2.D0.B0.D1.82.D0.BE.D1.80_.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B9"><span class="mw-headline-number">2</span> Архиватор значений</span></h2>
<p>Архивы значений формируются архиваторами значений индивидуально для каждого зарегистрированного архива. Архиваторов может быть множество и с индивидуальными настройками, которые позволяющими разделить архивы по различным параметрам, например, по точности и глубине. Архивы параметров одного архиватора могут группироваться в группы, одна таблица, с указанным ограничением количества параметров в группе. Группирование позволяет значительно увеличить производительность архивации за счёт отправки в БД одного запроса со значениями параметров в группе.
</p><p>Архив значений является независимым компонентом, который включает буфер, обрабатываемый архиваторами. Основным параметром архива значения является источник данных. В роли источника данных могут выступать атрибуты параметров подсистемы "Сбор данных", а также другие внешние источники данных (пассивный режим). Другими источниками данных могут быть: сетевые архиваторы удалённых OpenSCADA станций, среда программирования OpenSCADA и др. Не менее важными параметрами архива являются параметры его буфера. От параметров буфера зависит возможность работы архиваторов. <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> Так, периодичность значений в буфере должна быть не больше периодичности самого быстрого архиватора, а размер буфера не менее двойного размера для самого медленного архиватора. В противном случае возможны потери данных.
</p><p>Общая схема архивирования значений наглядно изображена на рисунке 2.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:621px;"><a class="image" href="http://oscada.org/wiki/File:Arch_val_sh_ru.png"><img class="thumbimage" height="391" src="../files/Arch_val_sh_ru.png" width="619" /></a>  <div class="thumbcaption">Рис.2. Общая схема процесса архивирования значений.</div></div></div></div>
<p>Архиватор значений этого модуля хранит данные в таблице БД, которая называется "DBAVl_{ArchivatorID}_{ArchiveID}", для одиночного режима, и "DBAVl_{ArchivatorID}_&lt;GRP&gt;{N}", для группового режима, где:
</p>
<ul><li> <i>ArchivatorID</i> — идентификатор архиватора значений;</li>
<li> <i>ArchiveID</i> — идентификатор архива значений;</li>
<li> <i>N</i> — номер группы, опущен для первой.</li></ul>
<p>Модулем предоставляются дополнительные параметры настройки процесса архивирования, рисунок 3.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:719px;"><a class="image" href="http://oscada.org/wiki/File:DBArch_val_a_prm_ru.png"><img class="thumbimage" height="669" src="../files/DBArch_val_a_prm_ru.png" width="717" /></a>  <div class="thumbcaption">Рис.3. Дополнительные параметры настройки процесса архивирования значений.</div></div></div></div>
<p>В число дополнительных параметров входят:
</p>
<ul><li> <i>Размер архива, дней</i> — определяет размер архива по времени. После превышения лимита старые записи начнут удаляться! Установить в 0 для отключения данного лимита и некоторого повышения производительности.</li>
<li> <i>Формировать время как строка</i> — сохранять время сообщения в читабельном виде. Только для БД поддерживающих такое посредством специфических типов данных вроде "datetime" в MySQL. <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> Данная опция несовместима, т.е. при её изменении Вы потеряете существующие архивы.</li>
<li> <i>Ограничение группировки параметров</i> — ненулевое значение включает групповое архивирование и определяет ограничение на количество параметров в группе/таблице.</li></ul>
<p>Таблица БД архиватора значений имеет структуру <b>{<u>MARK</u>, <u>TM</u>, VAL}</b>, для одиночного режима, и <b>{<u>MARK</u>, <u>TM</u>, {PRM1}, {PRM2}, {PRMN}}</b>, для группового, где:
</p>
<ul><li> <i>MARK</i> — метка быстрого доступа/чтения архива, {TM}/(10*{period}).</li>
<li> <i>TM</i> — UTC время значения, секунды от эпохи (01.01.1970). Тут может использоваться специализированный тип для параметра "Формировать время как строка", если он поддерживается БД.</li>
<li> <i>VAL</i> — значение параметра в одиночном режиме, тип значения определяет тип данной колонки (Целое, Вещественное, Строка).</li>
<li> <i>PRM1...PRMN</i> — значение параметра с идентификатором в имени колонки, для группового режима, тип значения определяет тип данной колонки (Целое, Вещественное, Строка).</li></ul>
<h2><span class="mw-headline" id=".D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D0.B0.D1.8F_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B0_.D0.B0.D1.80.D1.85.D0.B8.D0.B2.D0.BD.D1.8B.D1.85_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86"><span class="mw-headline-number">3</span> Информационная таблица архивных таблиц</span></h2>
<p>Для хранения начала, конца и иной служебной информации архивов в архивных таблицах, создаётся информационная таблица с именем данного модуля "DBArch". Данная таблица имеет структуру <b>{<u>TBL</u>, BEGIN, END, PRM1, PRM2, PRM3}</b>, где: 
</p>
<ul><li> <i>TBL</i> — имя таблицы архива.</li>
<li> <i>BEGIN</i> — начало данных в архиве. Секунды для сообщений и микросекунды для значений от эпохи UNIX (01.01.1970).</li>
<li> <i>END</i> — конец данных в архиве. Секунды для сообщений и микросекунды для значений от эпохи UNIX (01.01.1970).</li>
<li> <i>PRM1</i> — дополнительный параметр 1: периодичность значений, в микросекундах.</li>
<li> <i>PRM2</i> — дополнительный параметр 2: тип значений параметра, в одиночном режиме, или перечень параметров в группе <b>{Type}:{ArchiveId}</b>, для группового режима.</li>
<li> <i>PRM3</i> — дополнительный параметр 3.</li></ul>
<p>Согласно информации в указанной таблице, для архиваторов значений поддерживается восстановление и создание объектов архива.
</p>
<h2><span class="mw-headline" id=".D0.AD.D1.84.D1.84.D0.B5.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D0.BE.D1.81.D1.82.D1.8C"><span class="mw-headline-number">4</span> <span id="Efficiency" title="#Efficiency">Эффективность</span></span></h2>
<p>При проектировании и реализации данного модуля особых механизмов повышения эффективности процесса архивирования не закладывалось в виду наличия объективных ограничений самих баз данных и интерфейсов доступа к ним. Следовательно, эффективность архивации на БД в основном связана с самой БД и интерфейсом доступа к ней. Из наиболее эффективных интерфейсов и подходов по повышению производительности нужно отметить следующие:
</p>
<ul><li> Чтение из БД нескольких записей не отдельными/конкретными командами SELECT, а обобщающими SELECT запросами, что для всех БД минимум на порядок быстрее. Для использования этой особенности, слой доступа к БД в OpenSCADA, в лице запроса "dataSeek()", был расширен на предмет поддержки предзагрузки всех записей ответа на запрос в <i>full</i>. Данным модулем эта особенность также теперь используется позволяя данные получать часто быстрее чем они потом обрабатываются, хотя и уступая <a href="../Modules/FSArch.html" title="Special:MyLanguage/Modules/FSArch">архивации на файловую систему</a>.</li>
<li> Запись в БД отдельной колонки также значительно быстрее, чем отдельная запись таблицы. Данным модулем эта особенность используется в части архивации значений и в режиме группировки, т.е. значения отдельных сигналов пишутся в одну таблицу как отдельная колонка.</li></ul>
<p>Результаты измерений производительности архивации сведены в таблице ниже:
</p>
<table class="wikitable">

<tr>
<th> Тест / Окружение и БД </th>
<th> Intel Core3 1.3GHz, Локальный PostgreSQL 9.3, SSD </th>
<th> AMD A8 3.5GHz, Локальный PostgreSQL 9.3, HDD
</th></tr>
<tr>
<td> Values archiving, 60 records, 1 signal (seconds) </td>
<td> 53...63 </td>
<td> 13...14
</td></tr>
<tr>
<td> Values archiving, 60 records, 10 signal (seconds) </td>
<td> 65...67 </td>
<td> 16...19
</td></tr>
<tr>
<td> Values archiving, 60 records, 100 signal (seconds) </td>
<td> 154...163 </td>
<td> 52...60
</td></tr>
<tr>
<td> <i>Result:</i> average time of the writing 60 values of the signal (millisecond),<br />
<p>estimated maximum number of the archiving signals in the 1 second periodicity
</p>
</td>
<td> 1, 60000 </td>
<td> 0.4, 150000
</td></tr></table>
<h2><span class="mw-headline" id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"><span class="mw-headline-number">5</span> Ссылки</span></h2>
<ul><li> <a class="external" href="http://oscada.org/wiki/File:Arch_val_sh_ru.odg" title="File:Arch val sh ru.odg">Диаграмма: Общая схема процесса архивирования значений.</a></li></ul>






</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/DBArch/ru">Modules/DBArch/ru</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>