Перейти к концу метаданных
Переход к началу метаданных

Опорная статья от программистов: Размер хранилища УСПД (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 можно вычислить следующим образом:
    DatasetFCorrect( Info ) + (  FCorrect( Key ) +  FCorrect( Table ) ) x ChanCount,
    где
    Dataset - размер набора данных,
    Info - размер заголовка,
    Key - размер ключа,
    Table - размер таблицы,
    ChanCount - количество каналов.
    Размер набора данных для total, tsumи stotal можно вычислить следующим образом:
    DatasetFCorrect( 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

  • Нет меток