задачка с массивами

Alba

Новичок
задачка с массивами

сижу чешу репу, как-бы пошустрее организовать обход массива:
кусок исходных данных: (ловилка трафика)
----------------
192.168.65.22 68.142.72.250 1 48 1115 27038 6 eth0
192.168.65.22 68.142.72.250 1 48 1114 27038 6 eth0
10.10.1.4 192.168.68.199 1 93 139 1340 6 eth0
192.168.68.199 10.10.1.4 1 93 1340 139 6 eth0
10.10.1.4 192.168.68.199 1 93 139 1340 6 eth1
192.168.68.199 10.10.1.4 1 93 1340 139 6 eth1
192.168.64.34 80.67.86.24 1 48 1313 80 6 eth4
192.168.64.34 80.67.86.24 1 48 1313 80 6 eth0
10.10.1.4 10.10.1.255 2 156 33429 137 17 eth1
10.10.0.1 10.10.1.4 1 84 137 33429 17 eth1
10.10.1.4 10.10.0.1 1 78 33429 137 17 eth1
85.112.148.20 80.82.161.146 3 392 80 1229 6 eth4
85.112.148.20 192.168.64.65 3 392 80 1229 6 eth0
80.82.161.146 85.112.148.20 4 816 1229 80 6 eth4
192.168.64.65 85.112.148.20 3 128 1229 80 6 eth0
10.10.1.4 10.10.0.1 1 68 33429 53 17 eth0
10.10.0.1 10.10.1.4 1 168 53 33429 17 eth1
10.10.1.4 10.10.0.1 1 68 33429 53 17 eth1
10.10.1.4 192.168.68.135 1 93 139 1069 6 eth0
10.125.0.219 64.233.161.99 1 48 1262 80 6 eth4
10.125.0.219 64.233.161.99 1 48 1262 80 6 eth0
81.28.8.20 192.168.63.28 3 297 80 1084 6 eth0
81.28.8.20 192.168.63.28 3 297 80 1084 6 eth2
192.168.63.28 81.28.8.20 4 761 1084 80 6 eth2
192.168.63.28 81.28.8.20 4 761 1084 80 6 eth0
192.168.69.38 81.28.8.20 1 40 4404 80 6 eth0
81.28.8.2 10.10.1.4 5 1160 60272 22 6 eth1
10.10.1.4 81.28.8.2 5 1136 22 60272 6 eth1
192.168.67.6 194.67.23.165 1 48 2919 80 6 eth4
192.168.65.110 194.67.23.154 1 52 3066 1863 6 eth4
81.28.8.2 80.82.190.78 2 138 36784 53 17 eth4
81.28.8.2 80.82.190.78 2 138 36784 53 17 eth0
205.188.8.93 192.168.64.72 1 40 5190 3121 6 eth0
205.188.8.93 80.82.161.146 1 40 5190 3121 6 eth4
-------------

по столбцам: получатель, отправитель, кол-во пакетов, байт, порт получателя, порт отправителя, протокол, интерфейс

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

в голове крутятся кое-какие идеи, но, что-то пока не могу их выразить :)
кто чем поможет?
 

MadGreen

meninweb
перегони лучше в БД - будет гораздо легче и проще все...
к тому же, я так понимаю, записей будет все больше и больше, без базы не обойдешься....
а все что нужно тебе sql запросами описать не сложно
 

Alba

Новичок
Автор оригинала: MadGreen
перегони лучше в БД - будет гораздо легче и проще все...
к тому же, я так понимаю, записей будет все больше и больше, без базы не обойдешься....
а все что нужно тебе sql запросами описать не сложно
мне надо результат запихивать в базу, а не "сырой список"...
да и, через sql будет огромная нагрузка на базу и, не уверен, что будет быстрее...
 

MadGreen

meninweb
ты знаешь для чего базы данных придумали? или ты думаешь что написанная тобой функция интерпретируемого языка работающая с массивом будет работать быстрее бинарного кода БД?

Автор оригинала: Alba
да и, через sql будет огромная нагрузка на базу и, не уверен, что будет быстрее...
насчет нагрузки на базу - чушь...

выгребать все из текстового файла своими функциями гораздо большая нагрузка на сервер
 

Alba

Новичок
Автор оригинала: MadGreen
ты знаешь для чего базы данных придумали? или ты думаешь что написанная тобой функция интерпретируемого языка работающая с массивом будет работать быстрее бинарного кода БД?


насчет нагрузки на базу - чушь...

выгребать все из текстового файла своими функциями гораздо большая нагрузка на сервер
в "собранном виде" у меня в таблице за месяц набегает около 5 млн записей... в сыром-же виде - 6000-10000 строк за 2 минуты - это будет в районе 200 млн записей в месяц... - у муксула крыша поедет :)
 

MadGreen

meninweb
позволь полюбопытствовать, а сколько строк в текстовом файле который ты собираешься обрабатывать?

-~{}~ 29.07.06 00:14:

и к тому же какая разница сколько строк: кто тебе мешает помечать новые и при выборках в sql запросах обрабатывать только их?
все сводится к тому что те задачи которые ты описал php+массивы, ИМХО, будет решать через задний проход, особенно учитывая что php такие объемы как ты описал нормально обрабатывать массивами не сможет...
решать тебе
 

Alba

Новичок
я-же написал, что 6000-10000 строк...
скрипт запускается раз в две минуты, "выгребает" эти 6000-10000 строк, и, результирующий массив запихивает в БД

я понимаю, что объёмы и нагрузка бешеные, но, боюсь, что мускул ляжет очень быстро, если всё хранить в "сыром" виде...
 

Alba

Новичок

Alba

Новичок
Автор оригинала: HraKK
GROUP BY
не уверен, что group by с этим справится...
привожу "минимальный" упрощённый пример:

исходные данные:
srcip, dspip, packets
192.168.1.1, 192.168.1.2, 11
192.168.1.2, 192.168.1.1, 12
192.168.1.3, 192.168.1.2, 13
192.168.1.2. 192.168.1.3, 14

результат:
srcip, dstip, packets
192.168.1.1 -> 192.168.1.2 (pktin: 11, pktout: 12)
192.168.1.2 -> 192.168.1.1 (pktin: 12, pktout: 11)
192.168.1.2 -> 192.168.1.3 (pktin: 14, pktout: 13)
192.168.1.3 -> 192.168.1.2 (pktin: 13, pktout: 14)
 

zerkms

TDD infected
Команда форума
LEFT JOIN таблицы с собой с условием `t1`.`srcip` = `t2`.`dstip` AND `t1`.`dstip` = `t2`.`srcip` и у тебя будет именно то что ты хочешь
 
Сверху