TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
Path Secure

1 Feb 2025, 16:30

Open in Telegram Share Report

Prev Next
Некоторое время назад взялся за старую задачку из беклога: нужно было объединить словари с паролями.

Сложность в том, что размер словарей был большим. 200 гигов и 56 гигов.

С большой вероятностью многие строчки будут дублироваться, а значит нужно убирать дубликаты. Я сразу понял, что решать такую задачу влоб (используя стандартные GNU утилиты sort и uniq нельзя). В связи с этим я пообщался с дата-сатанистами и объяснил свою задачу. Мне посоветовали воспользоваться duckdb.

Это форк sqlite на rust и это колоночная бд с кучей оптимизаций. Я решил попробовать. Установка очень простая, кажется, я выкачал бинарник на сервер и всё.

Кстати, о сервере. Это было достаточно смешно и интересно. У меня было где-то 3-4 итерации. Сперва я закупил виртуалку с 16 ядер и 32 гигов оперативной памяти. Я сразу же упёрся в производительность процессора, а потом в количество оперативной памяти, потому то duckdb буферизирует данные в оперативной памяти для обработки. Далее я увеличил размер оперативной памяти примерно до 60 и процессор до 32 ядер. На второй итерации я упёрся в производительность диска, потому что всё, что не помещается в оперативную память пишется на диск. Спустя несколько итераций я дошел до мегавиртуалки с 500 гигами оперативы и 64 ядрами процессораа, а также супер быстрыми дисками со скоростью 1000 мб/сек. 300 гигов рамы мне не хватало для задачи удаления нечитаемых символов.

В целом опыт достаточно забавный. Суммарно на всё ушло две субботы. Чуть больше познакомился с облачными вычислениями. По итогу имеется большой словарь, представляющий собой компиляцию из других словарей. Суммарный объем выше даже меньше, чем я предполагал, примерно 180 гигов. Всё веселье вышло примерно в 5к рублей. В целом совсем не много для исследовательского проекта в рамках бизнес задачи. Думаю, что всё можно было сделать суммарно часа за 2, если сразу взять большую виртуалку и загрузить словари в облачное хранилище, а также копировать и вставлять готовые команды.

А как вы решаете такие задачи? Поделитесь в комментариях!

Ниже полезные команды, которые мне понадобились для выполнения этой задачи:

Расширяем лимит для записи на диск, иначе загрузка может внезапно обрубиться:
PRAGMA max_temp_directory_size='200GiB'

Задаем число потоков для одновременной обработки:
PRAGMA threads = 32

Указывает максимальный объём оперативной памяти для использования:
PRAGMA memory_limit = '244GB';

Создание таблицы из файла без заголовка:
CREATE TABLE "merged_passwords" as select * from read_csv_auto('rockyou2021.txt', header=false, columns={'password':'TEXT'}, ignore_errors=true);

Чтение файла и загрузка его в таблицу:
insert into merged_passwords SELECT DISTINCT * from read_csv_auto('bigfile.txt', header=false, ignore_errors=True);

Также можно вычищать пустые сиволы из строк по регулярке:
update merged_passwords set password = regexp_replace(password, '\00', ' ','g')

Удалить строки короче 8 символов
DELETE FROM merged WHERE LENGTH(password) < 8;

Выгрузка базы в текстовый файл:
COPY merged_passwords to 'merged.txt' (HEADER FALSE);

#rnd #wordlists #duckdb

2.5k 1 34 47 39
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot