The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Группировка огромного списка"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Группировка огромного списка"  
Сообщение от Pontiy.Pilat email on 06-Ноя-07, 08:18 
Есть список ip-адресов и трафику для каждого адреса. список в простом текстовом файле.
формат: [IP-адрес] [Bytes]
Проблема в том, что размер списка несколько миллионов строк.
Как лучше реализовать группировку IP-адресов с сумированием Байтов.
Ложить всё в массив... я думаю это безумство :-)
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Группировка огромного списка"  
Сообщение от newser (ok) on 06-Ноя-07, 09:36 
>Есть список ip-адресов и трафику для каждого адреса. список в простом текстовом
>файле.
>формат: [IP-адрес] [Bytes]
>Проблема в том, что размер списка несколько миллионов строк.
>Как лучше реализовать группировку IP-адресов с сумированием Байтов.
>Ложить всё в массив... я думаю это безумство :-)

СУБД

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Группировка огромного списка"  
Сообщение от Аноним on 07-Ноя-07, 00:50 
Можно простым файлом обойтись :)

Так как ip адресов конечно (2^32) можно использовать их все как массив.
то есть 4 байта ip использовать как (unsigned long int) индекс :)

Сам массив хранить в файле.

То есть, ip адресу 0.0.0.0 соотв индекс (смещение 0), 0.0.0.1 смещение 1.

Правда файл получится 32 гигабайта. Но наверно разреженный, так что не страшно :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Группировка огромного списка"  
Сообщение от jd (??) on 07-Ноя-07, 04:03 
>Проблема в том, что размер списка несколько миллионов строк.
>Ложить всё в массив... я думаю это безумство :-)

На самом деле, важно не сколько строк, а сколько в них разных адресов.

Так что использовать какую-нибудь разновидность массива (например std::map из C++/STL) может оказаться не такой уж и плохой идеей. Если нужна только сумма трафика для каждого адреса.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Группировка огромного списка"  
Сообщение от Pontiy.Pilat email on 07-Ноя-07, 07:42 
Думаю лучше сделать в СУБД (как посоветовал newser).
Масштабируемость получается больше. Потому что рано или поздно будет затребовано деление трафика по портам/адресам и самое эффективое пихать всё в БД.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Группировка огромного списка"  
Сообщение от AMDmi3 (??) on 07-Ноя-07, 19:13 
>всё в массив... я думаю это безумство :-)

нахрена в массив? Читаем файл построчно, в памяти храним только таблицу IP - сумма байт для встретившихся IP. Логично использовать хэш.

На C++ - std::hash_map и прога из двух десятков строчек.
На Perl - стандартный хэш и прога из четырех строк.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру