Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Перенос данных из таблицы в таблицу с математикой  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
Всем добрый день
Появилась такая задачка, реализовано сейчас на PHP, но очень хочется перенести этот процесс на MySQL

Суть
Есть две таблицы
первая cpu_live
вторая cpu

В таблицу cpu_live с периодичностью в секунду пишется порядка 100-200 записей, из которых мы на сайте строим живой график
поля таблицы:
id, machine_id, cpu, cpu1, cpu2, cpu3, cpu4, cpu5, cpu6, cpu7, cpu8, cpu9, cpu10, cpu11, cpu12, cpu13, cpu14, cpu15, cpu16, data_add

во второй таблице все идентично


Хотелось бы получить следующее

Выбрать допустим 10 самых старых записей по machine_id, получить средние значения всех столбцов и сохранить полученное одной строкой в cpu.
После этого удалить эти 10 самых старых записей
Затем еще раз то же самое, и так до того момента пока в cpu_live не останутся данные за последние 30 минут

Вроде бы все просто, но если честно уже всю голову поломал :)

На всякий случай объясню проблему целиком может кто-нибудь подскажет более изящное решение

В таблицу пишутся показания процессоров с периодичностью в секунду, повторюсь из них строится живой график за последние 20сек-10 минут.
Само собой график рисуется запросом в бд
Столкнулись с тем что когда мы пытаемся сделать выборку за час, мы имеем определенные сложности, поскольку детализация графика получается с точностью до секунды, ладно, час еще терпимо, а вот показания за день заставляют сервер задуматься...

Пока вижу только два решения либо делать выборку с прореживанием, но через 30 минут после поступления данных к нам их хранить в этом виде нет уже совсем никакого смысла, либо где то хранить данные уже в прореженном виде, а это собственно сабж)

Заранее спасибо
2 окт 17, 14:38    [20836451]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных из таблицы в таблицу с математикой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16271
Обычное дело - расчёт укрупнённой статистики и очистка детальной.

Расчёт укрупнёнки я бы предложил возложить на шедулер (CREATE EVENT) - потребуется несколько усредняющих заданий, скажем, минутное, десятиминутное, часовое, суточное... А очистку устаревших данных заменить на партиционирование по дате-времени, с заблаговременной подготовкой партиций на будущие периоды и отключением потерявших актуальность старых партиций, которые можно как удалять, так и архивировать.

Ещё я бы предложил крепко подумать, надо ли вот строго "10 старых". Если, скажем, в таблицу падает по одной записи с машины в секунду - не проще ли усреднять за 10 секунд, например? во-первых, не надо отсчитывать штуки, которых явно в таблице нет, во-вторых, проще строить графики, когда все значения аргумента выровнены.
2 окт 17, 14:54    [20836501]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных из таблицы в таблицу с математикой  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
Akina,

Уточню, 10 самых старых показаний с машины.
С каждой машины раз в секунду падают показания с процессоров и как вы написали выше нам не нужны эти данные по истечении 30 минут, достаточно хранить средние данные за 10 секунд.
Таким образом график рисоваться будет намного быстрее и удобнее.

Да, наверное это поможет, сейчас попробую сделать шедулер
2 окт 17, 15:02    [20836525]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных из таблицы в таблицу с математикой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16271
Gexan
10 самых старых показаний с машины.

Gexan
достаточно хранить средние данные за 10 секунд.

Вы уж определитесь. Это разные вещи. Не факт, что в таблицу лягут все 10 точек за 10 секунд - а ну как одна пропущена...
2 окт 17, 15:07    [20836539]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить