Прореживание данных

Sancho

Новичок
Прореживание данных

Задача состоит в следующем. В БД хранятся некоторые статистические данные по значениям отдельных величин. Необходимо отобразить эти данные в графическом виде. Проблема в том, что данные добавляются в таблицу весьма часто (каждые несколько секунд), а графический отчет необходимо строить в том числе по итогам нескольких месяцев. Соответственно, если считывать все данные за несколько месяцев, то возникает ошибка переполнения памяти. Поэтому хотелось бы посоветоваться, каким образом можно прореживать данные при чтении из БД, как создать "скелет данных"? Или единственное нормальное решение состоит в увеличении memory_limit? Может, кто-то сталкивался с подобной проблемой?
 

Bitterman

Новичок
Может создать дополнительную таблицу, в которой хранить статистику, например, за каждый день (полдня, час...)? Соответственно обновлять ее каждый день (полдня, час...).
 

Sancho

Новичок
Это сильно снижает гибкость (потому что статистику, например, за время с 13:37 до 14:30 не посмотришь)...но за вариант спасибо:)
 

440hz

php.ru
делал подобную весчь.
таблица данных (билинговые операции. оплата. снятие со счета и т.д.). таблица примерно 5000000 записей. добавляется то же часто.

раз в час по хрону пересчитываю данные и записываю в отдельные таблицы где хранятся данные по часам, дням, неделям и месяцам.

громоздко, но зато через вебинтерфейс все отсвистывает.
 

Bitterman

Новичок
Sancho
Это сильно снижает гибкость (потому что статистику, например, за время с 13:37 до 14:30 не посмотришь)
Статистику за короткий промежуток можно брать из нынешней таблицы.
 

Sancho

Новичок
По сути, то же самое, что предложил Bitterman, спасибо, подумаем:)
 

440hz

php.ru
Автор оригинала: Sancho
По сути, то же самое, что предложил Bitterman, спасибо, подумаем:)
а по другому никак. думали уже и вертели по всякому. суммароные выборки на 5000000 записях с обработкой не катят ни по скорости ни по ресурсам.
 

Sancho

Новичок
Стоп...по-моему, я сам забыл, чего хочу :eek: Я так понимаю, что вы предлагаете суммарный подсчет. У меня ситуация несколько другая. Мои значения - это значения напряжения, тока и т.д. Соответственно, суммированию они не поддаются:) Или я что-то не так понял?:confused:
 

440hz

php.ru
Sancho

тебе надо выбрать в память 200000 записей и показать их графически?

ну можно ьсчитывать порциями используя LIMIT, но как-то сие не кошерно


все равно я бы сначала обсчитывал а при показе просто делал уже выборку по просчитаным данным
 

Sancho

Новичок
Автор оригинала: 440hz
Sancho

тебе надо выбрать в память 200000 записей и показать их графически?

ну можно ьсчитывать порциями используя LIMIT, но как-то сие не кошерно
Ну да, смысл именно такой. И насчет LIMIT'а я тоже думал и пришел к такому же выводу:) Потому и спрашиваю совета...
 

partizan

Новичок
А GROUP BY и функцию avg(...) что, уже отменили?

-~{}~ 02.08.07 13:26:

Делаеш в таблице поля day, hour, minute (номер дня, часа (не в сутках, вообще), минуты(аналогично)).

Если надо статистику за несколько дней - делаешm GROUP BY day,
несколько часов - GROUP BY hour, и т.д
 

Sancho

Новичок
Автор оригинала: partizan
А GROUP BY и функцию avg(...) что, уже отменили?

-~{}~ 02.08.07 13:26:

Делаеш в таблице поля day, hour, minute (номер дня, часа (не в сутках, вообще), минуты(аналогично)).

Если надо статистику за несколько дней - делаешm GROUP BY day,
несколько часов - GROUP BY hour, и т.д
И в итоге получится вместо двух значений по 150 и двух значений по 300 одно значение 225, что совсем не есть гуд:)

-~{}~ 02.08.07 13:40:

Автор оригинала: 440hz
на 5000000 будет тормозить, а если нужно подстыковать какую-нить таблицу - ваще заткнется
ага, как раз в таком случае вариант с промежуточными таблицами выглядит значителньо красивше:)
 

partizan

Новичок
Автор оригинала: Sancho
И в итоге получится вместо двух значений по 150 и двух значений по 300 одно значение 225, что совсем не есть гуд:)
А что по-вашему должно получится? Непонятна постановка задачи

-~{}~ 02.08.07 13:58:

Насколько я понял, есть набор значений некоторой ф-и в N точках,
и нужно показать график этой ф-и на m точках (N>>m). Тоесть [N/m] соседним значениям на графике будет отвечать одно значение.

И по какому провилу оно должно выбираться?

-~{}~ 02.08.07 14:00:

Или Вы хотите взять только m значений, и по ним интерполировать функцию?
Тогда нужно вспоминать теорему Котельникова-Шеннона, кажется
 
Сверху