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

Есть задача обработать большие файлы(базу). Я читаю через сканнер каждую

строку и записываю в map, т.к. это самый быстрый метод, который я знаю, чтобы избежать дубликаты строк. Но размер map[string]bool упирается в оперативную память, т.е. на Windows server с 16 GB RAM он максимум записывает в мапу 218кк пар, а мне нужно больше. Есть какие-то идеи как сделать лучше?

15 ответов

13 просмотров

map[string]struct{}

Web- Автор вопроса
Roman Timofeev
map[string]struct{}

А как юзать, вот допустим есть сканнер var s string m := make(map[string]struct{}) for scanner.Scan() { s = scanner.Text() }

а какова цель в итоге? т.е. что скрывается за тем, что надо вычитывать 218кк+ пар?

Web- Автор вопроса
Aleksandr F.
а какова цель в итоге? т.е. что скрывается за тем,...

Я сканирую допустим 8 файлов разных, записываю в мапу, а потом прохожусь по ключам map чтобы создать новый итоговый файл без дубликатов

Web
А как юзать, вот допустим есть сканнер var s strin...

Так же, как вы юзаете map[string]bool Каждый bool - это 1 байт

Web
Я сканирую допустим 8 файлов разных, записываю в м...

меня немного смущают слова про базу. если это реляционная БД, то почему сразу не писать в неё, обрабатывая исключения на неуникальные поля?

Web- Автор вопроса
Aleksandr F.
меня немного смущают слова про базу. если это реля...

Нет, это я просто так назвал. Я имел ввиду просто текстовый файл в котором много строк)

Web- Автор вопроса

Я сам себе её поставил, так что именно её я и описал. Если перефразировать, то мне даются файлы(они находятся все в одной папке), мне нужно все их записать в один файл избегая дубликатов

возможно хорошей идеей будет забить на производительность и реализовать тупой брутфорс с перебором каждого элемента по всем файлам паралелльно 🤷‍♂️

Web
Мы не ищем легких путей)

ну тогда могу предложить сначала сделать mergesort всех файлов в один, а потом просто удалять строчку, которая равна следующей)))

Вы можете сэкономить, кладя не сами строки, а хэши от них. Если, конечно, строки из базы с среднем длиннее длины хэша. upd: Хотя, вероятно вам нужно как-то строками жонглировать потом, а не просто посчитать кол-во уникальных.

Такие задачи всегда через сортировку решаются. Хеши вам уже предлагали, чуть-чуть расширим: csv структурой hash, rowNum, где rowNum - номер строки первого строки в исходом файле, а потом по этому номеру восстанавливаем исходный порядок строк.

Михаил
Такие задачи всегда через сортировку решаются. Хе...

А можно проще - залить все в базу и там... А потом экспорт.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта