SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.11.2013 16:18:19

b1nary
Участник
Зарегистрирован: 07.11.2013
Сообщений: 4

Огромная и быстрорастущая таблица.

Дано:
Существует база MySQL, в ней одна таблица. В эту таблицу некий сервис, один раз в сутки сбрасывает статистику всех подключений из локальной сети во вне и наоборот, предположительно с какого-то центрального роутера. В таблице есть поля:

id | unix_secs | doctets | srcaddr | dstaddr | srcport | dstport
Где:
id - автроинкрементарный id
unix_secs - юникс время
doctets - трафик предположительно в байтах
srcaddr - исходящий ip
dstaddr - целевой ip
srcport - исходящий порт
dstport - целевой порт

Ну так вот, таблица с данными за 2 месяца содержит 78,762,715 строк и весит 4.3 ГБ. В таблицу заносится каждое соединение. Поэтому за сутки с одного локального IP записываются тысячи строк соединений во вне и из вне. Хотя локальных ip в районе 250. К примеру за один день на мой комп из вне было 19532 подключений, т.е. это даунлоад трафик, где с одного, где с разных ip.
Задача:
Нарисовать на php какой нибудь сервис статистики, дабы можно было глянуть и увидеть с каких ip более всего трафика ушло/пришло, т.е. кто больше всего грузит канал. Но есть одна проблема.
Проблема:
Проблема в том что база растёт на глазах. Запрос с выборкой по конкретному ip и дате выполняется около минуты. А через n месяцев табличка будет весить n Гб и обрабатываться неизвестно как долго. Поэтому от такого количества данных необходимо избавляться!
Решение:
То что первое пришло в голову. К примеру кроном будет запускаться раз в сутки php скрипт который будет выбирать данные по каждому локальному ip, суммировать их и класть в другую таблицу, где в место тысяч строк из старой таблицы, будет одна, а обработанные строки в старой таблице будут удаляться.
Вопрос:
Посоветуйте пожалуйста, как можно поступить в данной ситуации более гибко? Предлагать настроить по человечески тот сервис который сбрасывает статистику бесполезно.

Отредактированно b1nary (07.11.2013 16:20:16)

Неактивен

 

#2 07.11.2013 17:19:52

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Огромная и быстрорастущая таблица.

neflow netflow..., он еще жив? smile

Похожего толка задачу я в своё время решил горизонтальным шардированием.
Все данные за 18 июля 2013 хранились в таблице 2013_07_18,
Все данные за 19 июля 2013 хранились в таблице 2013_07_19
и так далее.

Даже если у Вас данные сервис сбрасывает в одну таблицу с названием, допустим, t,
то по наступлению полуночи нужно создать другую таблицу tmp, переименовать t
в 2013_07_20, далее tmp в t.
Далее уже в этой суточной свежей таблице можно делать любые денормализации, считать любую статистику. Данные в нее уже не падают, так что можно смело действовать.

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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 07.11.2013 17:43:09

b1nary
Участник
Зарегистрирован: 07.11.2013
Сообщений: 4

Re: Огромная и быстрорастущая таблица.

deadka написал:

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

Проблема в том что я это узнать не могу.

Неактивен

 

#4 07.11.2013 17:44:53

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Огромная и быстрорастущая таблица.

Ну опишите, как Вы получаете данные. Вы биндитесь на какой-то порт и слушаете сокетом? Или из файла читаете? Или как?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 07.11.2013 17:48:45

b1nary
Участник
Зарегистрирован: 07.11.2013
Сообщений: 4

Re: Огромная и быстрорастущая таблица.

deadka написал:

Ну опишите, как Вы получаете данные. Вы биндитесь на какой-то порт и слушаете сокетом? Или из файла читаете? Или как?

У меня есть доступ к базе с одной таблицей, которая пополняется один раз в сутки, в неё заливает данные нечто, что именно я не знаю и спросить возможности нет. Саму базу просматриваю подключаясь майАдмином.

Неактивен

 

#6 07.11.2013 18:04:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Огромная и быстрорастущая таблица.

Ну тогда раз в сутки по крону, допустим в полночь переименовываете табличку в 2013_11_10 (текущие сутки), а вместо старой создаёте новую с тем же именем что было и с новой структурой. На 2013_11_10 строите нужные индексы, денормализации - все, что нужно.

Графики - ну тут много библиотек. Гляньте тут.

Корпорация добра хорошую библиотечку предлагает
https://developers.google.com/chart/?hl=ru&csw=1

Ну и к слову, если Вам нужно именно по конкретным IP строить - то может быть можно и не по дням, а по месяцам ротации делать. Зависит уже от мощности машинки. Ну и индексы корректно расставить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 07.11.2013 20:39:40

b1nary
Участник
Зарегистрирован: 07.11.2013
Сообщений: 4

Re: Огромная и быстрорастущая таблица.

deadka написал:

Ну тогда раз в сутки по крону, допустим в полночь переименовываете табличку в 2013_11_10 (текущие сутки), а вместо старой создаёте новую с тем же именем что было и с новой структурой. На 2013_11_10 строите нужные индексы, денормализации - все, что нужно.

Графики - ну тут много библиотек. Гляньте тут.

Корпорация добра хорошую библиотечку предлагает
https://developers.google.com/chart/?hl=ru&csw=1

Ну и к слову, если Вам нужно именно по конкретным IP строить - то может быть можно и не по дням, а по месяцам ротации делать. Зависит уже от мощности машинки. Ну и индексы корректно расставить.

Спасибо большое! Буду думать.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson