TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Path Secure

1 Feb 2025, 16:30

Открыть в Telegram Поделиться Пожаловаться

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
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot