Информация об изменениях

Сообщение Как хранить логи, чтобы можно было делать по ним запросы? от 22.04.2015 9:01

Изменено 22.04.2015 16:41 ionoy

Есть устройство, которое шлёт телеметрию и есть программа, которая этим устройством управляет.

На данный момент все исходящие и приходящие пакеты сохраняются в текстовом файле. Кроме пакетов туда же пишутся события программы, которые нужно логировать.

Хочу сделать центральный сервер, куда можно было бы все эти данные загружать и, в последствие, делать по ним выборку.

Логи вида: время, in/out/event, payload

В payload может быть как пакет в виде json, так и информация о событии внутри программы (пользователь нажал кнопку, запуск процесса и тд).

Цель базы данных в том, чтобы можно было делать такие запросы (условно):

select payload.voltage_battery
from logs
where payload_type = 'sys_status' and
      operator_name = 'NAME' -- это и следуещее поле будет добавлено к каждой 'строке' лога 
      run_id = 122           -- чтобы можно было различать разные запуски системы
order by payload.voltage_battery descending


Это, конечно, самый элементарный пример, хотелось бы делать более сложные выборки с джойнами на себя и прочим.

Кто-нибудь занимался чем-то подобным?
SQL/NoSQL?
Всё в одной таблице или нескольких?
Может, вообще, сделать таблицу вида: name/value?
Как хранить логи, чтобы можно было делать по ним запросы?
Есть устройство, которое шлёт телеметрию и есть программа, которая этим устройством управляет.

На данный момент все исходящие и приходящие пакеты сохраняются в текстовом файле. Кроме пакетов туда же пишутся события программы, которые нужно логировать.

Хочу сделать центральный сервер, куда можно было бы все эти данные загружать и в последствии делать по ним выборку.

Логи вида: время, in/out/event, payload

В payload может быть как пакет в виде json, так и информация о событии внутри программы (пользователь нажал кнопку, запуск процесса и тд).

Цель базы данных в том, чтобы можно было делать такие запросы (условно):

select payload.voltage_battery
from logs
where payload_type = 'sys_status' and
      operator_name = 'NAME' -- это и следуещее поле будет добавлено к каждой 'строке' лога 
      run_id = 122           -- чтобы можно было различать разные запуски системы
order by payload.voltage_battery descending


Это, конечно, самый элементарный пример, хотелось бы делать более сложные выборки с джойнами на себя и прочим.

Кто-нибудь занимался чем-то подобным?
SQL/NoSQL?
Всё в одной таблице или нескольких?
Может, вообще, сделать таблицу вида: name/value?