Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Перенос данных из таблицы в таблицу с математикой
|
|||
|---|---|---|---|
|
#18+
Всем добрый день Появилась такая задачка, реализовано сейчас на 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 минут после поступления данных к нам их хранить в этом виде нет уже совсем никакого смысла, либо где то хранить данные уже в прореженном виде, а это собственно сабж) Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 14:38 |
|
||
|
Перенос данных из таблицы в таблицу с математикой
|
|||
|---|---|---|---|
|
#18+
Обычное дело - расчёт укрупнённой статистики и очистка детальной. Расчёт укрупнёнки я бы предложил возложить на шедулер (CREATE EVENT) - потребуется несколько усредняющих заданий, скажем, минутное, десятиминутное, часовое, суточное... А очистку устаревших данных заменить на партиционирование по дате-времени, с заблаговременной подготовкой партиций на будущие периоды и отключением потерявших актуальность старых партиций, которые можно как удалять, так и архивировать. Ещё я бы предложил крепко подумать, надо ли вот строго "10 старых". Если, скажем, в таблицу падает по одной записи с машины в секунду - не проще ли усреднять за 10 секунд, например? во-первых, не надо отсчитывать штуки, которых явно в таблице нет, во-вторых, проще строить графики, когда все значения аргумента выровнены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 14:54 |
|
||
|
Перенос данных из таблицы в таблицу с математикой
|
|||
|---|---|---|---|
|
#18+
Akina, Уточню, 10 самых старых показаний с машины. С каждой машины раз в секунду падают показания с процессоров и как вы написали выше нам не нужны эти данные по истечении 30 минут, достаточно хранить средние данные за 10 секунд. Таким образом график рисоваться будет намного быстрее и удобнее. Да, наверное это поможет, сейчас попробую сделать шедулер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 15:02 |
|
||
|
Перенос данных из таблицы в таблицу с математикой
|
|||
|---|---|---|---|
|
#18+
Gexan10 самых старых показаний с машины. Gexanдостаточно хранить средние данные за 10 секунд. Вы уж определитесь. Это разные вещи. Не факт, что в таблицу лягут все 10 точек за 10 секунд - а ну как одна пропущена... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 15:07 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=66&tid=1830385]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 124ms |

| 0 / 0 |
