Задавайте вопросы, мы ответим
Вы не зашли.
Дано:
Существует база 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)
Неактивен
neflow netflow..., он еще жив?
Похожего толка задачу я в своё время решил горизонтальным шардированием.
Все данные за 18 июля 2013 хранились в таблице 2013_07_18,
Все данные за 19 июля 2013 хранились в таблице 2013_07_19
и так далее.
Даже если у Вас данные сервис сбрасывает в одну таблицу с названием, допустим, t,
то по наступлению полуночи нужно создать другую таблицу tmp, переименовать t
в 2013_07_20, далее tmp в t.
Далее уже в этой суточной свежей таблице можно делать любые денормализации, считать любую статистику. Данные в нее уже не падают, так что можно смело действовать.
Хотя циски ведь netflow-пакеты постоянно по udp шлют, а не раз в сутки.
Или у Вас между экспортером и Вашей программой еще что-то посередке стоит?
Неактивен
deadka написал:
Хотя циски ведь netflow-пакеты постоянно по udp шлют, а не раз в сутки.
Или у Вас между экспортером и Вашей программой еще что-то посередке стоит?
Проблема в том что я это узнать не могу.
Неактивен
Ну опишите, как Вы получаете данные. Вы биндитесь на какой-то порт и слушаете сокетом? Или из файла читаете? Или как?
Неактивен
deadka написал:
Ну опишите, как Вы получаете данные. Вы биндитесь на какой-то порт и слушаете сокетом? Или из файла читаете? Или как?
У меня есть доступ к базе с одной таблицей, которая пополняется один раз в сутки, в неё заливает данные нечто, что именно я не знаю и спросить возможности нет. Саму базу просматриваю подключаясь майАдмином.
Неактивен
Ну тогда раз в сутки по крону, допустим в полночь переименовываете табличку в 2013_11_10 (текущие сутки), а вместо старой создаёте новую с тем же именем что было и с новой структурой. На 2013_11_10 строите нужные индексы, денормализации - все, что нужно.
Графики - ну тут много библиотек. Гляньте тут.
Корпорация добра хорошую библиотечку предлагает
https://developers.google.com/chart/?hl=ru&csw=1
Ну и к слову, если Вам нужно именно по конкретным IP строить - то может быть можно и не по дням, а по месяцам ротации делать. Зависит уже от мощности машинки. Ну и индексы корректно расставить.
Неактивен
deadka написал:
Ну тогда раз в сутки по крону, допустим в полночь переименовываете табличку в 2013_11_10 (текущие сутки), а вместо старой создаёте новую с тем же именем что было и с новой структурой. На 2013_11_10 строите нужные индексы, денормализации - все, что нужно.
Графики - ну тут много библиотек. Гляньте тут.
Корпорация добра хорошую библиотечку предлагает
https://developers.google.com/chart/?hl=ru&csw=1
Ну и к слову, если Вам нужно именно по конкретным IP строить - то может быть можно и не по дням, а по месяцам ротации делать. Зависит уже от мощности машинки. Ну и индексы корректно расставить.
Спасибо большое! Буду думать.
Неактивен