Удалить дубли - 80кк строк

1 234 5
AX
На сайте с 20.09.2008
Offline
133
#21
BredoGen.:
Хранишь массив с хешами в памяти

Ну сохрани массив хэшей от 80кк строк в памяти...

Как вариант - резать файл на более мелкие, и тогда уже более реально его обработать.

ТС, сколько весит файл с 80кк ключами? А то я даже представить не могу...

BredoGen.
На сайте с 19.10.2009
Offline
98
#22
ApocX:
Ну сохрани массив хэшей от 80кк строк в памяти...

Как вариант - резать файл на более мелкие, и тогда уже более реально его обработать.

ТС, сколько весит файл с 80кк ключами? А то я даже представить не могу...


bredogen@debian:~/Работа/unique$ du file.txt
922104 file.txt
bredogen@debian:~/Работа/unique$ wc -l file.txt
25994075 file.txt
bredogen@debian:~/Работа/unique$ ./unique
Path to file: file.txt
Save to: my.txt

Finished with 803047 unique lines! Time elapsed: 99775ms

512RAM

Файл размером в 900мб и 26кк строк спокойно поместился и обработался за 99секунд. У меня все работает, ЧЯДНТ? (:

80кк будет весить около 3гб... Как минимум 2гб оперативной памяти нужно будет, если там много уникальных строк.

bmwm3
На сайте с 21.10.2009
Offline
35
#23

а если сначало отсортировать строки по кол. символов а потом в них уже сравнивать ключи + алфавит ))

Лучше решение под даттинг трафик!!!! (http://tinyurl.com/39lto3z) авто постинг в форумы(все движки)
firacet
На сайте с 23.07.2008
Offline
68
#24

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

Сбылись мечты народный: Мир-Труд-Май
BredoGen.
На сайте с 19.10.2009
Offline
98
#25
firacet:
Еще вариант, сохранять строку в массив но не как значение а как ключь. тогда в памяти будут только уникальные строки.

Строки занимают слишком много памяти, их лучше вообще не хранить.

Мой вариант:

Версия для винды: http://dl.dropbox.com/u/16333142/unique.tar.gz

Для Ъ & линуксоидов (исходники): http://dl.dropbox.com/u/16333142/unique_src.tar.gz

В памяти хранится контейнер с числовыми хешами. Т.е теоретически каждая строка [хеш каждой строки] будет занимать 4 байта. В реальности все не так хорошо и для обработки 80кк понадобится чуть больше.

По скорости вроде рвет всех и вся. Удалось скормить 26кк (900мб), как будет вести с более весомыми данными (и вообще на винде) - не знаю.

W
На сайте с 24.07.2009
Offline
21
#26

Кто это напарсил 80кк и забыл проверить их на дубли 0_o ..... просто интересно :)

Конверт 253$/1k - здесь (http://tinyurl.com/3xtjr7e)!
S
На сайте с 26.05.2010
Offline
37
#27
BredoGen.:
Строки занимают слишком много памяти, их лучше вообще не хранить.

Мой вариант:
Версия для винды: http://dl.dropbox.com/u/16333142/unique.tar.gz
Для Ъ & линуксоидов (исходники): http://dl.dropbox.com/u/16333142/unique_src.tar.gz

В памяти хранится контейнер с числовыми хешами. Т.е теоретически каждая строка [хеш каждой строки] будет занимать 4 байта. В реальности все не так хорошо и для обработки 80кк понадобится чуть больше.
По скорости вроде рвет всех и вся. Удалось скормить 26кк (900мб), как будет вести с более весомыми данными (и вообще на винде) - не знаю.

Большое спасибо! То что нужно. Скормил 5Гб и отлично почистило)

T
На сайте с 06.11.2009
Offline
24
#28

ещё можно читать файл построчно и сохранять в виде файлов на диске каждый кей

только надо на диры разбить по 1й букве например, а то 80кк файлов в одной дире не откроются

будет 100% уникальность + в памяти максимум одна строка

покупаю худеющий ру-траф в любых кол-вах от $15 за кило | стоимость смс на номер (http://stoimost-sms.ru) | мой опыт работы с секс-шопами (/ru/forum/552912)
W
На сайте с 24.07.2009
Offline
21
#29
terramona:
ещё можно читать файл построчно и сохранять в виде файлов на диске каждый кей
только надо на диры разбить по 1й букве например, а то 80кк файлов в одной дире не откроются
будет 100% уникальность + в памяти максимум одна строка

геморно, не ? + память быстрее.

bmwm3
На сайте с 21.10.2009
Offline
35
#30

хз, по моему если отсортировать по алфавиту(или даже к примеру первым 3 символам), кол. символов в строке, сохранить в разные файлы, то можно хоть 10гб провернуть ))

1 234 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий