База данных Ceres
Ceres — это формат базы данных временных рядов, предназначенный для замены Whisper в качестве основного формата хранения для Graphite. В отличие от Whisper, Ceres — это не база данных фиксированного размера и разработана для лучшей поддержки разреженных данных произвольных фиксированных размеров. Это позволяет Graphite распределять отдельные временные ряды по нескольким серверам или монтированиям.
В настоящее время Ceres не активно развивается. Для альтернатив Whisper посмотрите на альтернативные хранилища.
Обзор хранения
Базы данных Ceres состоят из одного дерева, содержащегося в единственном пути на диске, который хранит все метрики в вложенных каталогах в виде узлов.
Узел Ceres представляет собой отдельную метрику временного ряда и состоит как минимум из двух файлов данных. Срез для хранения всех точек данных и произвольный файл метаданных ключ-значение. Минимальные необходимые метаданные узла — это 'timeStep'. Это наилучшее разрешение, которое может быть использовано для записи. Однако узел Ceres может содержать и читать данные с другими, менее точными значениями в его базовых данных среза.
Другие ключи метаданных, которые могут быть установлены для совместимости с Graphite, — это 'retentions', 'xFilesFacter', и 'aggregationMethod'.
Срез Ceres содержит фактические точки данных в файле. Единственная другая информация, содержащаяся в срезе, — это метка времени самой старой точки данных и разрешение. Оба из которых закодированы в имени файла в формате timestamp@resolution.
Точки данных в Ceres хранятся на диске в виде непрерывного списка чисел с плавающей запятой двойной точности большого порядка. Метка времени точки данных не хранится со значением, а вычисляется с использованием метки времени среза плюс смещение индекса значения, умноженное на разрешение.
Метка времени — это количество секунд с эпохи UNIX (01.01.1970). Значение данных анализируется функцией float() Python и, следовательно, ведет себя одинаково для специальных строк, таких как 'inf'. Максимальные и минимальные значения определяются допустимым диапазоном значений с плавающей запятой интерпретатора Python, который можно найти, выполнив:
python -c 'import sys; print sys.float_info'
Срезы: точность и фрагментация
Базы данных Ceres содержат один или несколько срезов, каждый со своим конкретным разрешением данных и меткой времени, обозначающей начало среза. Срезы упорядочены от самой последней метки времени к самой старой. Разрешение данных не учитывается при чтении из среза, только при записи среза с наилучшей точностью, настроенной для узла.
Пропуски в данных обрабатываются в Ceres путем заполнения срезов нулевыми точками данных. Однако, если пропуск среза слишком велик, вместо этого создается новый срез. Если узел Ceres накапливает слишком много срезов, производительность чтения может пострадать. Это может быть вызвано нерегулярно сообщенными данными. Для смягчения фрагментации срезов существует допуск того, сколько места может быть потрачено внутри файла среза, чтобы избежать создания нового. Этот уровень допуска определяется 'MAX_SLICE_GAP', который представляет собой количество последовательных нулевых точек данных, разрешенных в файле среза.
Если значение очень низкое, Ceres будет тратить меньше небольшого количества места на диске, которое тратит эта функция, но при этом будет подвержена проблемам производительности, вызванным фрагментацией срезов, которые могут быть довольно серьезными.
Если значение очень высокое, Ceres потратит немного больше места на диске. Хотя каждая нулевая точка данных тратит 8 байт, необходимо учитывать размер блока файловой системы. Если у вас возникают проблемы с фрагментацией срезов, следует увеличить это значение или чаще дефрагментировать данные. Однако не стоит устанавливать очень большое значение, потому что если произойдет большой, но разрешенный пропуск, его нужно будет заполнить, что означает, что вместо простой записи 8 байт в новый файл мы можем получить запись в (8 * MAX_SLICE_GAP) байт в последний срез.
Агрегирование с накоплением
Ожидаемые функции, такие как агрегирование с накоплением и истечение срока действия данных, не предоставляются самим Ceres, а реализуются как плагины обслуживания.
В Ceres существует такой плагин накопления, который агрегирует точки данных таким образом, что поведение похоже на хранилища Whisper. Где несколько точек данных объединяются и записываются в срез с более низким разрешением, а точки данных за пределами заданных сроков хранения обрезаются. По умолчанию используется функция среднего значения, однако альтернативные методы могут быть выбраны путем изменения метаданных.
Поведение при извлечении
При извлечении данных (ограниченных диапазоном времени) используется первый срез, содержащий данные в запрошенном интервале. Если временной период пересекает границу среза, оба среза считываются, а их значения объединяются. Любые отсутствующие данные между ними заполняются нулевыми точками данных.
В настоящее время Ceres не поддерживает обработку срезов с разными разрешениями таким же образом, как это делается в архивах Whisper.
Формат базы данных
| CeresSlice | Данные | |
| Данные | Точка+ |
Типы данных в формате структуры Python:
| Точка | !d |
Метаданные для Ceres хранятся в формате JSON:
{“retentions”: [[30, 1440]], “timeStep”: 30, “xFilesFactor”: 0.5, “aggregationMethod”: “average”}
© 2008–2012 Chris Davis
© 2011–2016 The Graphite Project
Licensed under the Apache License, Version 2.0.
https://graphite.readthedocs.io/en/latest/ceres.html