Поиск в большом списке ускорение выборки скорость

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Целый день безрезультатно. Протестировал все сниппеты, которые нашел на форуме. Скорость не радует, прошу помощи)

1) В папке находится 500к html файлов.
2) Отдельно есть txt файл, в нем 500к строк с урлами.
3) Запускаю проект, берем 1 файл, берем все ссылки из этого документа, их около 50 штук.
4) Затем включается цикл по кругу, и в цикле ищем эти 50 ссылок по одной в этом большом списке.

В итоге, шаблон создается 10-12 итоговых файлов в минуту. Т.е 500к/12 файлов=41666минут=694часа=28 суток. Жуть однако.

Многопоток при этом не помогает, не знаю почему.

Решил сделать кластеризацию. Т.е. 500к строк разбил по алфавиту, получилось 800 txt файлов
ab.txt - в нем ссылки с вхождением /ab.....
ac.txt
ad.txt
ae.txt
......
в каждом ~ от 10 до 10к строк.

В каждом цикле мы берем ссылку, и парсим из нее первые 2 символа [\w\W]{1,2} , получается к прмеру - ab

Затем привязываем список к файлу ab.txt - и т.к в нем уже меньше строк - поиск происходит быстрее. И т.д.

Результат стал лучше. Примерно 30 файлов в минуту, но все равно это около 10 дней.



--------------------------
Теги: большой список, поиск вхождений, ускорение списка, быстрый поиск в списке, кластеризация списка, скорость поиска
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
а ты делал замеры, на что сколько времени уходит?
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
а ты делал замеры, на что сколько времени уходит?
Да делал. Чем больше строк в файле, тем дольше длится операция.

Если поиск идет в файле где 500к строк - то 12 файлов получается в минуту.
Если 100к строк - то 70 файлов в минуту.
Если 20к - то 100 в минуту.

Хотя если подумать, то 50 поисков в списке где 500к строк - длится около 5 секунд. Т.е в секунду 10 поисков. Это нормально, или долго?

А когда сделал кластеризацию, выходит в среднем по 30 файлов в минуту.
 

nole

Client
Регистрация
19.11.2010
Сообщения
368
Благодарностей
217
Баллы
43
Какая цель конечная? Сделать список урлов, которых нет в 500к файле? будет проще сначала все спарсить, поудалять дубли, а потом уже сделать разницу этих файлов софтом, предназначенным для этого, тем же текстпайпом для примера
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Какая цель конечная?
Цель: В каждом html файле есть ссылки, их по 50-100 штук на каждый документ. Мы их берем в список, а затем по 1-му ищем совпадение в списке где 500к строк.
Затем идет простая замена.

На форуме встречал упоминание о том, что можно ссылки загнать в HashSet http://zennolab.com/discussion/threads/rabota-so-spiskami.22184/#post-148846 (последнее сообщение в теме), и так будет быстрее работать. Но инфы на форуме, по этому поводу, я не нашел.
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
UDP: Целый день эксперементировал с потоками, циклами, добился результата в 60 файлов в минуту.

Чтобы было сделано:

1) Перенесены списки 800 штук на SSD диск C
2) Чтение файлов просиходит с диска D
3) Результаты сохраняются на диск E
4) Выставил инстансу 800 Мб оперативки, + перезагрузка после 3 выполнений. До этого Зенка иногда самопроизвольно закрывалась ((.

Потоки заработали, но больше 4 ставить смысла нет. В диспетчере задач вижу нагрузку на диск Зенкой в пределе 20-40Мб/сек. Странно, файлы то мелкие.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)