vrack-db
Version:
This is an In Memory database designed for storing time series (graphs).
112 lines (77 loc) • 10.5 kB
Markdown
VRack DB
========
VRackDB - Это **встраиваемая In Memory** база данных предназначенная для хранения временных рядов (графиков).
Особенности:
- Имеет простой формат запросов
- Всегда возвращает данные в виде графика.
- Очень простая в использовании
- Очень экономична/очень быстрая
- Агрегация и модификаторы данных
- Хранит данные в памяти. При закрытии программы данные будут потеряны
- Резервирует память метрики, последующее добавление данных метрики не увеличивает потребление памяти
- Простой инструмент отслеживания данных и создания тревожных сообщений
Вот примеры применения VRackDB:
- Построение графика скачивания файла
- Анализ потребления памяти приложения
- Диагностика задержек HTTP/API/WebScoket и других запросов
- Количественный анализ успешных/неуспешных операций в интервал времени
- Приложения для SOC компьютеров и устройств на их основе (мультиметры, лабораторные блоки питания и т.п.)
- Кеширование данных для быстрого отображения/анализа графиков
- Хранение временной диагностической информации
Для **быстрого старта** рекомендуем посетить [официальный гайд](https://github.com/ponikrf/VRackDB/wiki/RU%E2%80%90DOC%E2%80%90V3.0)
Доступна [локальная версия гайда](/docs/RU-Doc.md)
Мотивация
=========
В некоторых ситуациях очень не хватает простой базы данных для хранения метрик с простым языком запросов. Для общего примера была взята база Carbon + Whisper и по ее аналогии была сделана очень простая in memort база данных.
**Почему база данных in memory?** Для хранения метрик можно использовать много инструментов, которые оптимизированно хранят данные на диске. Такие варинты не подходят когда используется SD карта в качестве хранилища или нет возможности деплоя сложного продукта. Иногда нужно встроить базу данных в само приложение для отображения графиков, которые после закрытия приложения смысла уже не имеют. Такие приложения обычно предоставляют возможность оценить рациональность сохранения графика, и если человеку он нужен, график сохраняется в другом формате, а данные из памяти очищаются после закрытия приложения.
Поддержка
==========
Проще всего поддержать меня или проект вы можете в с помощью [Donationalerts](https://donationalerts.com/r/imerzytip). В донате обязательно укажите проект который вы хотите поддержать и изменения, которые вам бы хотелось видеть, что бы улучшить его. Это позволит мне гарантированно тратить 1 час своего времени за каждые ~10$ доната. Каждый донат будет включен в следующую сборку этого проекта, а так же будет прочитан на моем личном стриме.
Даже если я давно не вносил изменения в проект, это не значит, что проект мертв. Можете писать на ponik_rf@mail.ru, я постараюсь отреагировать как можно быстрее.
### Переход на версию 3
Если вы уже пользуетесь версией 2, для переходна на новую версию рекомендуется заглянуть в [официальный гайд](https://github.com/ponikrf/VRackDB/wiki/RU%E2%80%90DOC%E2%80%90V3.0)
Последние изменения
===================
update 3.0.2
### Collector
- Исправлена ошибка нахождения релаьного начала слоя
update 3.0.1
### Interval
- Исправлена ошибка связанная с работой относительных периодов в классах отличных от `Interval`
- Теперь в `Interval.period` можно указать вторым параметром куски времени, которые будут заменятся в шаблоне периода
### SingleDB
- Теперь в методе `SingleDB.read` можно указывать в качестве относительного периода `start` и `end`. То есть необходимости в методе `readAll` больше нет. Можно просто указать `read('test.metric', 'start:end', 300)` вместо `readAll('test.metric', 300)`
update 3.0.0
------------
### SchemeDB
- Добавлен класс SchemeDB - Замена старого класса `Database`
- Убрана работа с `MetricTree` (метод find). Теперь можно использовать класс `MetricTree` отдельно.
- Метод `scheme` теперь используют именованные параметры
- Теперь в методе `scheme` можно определять параметр `CInterval` который управляет минимальным юнитом времени (прим. Секунды, миллисекунды, микросекунды)
### SingleDB
- Добавлен класс SingleDB - Самый простой класс для работы с метриками. Каждая метрика в этом классе может иметь отличные от других метрик настройки. Этот класс является родителем класса `SchemeDB`
### Database
- Класс удален, теперь вместо него SchemeDB
### Layer
- Общий рефакторинг - переведен в стиль TypeScript
- Изменение инициализации класса. Теперь используются именованные параметры
- Метод size удален, и заменен на `Layer.length`
- Теперь все внутренние настройки типа `interval`, `period` и тп доступны через "getters" только для чтения
### Collector
- Общий рефакторинг - переведен в стиль TypeScript
- Метод init теперь используют именованные параметры
- Обновление внутренний документации
- Теперь методы `Collector` используют `Interval` который был указан при создании метрики
- Оптимизация хранения настроек метрик
- Теперь все свойства класса определены как protected
- Добавлен метод readFake для получения нерелевантных метрик
- Добавлен метод info который возвращает доп. информацию о метрике (размер, начало первой записи, количество попыток записи в метрику)
### Interval
- Обновление внутренний документации, теперь комментарии лучше отвечают за вопрос о том что делают методы.
- Добавлено новое понятие MTU - минимальный юнит времени. MTU это единица времени представленная в виде целого числа. Например для класса Interval MTU = 1 секунда. Для IntervalMs MTU = 1 миллисекунда и т.п.
- Внутренние интерфейсы теперь экспортируются для использования внутри других расширяющих классов типа IntervalMs
- Добавлен метод getFactor() который возвращает множитель времени для получения MTU из стандартного времени JS. (Обычно в JS в качестве времени используются миллисекунды. Factor для получения MTU в Interval будет равен 0.001)
- В стандарный набор интервалов добавлены еще 2 интервала - ms и us - миллисекунда и микросекунда соответсвенно
- Теперь если результат преобразования интервала возвращает дробное число - он будет округлен
- Исправлена проблема метода partOfPeriod. Раньше он мог выполнять только один тип операции в одном выражении, например вычислять `1m+10m+1h` но если нужно было использовать и `+` и `-` то это приводило к ошибке
- Добавлены классы IntervalMs & IntervalUs для расчетов Ms и Us в качестве MTU