Циклическая база данных

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Кольцевая база данных»)
Перейти к: навигация, поиск

Циклическая база данных (англ. Round-robin Database, RRD) — база данных, объём хранимых данных которой не меняется со временем,[1] поскольку количество записей постоянно, в процессе сохранения данных они используются циклически[2][3][4]. Как правило, используется для хранения информации, которая перезаписывается через равные интервалы времени.

Наибольшее применение нашла в программе MRTG, которая позднее была вытеснена пакетом программ RRDtool[5].

СУБД и интерфейсы для циклической БД включены в репозитории крупнейших дистрибутивов Linux[6][7][8][9] и в хранилище Perl библиотек CPAN[10]. Также СУБД RRDtool доступна как модуль для CMS Drupal[11].

Структура БД[править | править вики-текст]

Внутренняя структура циклической БД:
RRA (англ. round-robin archive) — циклический архив DS (англ. data source) — таблица для соответствующего источника данных

Одна циклическая база данных можеть хранить один или несколько наборов данных, которые объединяются в архивы (RRA — round robin archive). Кольцевые таблицы архивов по структуре аналогичны массивам, у которых адрес последнего элемента совпадает с адресом первого элемента. Положение последнего обновленного элемента хранится в виде указателя. Архивы, как правило, связаны между собой как матрешки, каждый последующий архив хранит консолидированную информацию из предыдущего. Для этого используются функции консолидации, встроенные в базу данных. Это позволяет применять эти функции автоматически при обновлении информации в БД. Один архив хранит данные с небольшим интервалом между записями, другой, через заданное количество интервалов, сохраняет консолидированные данные из предыдущего, последующий делает это ещё реже и т. д.[12]

Консолидация данных[править | править вики-текст]

Если записывать данные через небольшие интервалы времени, а потом формировать среднее (максимальное, минимальное и т. д.) значения за год или любой другой достаточно большой интервал времени, то вычисления и сам процесс выборки из БД может потребовать большое количество ресурсов. Для того, чтобы избежать этого, в циклических базах данных используется консолидация данных при записи, а не во время считывания. Периодов консолидации может быть сколько угодно (неделя, месяц, квартал, год и т. д.). Для осуществления вычислений используются специальные функции консолидации (англ. consolidation function, CF), такие как:

  • average — среднее значение
  • minimum — минимальное значение
  • maximum — максимальное значение
  • total — общее значение

Типы данных[править | править вики-текст]

Основные типы данных:[13]

  • COUNTER
  • GAUGE
  • DERIVE
  • ABSOLUTE
  • COMPUTE

COUNTER — это счетчик, значение которого может только увеличиваться, при сохранении данных такого типа из текущего значения вычитается предыдущее.

GAUGE — произвольные значения. Данный тип используется для данных, которые могут как уменьшаться, так и возрастать (допустим температура объекта).

Тип DERIVE — это тот же счетчик, но с возможностью хранить не только постоянно возрастающие, но и убывающие значения, то есть разница между смежными значениями может быть отрицательной. При этом важно помнить, что для этого типа не производится проверка на переполнение.

ABSOLUTE — это тоже модификация счетчика, отличие состоит в том, что разница между значениями не вычисляется, а сохраняются сами значения счетчика и счетчик обнуляется при чтении. Этот тип удобно использовать для подсчета количества событий, произошедших с момента последнего считывания.

Тип COMPUTE используется для записи вычисляемых значений на основании данных из других источников данных (англ. Data Source, DS) текущей БД RRD. В теории баз данных такие поля называют вычисляемыми или виртуальными. Этот источник данных не указывается при операции обновления (update), но его основные контрольные значения (англ. Primary Data Points, PDPs) вычисляются из основных контрольных значений (PDPs) других источников данных, путём применения к ним формул записанных в формате обратной польской записи (англ. Reverse Polish Notation, RPN). Функции консолидации тоже применимы к этому типу данных.

Интерполяция данных[править | править вики-текст]

В связи с тем, что циклические базы данных часто используются для представления данных, распределенных во времени через равные интервалы времени, в механизме такой базы предусмотрена следующая особенность: если при записи в базу по каким-то причинам (например, задержка вычисления значения) данные не были записаны вовремя (например запись произошла на 3 секунды позже), то данные все равно будут записаны так, как если бы они были предоставлены вовремя. Сам «механизм» циклической базы данных изменит данные для коррекции (пропорционально времени запаздывания или отставания). Другими словами, в саму базу данных встроена система корректирования аберраций (англ. Aberrant Behavior Detection). Эта система состоит из трех компонентов:[14]

  • Механизм математического (статистического) прогнозирования значения следующей порции данных (которые будут записаны).
  • Механизм вычисления отклонения реальных данных от прогнозированной (расчетной) величины.
  • Механизм принятия решений в зависимости от степени отклонения значения (или серии значений) от прогнозированной (расчетной) величины.

Как работает интерполяция аберрированных данных легко понять, рассмотрев конкретные значения:

данные в БД RRD реальные данные
time+000:   0 delta="U"
time+300: 300 delta=300
time+600: 600 delta=300
time+900: 900 delta=300
time+000:    0 delta="U"
time+300:  300 delta=300
time+603:  603 delta=303
time+900:  900 delta=297

Но в БД хранятся не только интерполированные данные, но и данные, которые непосредственно вводились. Это необходимо для более точной интерполяции последующих данных.

Интерполяция данных может привести к их искажению, поэтому сфера применения ограничена областями, где точность не критична. В других областях используют тип данных, к которому механизм интерполяции не применяется.

Примечания[править | править вики-текст]

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]