Skip to content

Архитектура подсистемы хранения и Key-Value базы данных ​

RUSEON Core реализует двухуровневую архитектуру хранения (pkg/storage/), разделяющую транзакционные метаданные с низкой задержкой и последовательный поток видеоархива.


1. Уровень 1: Встраиваемая база данных состояния (BadgerDB v4) ​

Для хранения состояния камер, пользователей, тегов и папок используется BadgerDB v4 (чистый Go, встраиваемая база данных LSM-дерева):

Схема префиксов ключей: ​

Пространство ключейФормат ключаСтруктура значения (JSON)
camera:camera:{camera_id}CameraConfig (URL, флаги записи, ретеншн, SIM-карта, теги, папка)
tag:tag:{tag_id}TagConfig (ID, Название, HEX-цвет)
folder:folder:{folder_id}FolderConfig (ID, Название, Родительский ID)
user:user:{username}User (Имя, Хэш пароля bcrypt, Роль: admin/operator/viewer/service)

Параметры BadgerDB в ядре: ​

  • Низкий расход RAM: MemTableSize = 16MB, NumMemtables = 1.
  • Ночной сборщик мусора GC: Фоновый процесс (0 3 * * *) запускает RunValueLogGC(0.5) для сжатия и очистки дискового пространства.
  • Атомарный бэкап: GET /api/system/backup/export выгружает полный JSON-снимок (BackupData), восстанавливаемый через POST /api/system/backup/import.

2. Уровень 2: Хранилище медиафайлов (LocalFS) ​

Видеофайлы сохраняются в корневой каталог архива (по умолчанию recordings/):

  • Завершенные часовые отрезки: recordings/{camera_id}/{YYYY-MM-DD_HH-mm-ss}_to_{HH-mm-ss}.mp4
  • Текущая запись: recordings/{camera_id}/{YYYY-MM-DD_HH-mm-ss}_ongoing.mp4
  • Вытеснение кеша POSIX_FADV_DONTNEED удерживает RAM сервера в фиксированных границах.

Связанная документация ​

Released under the MIT License.