170 похожих чатов

Если ему положить тест из пары десятков строк с дублями

внутри - они их корректно отбрасывает?-

35 ответов

22 просмотра

v1 := crc32.ChecksumIEEE([]byte("ofslchic0687@aol.com:angels1")) v2 := crc32.ChecksumIEEE([]byte("chandler_underwood@yahoo.com:supersnow111")) fmt.Println(v1, v2) Вывод: 4124419246 4124419246

Web
v1 := crc32.ChecksumIEEE([]byte("ofslchic0687@aol....

я там выше вариант предлагал

Igor-Shekalev Автор вопроса
Web
v1 := crc32.ChecksumIEEE([]byte("ofslchic0687@aol....

Это судьба) Тогда так и map[uint64]struct{} соответственно : tab := crc64.MakeTable(crc64.ISO) v1 := crc64.Checksum([]byte("ofslchic0687@aol.com:angels1"), tab) v2 := crc64.Checksum([]byte("chandler_underwood@yahoo.com:supersnow111"), tab) fmt.Printf("%08X\n", v1) fmt.Printf("%08X\n", v2)

Igor Shekalev
Это судьба) Тогда так и map[uint64]struct{} соотве...

Приветствую. На 235 млн. просто зависает, нагрузка на ЦП 30%, память используется почти под завязку. Считываю файл по одному, думал что, из-за того, что открываю много соединений, т.к. файлов много, но все равно зависает. Возможно, что map[uint64]struct{} рехешится, хотя я и использую map[uint64]bool, но вряд ли это многое поменяет. Что посоветуете ?

Roman Timofeev
У вас 235 млн уникальных строк?

Да, map[uint64]bool отсеивает коллизии, а в []string я храню сами строки

Web
Да, map[uint64]bool отсеивает коллизии, а в []stri...

и они не жмутся, тем же deflate, например?

Roman Timofeev
и они не жмутся, тем же deflate, например?

Неа, не думал об этом, просто сырые строки

Igor-Shekalev Автор вопроса
Web
Да, map[uint64]bool отсеивает коллизии, а в []stri...

Зачем хранить строки? Это забивает память, после чего система начинает свопиться и жутко тормозит. Неуникальные надо сразу записывать в файл и в памяти не держать, в этом вся суть.

Web
Приветствую. На 235 млн. просто зависает, нагрузка...

Такое на Spark решается достаточно просто, и даже если памяти меньше чем данных, он сам сбросит на диск. Это конечно не Go, и скорее всего это будет медленнее чем аккуратная ручная реализации, но проще, и потом можно заскейлить на несколько серверов, одной строкой получить поддержку S3, или сделать дополнительные манипуляции со строками

Igor Shekalev
Зачем хранить строки? Это забивает память, после ч...

Да, я уже догадался вчера) Вроде записывает, но как-то странно ведёт себя программа, крашится иногда или просто зависает. Хотя бывает зависает, а бывает при бОльших объемах нормально

Igor-Shekalev Автор вопроса
Web
Да, я уже догадался вчера) Вроде записывает, но ка...

А что в краше пишет? У go очень вменяемая диагностика при панике по сравнению с другими языками.

Igor Shekalev
А что в краше пишет? У go очень вменяемая диагност...

Пока что не словил, как только через cmd открыл, то и вылетов не было 🤯

Igor-Shekalev Автор вопроса
Web
Пока что не словил, как только через cmd открыл, т...

А с коллизиями как? Не возникает на таком хеше?

Igor Shekalev
А с коллизиями как? Не возникает на таком хеше?

На 5млн точно нет, с большим кол-вом пока что не пробовал, как будет информация я напишу

Igor Shekalev
А с коллизиями как? Не возникает на таком хеше?

Коллизии пока что не проверял. Другими способами было 225млн. и дальше было очень медленно. С этим методом 425млн. и дальше идет медленно очень, как и раньше, но вот это число почти в два раза увеличилось. Из-за чего замедление может быть? Это из-за рехеширования мапы?

Web
Коллизии пока что не проверял. Другими способами б...

А что у вас в валуях мапы? Строка или структура?

Web
map[uint64]bool

Я думал может с гц чего, но в этом случае он должен скипать содержимое мапы

Igor-Shekalev Автор вопроса
Web
Коллизии пока что не проверял. Другими способами б...

Замедление из-за того, что мар стал очень большой, я не думаю что от этого можно избавиться без разработки альтернативных структур, заточенных специально под задачу. Например, использовать не 1 map, а слайс из 26 map, по первой букве строки. Тогда каждый будет в 10+ раз меньше и добавление в него на порядки быстрее. Но тут уж надо разбираться, что важнее - сложность алгоритма или время. У нас время не было критично, так как это часть большого процесса. Как часто оно будет запускаться?

Igor-Shekalev Автор вопроса
Web
Не часто будет запускаться

А сколько памяти оно на 425 млн сожрало? Я думаю, если скорость критична - стоит шардировать по первому символу строки или даже по паре. Выше написал как вариант.

Igor-Shekalev Автор вопроса
Web
12 ГБ вроде

Стоит попробовать шардировать, то есть сделать slice (даже array из 27 элементов, буквы + все остальное) из map и в каждый map класть только строки с этой буквы.

Igor Shekalev
Стоит попробовать шардировать, то есть сделать sli...

Да, в этом есть смысл, я уже пробовал, просто хз получится ли увеличить кол-во. Я попробую самые популярные библиотеки + этот метод и напишу

Igor-Shekalev Автор вопроса
Web
Да, в этом есть смысл, я уже пробовал, просто хз п...

Там 5 строк кода лишних, с этого точно стоит начать.

Igor-Shekalev Автор вопроса
Web
Где?

Разбить один map на 27 штук по первой букве.

Web
12 ГБ вроде

Я вам предлагал ключи пожать тем же deflate

Web
uint64 сжать ?

А что вы с коллизиями делаете?

Roman Timofeev
А что вы с коллизиями делаете?

Я беру строку "e" и делаю key = crc64.Checksum([]byte(e), data.tab) Потом проверяю значение этого key в мапе, если false(то есть уникальная строка), то я отправляю в запись в выходной файл и ставлю ключу, true в мапе

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта