Иван Сагалаев хорошо пишет про "найм"
![топ 100 блогов](/media/images/default.jpg)
Под кутом - решение задачи.
Итак задача - есть логи, ip->nBytes, понятно, что ip может повторяться; есть таблица разумного размера, ip range->country. Выдать top ten countries, со счётчиками.
Решение.
1. Загоним в память функцию, ip->country; реализовать это, по диапазонам - куча есть решений, дерево диапазонов и т.п. Последний раз имплементировал год назад в чучах, предпоследний - два года назад в танге.
2. Изготовляем таблицу счётчиков, страна -> счётчик. Стран всего меньше 300.
3. Пробегаем один раз по логам, для каждой строчки находим страну и прибавляем число байтов в таблицу счётчиков.
4. Сканируем таблицу счётчиков, складывая ну, к примеру, в priority queue на десять элементов. Ну или если хотите, можно и отсортировать, 300 стран, не проблема - и взять первые 10.
|
</> |