UNPKG

vrack-db

Version:

This is an In Memory database designed for storing time series (graphs).

112 lines (77 loc) 10.5 kB
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