LINUX.ORG.RU

MYSQL и скорость выборки


0

0

Тут наткунлся на такую софтину, считающая трафик по netflow, как Netflow Analyzer и заметил что даже при наличии записей за несколько лет, она умудряется выдать данные по любому периоду, хоть для определённого порта, хоть для IP адреса, за пару секунд. Записей скорее всего несколько миллионов, я думаю даже больше. Данные собираются с точность до 10 минут. Вопрос встал такой, как разработчики умудрились достичь такой скорости выборки, какой способ агрегации они могли применить...или ещё что? У меня при всевозможной агрегации и оптимизации, не получается даже немного приблизиться к этому результату.

Заранее спасибо!!!

★★★★★


ммм... ну собственно 10М записей - это более чем по-божески для MySQL. естественно, если это не full text search или поиск по blob-ам, если аккуратно расставлены индексы и таблицу не лочат постоянно какими-то другими запросами.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

да мне что то кажется что там больше 10М должно быть, поскольку мой вариант за месяц соберёт примерно 14М записей (прикидка), а в netflow analayzer'е однозначно mysql, проверял.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> да мне что то кажется что там больше 10М должно быть, поскольку мой вариант за месяц соберёт примерно 14М записей (прикидка), а в netflow analayzer'е однозначно mysql, проверял.

10-14 - не велика разница. ты лучше покажи что ты делаешь со своими выборками. что там в nfa происходит одному черту известно.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от z0D5e8n7x_2

> ну дык структуру таблицы в студию

show columns from fbnetflow_2417600704_1;
+---------+---------------------+------+-----+---------+-------+
| Field   | Type                | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| time    | bigint(20) unsigned | YES  |     | NULL    |       | 
| src     | bigint(20) unsigned | YES  |     | NULL    |       | 
| dst     | bigint(20) unsigned | YES  |     | NULL    |       | 
| nexthop | bigint(20) unsigned | YES  |     | NULL    |       | 
| dpkts   | bigint(20)          | YES  |     | NULL    |       | 
| doctets | bigint(20)          | YES  |     | NULL    |       | 
| input   | int(11)             | YES  |     | NULL    |       | 
| output  | int(11)             | YES  |     | NULL    |       | 
| first   | bigint(20)          | YES  |     | NULL    |       | 
| last    | bigint(20)          | YES  |     | NULL    |       | 
| dstport | int(11)             | YES  |     | NULL    |       | 
| srcport | int(11)             | YES  |     | NULL    |       | 
| prot    | int(11)             | YES  |     | NULL    |       | 
+---------+---------------------+------+-----+---------+-------+
13 rows in set (0.06 sec)

если дело может быть в индексах, то вопрос такой, как в этой таблице можно раскидать индексы?

cyclon ★★★★★
() автор топика
Ответ на: комментарий от klalafuda

> 10-14 - не велика разница. ты лучше покажи что ты делаешь со своими выборками. что там в nfa происходит одному черту известно. 

сами потоки агрегируются внутри моей софтины за период в 10 минут, затем пишутся в таблицу, далее просто идёт выборка по дате, с суммирование doctets и dpkts, плюс отдельная выборка может быть по dstport или srcport или по src и dst, могут быть комбинации

cyclon ★★★★★
() автор топика
Ответ на: комментарий от hizel

> и много там таких табличек , в смысле с такими подозрительными названиями? :]

Ну тут ничего подозрительного ))))

fbnetflow_2417600704_1:

2417600704 - адрес источника потока

1 - индекс (при заполнении таблицы 500000 строк, создаётся новая таблица с увеличиным на 1 индексом, т.е. в данном случае у новой таблицы будет индекс равный 2)

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

самих таблиц пока не много, не успели заполниться ибо постоянно дропаются, поскольку ещё всё в разработке, а о скорости я сужу по предыдущей попытке наваять такую же софтину, сама таблица была такая же, разве что разбивания по индексам не было

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> если дело может быть в индексах, то вопрос такой, как в этой таблице можно раскидать индексы?

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

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda


ну в общем и целом, я бы посоветовал топикастеру заглянуть в книжечке "MySQL Developer's Library", 4е издание. там освещены многие вопросы включая организацию базы данных, кто такие индексы и с чем их едят и прочее и прочее. есть в осле.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от cyclon

> 1 - индекс (при заполнении таблицы 500000 строк, создаётся новая таблица с увеличиным на 1 индексом, т.е. в данном случае у новой таблицы будет индекс равный 2)

И в чем тогда вопрос? 500000 - вообще не объем.

svr69 ★★
()
Ответ на: комментарий от phasma

fbnetflow_2417600704_1 | CREATE TABLE `fbnetflow_2417600704_1` (
  `time` bigint(20) unsigned default NULL,
  `src` bigint(20) unsigned default NULL,
  `dst` bigint(20) unsigned default NULL,
  `nexthop` bigint(20) unsigned default NULL,
  `dpkts` bigint(20) default NULL,
  `doctets` bigint(20) default NULL,
  `input` int(11) default NULL,
  `output` int(11) default NULL,
  `first` bigint(20) default NULL,
  `last` bigint(20) default NULL,
  `dstport` int(11) default NULL,
  `srcport` int(11) default NULL,
  `prot` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

cyclon ★★★★★
() автор топика
Ответ на: комментарий от svr69

> И в чем тогда вопрос? 500000 - вообще не объем.

это если выбирать придёться в пределе одной двух таблиц, а если придёться захватить 10 или 20 таких таблиц...

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> ..захватить..
...выбирать из...

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

обычно, белые люди by default добавляют ещё индекс a'la

CREATE TABLE `fbnetflow_2417600704_1` (
    `id` SERIAL,
    `time` bigint(20) unsigned default NULL,
....

угадайте, зачем :)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

ну здесь похоже из-за грамотного распределения по табличкам вырастает скорость, без индексов с 14к записями такая скорость маловероятна. Ну может там еще кэши какие и прочее

phasma ★☆
()
Ответ на: комментарий от phasma

> ну здесь похоже из-за грамотного распределения по табличкам вырастает скорость, без индексов с 14к записями такая скорость маловероятна. Ну может там еще кэши какие и прочее

ммм.. если ты про топикастера, то у него вообще нет индексов. со всеми вытекающими :) если про софтину, на которую он ссылается - там, уверен, есть и индексы и ручное разбиение на партиции и тд и тп. так что работа с миллионами или десятками миллионов записей - это совсем не проблема.

моё же замечание про [обязательное] добавление id - это отнюдь не для ускорения. это скорее, для 'навигации'.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> моё же замечание про [обязательное] добавление id - это отнюдь не для ускорения. это скорее, для 'навигации'.

ну уникальное поле должно быть в любом случае

phasma ★☆
()
Ответ на: комментарий от phasma

> ну уникальное поле должно быть в любом случае

да это понятно и индексы то же, это пока набросок и просто интересно что ещё можно сделать

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> да это понятно и индексы то же, это пока набросок и просто интересно что ещё можно сделать

Сфинкс/мемкэшд, лучше вообще минимизировать работу с СУБД.

phasma ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.