Набор данных для хранения системного журнала событий (sysevent).
Наборы данных профилей (archive) и последних показаний (stotal) содержат отдельные наборы данных (файлы) для каждого архивного интервала (короткого – short, основного – main, суточного – day, месячного – month, годового - year).
Наборы данных показаний (total) и сумм тарифных показаний (tsum) содержат отдельные наборы данных (файлы) для суточного (day) и месячного (month) архивных интервалов.
Для каждого файла набора данных (.dat) создается файл отката транзакций(.bak) – см. Таблицу
Описание | Наименование | Имя файла | Профили | archive | archive_short.dat, archive_short. bak; archive_main.dat, archive_main. bak; archive_day.dat, archive_day. bak; archive_month.dat, archive_month. bak; archive_year.dat, archive_year. bak; | Показания (накопительные итоги), зафиксированные на начало интервала | total | total_day.dat, total_day. bak; total_month.dat, total_month. bak; | Последние показания (текущие накопительные итоги) | stotal | stotal_short.dat, stotal _short. bak; stotal _main.dat, stotal _main. bak; stotal _day.dat, stotal _day. bak; stotal _month.dat, stotal _month. bak; stotal _year.dat, stotal _year. bak; | Суммы тарифных показаний | tsum | tsum_day.dat, tsum_day. bak; tsum_month.dat, tsum_month. bak; | Журналы событий | event | event.dat, event.bak | Системный журнал событий | sysevent | Sysevent.dat, sysevent.bak |
|
Каждый файл набора данных поделен на страницы, среди которых одна – заголовок файла, а прочие – либо ключ, либо таблица (пара страниц «ключ-таблица» формируется для каждого информационного канала).
Каждая страница содержит служебное поле состояния (status) и поле целевых данных (payload).
Каждая таблица – циклический массив записей с глубиной, равной глубине архивирования данного интервала, новая запись замещает самую старую. Каждая запись в свою очередь состоит из набора полей.

|
Для каждого набора данных – свой набор и размер записей.
Структура записей для набора данных типа archive:
«
typedef
ouroboros::record6<
ouroboros::FIELD_INT32, ///< канал
ouroboros::FIELD_INT8, ///< тип интервала
ouroboros::FIELD_INT32, ///< реальная продолжительность интервала
ouroboros::FIELD_INT32, ///< метка времени
ouroboros::FIELD_DOUBLE, ///< значение
ouroboros::FIELD_INT32 ///< статус
> t_profile_data;
»
Структура записей для данных типа total, tsum, stotal:
«
typedef
ouroboros::record6<
ouroboros::FIELD_INT32, ///< канал
ouroboros::FIELD_INT8, ///< тип интервала
ouroboros::FIELD_INT8, ///< тариф
ouroboros::FIELD_INT32, ///< метка времени
ouroboros::FIELD_DOUBLE, ///< значение
ouroboros::FIELD_INT32 ///< статус
> t_total_data;
»
Структура записей для набора данных event:
«
typedef
ouroboros::record5<
ouroboros::FIELD_INT32, ///< канал
ouroboros::FIELD_INT64, ///< метка времени
ouroboros::FIELD_INT32, ///< код события
ouroboros::FIELD_INT32, ///< ipar
ouroboros::FIELD_DOUBLE ///< fpar
> t_event_data;
»
Структура записей для набора даных sysevent:
«
typedef
ouroboros::record6<
ouroboros::FIELD_INT32, ///< канал
ouroboros::FIELD_INT64, ///< метка времени
ouroboros::FIELD_INT32, ///< код события
ouroboros::FIELD_INT32, ///< ipar
ouroboros::FIELD_DOUBLE, ///< fpar
ouroboros::FIELD_STRING<256> ///< комментарий
> t_sysevent_data;
»
Записи в наборах журнальных данных events и sysevents индексированы, поэтому имеют дополнительные скрытые поля для построения индекса:
«
pos_type m_parent;
pos_type m_left;
pos_type m_right;
node_color m_color;
»
Размеры записей для каждого набора данных складываются из размера входящих в записи полей.
Набор данных | Расчет размера записи | Размер записи, байт | archive | 4+1+4+4+8+4 | 25 | total, tsum, stotal | 4+1+1+4+8+4 | 22 | Event | 4+8+4+4+8+4+4+4+4 | 44 | Sysevent | 4+8+4+4+8+256 | 300 |
|
Размер таблицы для одного канала вычисляется как произведение размера записи на глубину архивирования:
Table = Record * Depth.
Поскольку набор данных поделен на страницы, а каждая страница содержит поле данных и поле статуса, то размер таблицы должен быть скорректирован:
FCorrect( Size ) = ЕСЛИ( Size > 0; ЦЕЛОЕ( Size / PayloadSize ) + ЕСЛИ( ОСТАТОК( Size / PayloadSize ) > 0; 1; 0 ) x PageSize; 0 ),
где
Size - корректируемый размер;
PayloadSize - размер полезных данных на странице;
PageSize - размер страницы.
Каждая таблица имеет свой ключ, который располагается перед таблицей в файле набора данных, и размер ключа зависит от того, содержит ли данная таблица индексированное поле – размер ключа для наборов archive, total, tsum, stotal составляет 28 байт, а для event, sysevent – 32 байта.
Таким образом размер набора данных для archive, event и sysevent можно вычислить следующим образом:
Dataset = FCorrect( Info ) + ( FCorrect( Key ) + FCorrect( Table ) ) x ChanCount,
где
Dataset - размер набора данных,
Info - размер заголовка,
Key - размер ключа,
Table - размер таблицы,
ChanCount - количество каналов.
Размер набора данных для total, tsumи stotal можно вычислить следующим образом:
Dataset = FCorrect( Info ) + ( FCorrect( Key ) + FCorrect( Table ) ) x ChanCount x TariffCount,
где TariffCount - 9, количество поддерживаемых тарифов (8 тарифов и сумма по тарифам).
Расчет размера хранилища следует выполнять с использованием специализированного расчетного xls-файла, предоставляемого службой технической поддержки по запросу.

|
Примеры оценки объема данных.
число счётчиков (4- и 2-канальных) | 20+980=1000 |
| число событий заданное | 500 |
| число архивных записей основных (часовых) | 2160 | = 90 суток | число архивных записей коротких | 480 | = 1 сутки | число архивных записей суточных | 90 |
| число архивных записей месячных | 12 |
| число архивных записей годовых | 5 |
| Размер системных файлов, МБ | 100 |
| Размер ПЗУ, ГБ | 1 | встроенный носитель NAND FLASH | Доступный для БД объём (за вычетом системных файлов и запаса 10%), МБ | 800 | Критерий для сравнения |
|
Счетчиков (4- и 1-канальных) | Объём данных, МБ | Примечание | 20 | 29 |
| 980 | 437 |
| Всего – 1000 шт.: | 466 | Удовлетворяет критерию с запасом в 41% |
|
Счетчиков (4- и 2-канальных) | Объём данных, МБ | Примечание | 20 | 29 |
| 980 | 743 |
| Всего – 1000 шт.: | 772 | Удовлетворяет критерию без значимого запаса |
|
Счетчиков (2-канальных, 90 суток часовых интервалов) | 10 | 100 | 200 | 500 | 700 | 1000 | Объем данных, МБ | 9 | 77 | 152 | 380 | 531 | 758 |
|
Счетчиков (4-канальных, 45 суток получасовых интервалов) | 10 | 100 | 200 | 500 | Объем данных, МБ | 15 | 139 | 278 | 692 |
|