Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Простенькая задачка (consth) 25/09/2010 - 19:46:19
      Re: Простенькая задачка (FUKS) 28/09/2010 - 05:52:41
      Re: Простенькая задачка (consth) 04/10/2010 - 01:16:22

> Original message text:
> From: consth - 25/09/2010 - 19:46:19
> Subject:Простенькая задачка
> -----------------
> Имеется считалка трафика.
> Ну и соответственно табличка для нее.
> Задача проста: если по какой-то установленной сессии есть трафик - досуммировать его к имеющемуся и сдвинуть время окончания сессии.
> Если таковой сессии не обнаружено - вставить новую строчку в таблицу.
> Вроде бы стандартное решение:
> INSERT INTO `tr20100925` SET keyss='193.169.62.13:3893:10.139.73.12:55778:17:' , timestart = '1285410646', timefin = '1285410646' , ipsource = '193.169.62.13' , portsource = '3893' , ipdest ='10.139.73.12' , portdest ='55778' , proto = '17' , traf = '268' ON DUPLICATE KEY UPDATE timefin = '1285410646' , traf = traf+'268';
> Но маленькая проблемка. Таких строчек у меня набирается за 15 минут около 5 миллионов. Все они запихиваются в файл, после чего файл скармливается MySQL
> mysql -h 1.1.1.1 -u traf -p -b statbase < /var/flows/acct/traff0.sql
> и всего после 1,5 часов обработки (проц при этом загружен не более чем на 5%) мне выдается
> ERROR 1114 (HY000) at line 1327908: The table 'tr20100925' is full
> Вопроса собственно 2:
> 1.Как мне уложиться не в 1,5 часа а в 15 минут ?
> 2.Где надо чего подкрутить, чтобы не выскакивала ошибка?
> Ну и глобальный вопрос - а вообще это реализуемо на MySQL или какую другую базу поискать.
>
>


From: consth - 04/10/2010 - 01:16:22
Subject:Простенькая задачка
-----------------
Запрос которым создана таблица в общем-то тривиален.
CREATE TABLE IF NOT EXISTS `$basename`.`$tablename` (
`keyss` VARCHAR(255) NOT NULL DEFAULT 0,
`timestart` INTEGER(10) UNSIGNED NOT NULL DEFAULT 0,
`timefin` INTEGER(10) UNSIGNED NOT NULL DEFAULT 0,
`ipsource` VARCHAR(45) NOT NULL DEFAULT 0,
`portsource` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`ipdest` VARCHAR(45) NOT NULL DEFAULT 0,
`portdest` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`proto` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`traf` DOUBLE UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY(`keyss`)
)
ENGINE = InnoDB;

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


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
37543



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |