Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 01.06.2015, 07:19   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,491
Написано 2,950 полезных сообщений
(для 5,205 пользователей)
[MySql] Статистика

В общем имею таблицу со статистикой. В ней данные уже за 4 месяца. Хочется выгрузить данные за первые два три месяца в другую базу и почистить текущую. Как это лучше всего организовать?

Таблица со статистикой занимает уже 1,7 гигабайта и имеет порядка 7 миллионов строк.
Если это важно, то примари индекс по 2 столбцам + индексы еще по пяти столбцам.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 01.06.2015, 12:15   #2
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,423
Написано 3,449 полезных сообщений
(для 6,840 пользователей)
Ответ: [MySql] Статистика

Если bottleneck'ом является сами запросы на обработку информации, то лучше собирать статистику с минимум индексов, только с теми индексами, по которым ты будешь собирать кусок данных, например даты: выбираешь за один месяц все данные.

Сохраняешь данные за месяц в другую бд, если у тебя дома мощьный комп или есть еще где-то компьютер помощнее (CPU - здесь решает с широким буффером ОЗУ + SSD).
Далее когда есть копия нужных данных за промежуток времени, делаешь уже статистику с этой копии. Работать с таблицей которая имеет только часть данных с которых тебе нужна статистика - лучше, чем работать с только 10% (например) данных с таблицы, т.к. индексы - это конечно хорошо, но рост таблицы замедлит запросы как не крути.

Делаешь статистику, аггрегируешь данные как нужно, и дальше хранишь в удобном виде.

У нас есть очень похожая ситуация, собираем очень много разной инфы, таблицы выросли до уже десятков и почти сотен миллионов записей. Нужно было реагировать.
Написали несколько cron задач, которые время от времени собирают например вчерашние данные, и аггрегируют в более удобный и компактный формат, запись на день, и в другую коллекцию (используем mongodb).
Затем основная таблица со всеми event'ами чистится, преждевременно сохраняя удаляемые данные в архивчик, чисто для бэкапов и хранения.

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

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

Таким образом у тебя есть постоянно собираемая статистика и автономно генерируются исторические данные, которые уже потом можно показывать разработчику в удобном виде.

Если нужно добавить новый тип данных - сохраняешь все в ту же таблицу, и потом пишешь очередную cron задачу чтобы аггрегировалась статистика.

Учти, что не всегда знаешь что за информацию сможешь извлечь из данных. Поэтому удалять данные статистики - не супер идея, лучше архивируй и храни где-то.
Было пару раз когда нужно было сделать новый скрипт чтобы что-то сравнить несколько месяцев назад и совсем недавно. Если бы не было архивов данных, было бы грустно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (01.06.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 14:06.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com