Опорная статья от программистов: Размер хранилища УСПД (ouroboros)
Хранилище УСПД состоит из следующих наборов данных:
- наборы данных для хранения профилей (archive);
- наборы данных для хранения показаний (total);
- наборы данных для хранения последних показаний (stotal);
- наборы данных для хранения сумм тарифных показаний (tsum);
- набор данных для хранения журналов событий (event);
Набор данных для хранения системного журнала событий (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
Критерий для сравнения
Пример 1 – Объем данных для комбинации 4- и 1-канальных счетчиковСчетчиков (4- и 1-канальных)
Объём данных, МБ
Примечание
20
29
980
437
Всего – 1000 шт.:
466
Удовлетворяет критерию с запасом в 41%
Пример 2 – Объем данных для комбинации 4- и 2-канальных счетчиковСчетчиков (4- и 2-канальных)
Объём данных, МБ
Примечание
20
29
980
743
Всего – 1000 шт.:
772
Удовлетворяет критерию без значимого запаса
Пример 3 – Варианты размеров БД для 2-канальных счетчиковСчетчиков (2-канальных, 90 суток часовых интервалов)
10
100
200
500
700
1000
Объем данных, МБ
9
77
152
380
531
758
Пример 4 – Варианты размеров БД для 4-канальных счетчиковСчетчиков (4-канальных, 45 суток получасовых интервалов)
10
100
200
500
Объем данных, МБ
15
139
278
692