Skip to content

Extremely optimized file shuffler (lines randomizer) using chunk system and powered by Rust.

License

Notifications You must be signed in to change notification settings

lonesomestranger/file-shuffler-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

File Shuffler (Rust)

License: MIT

Высокопроизводительная утилита командной строки, написанная на Rust, для эффективного перемешивания строк в очень больших текстовых файлах.

Этот инструмент разработан для работы с файлами, которые не помещаются в оперативную память, используя систему чанков (частей) для обработки данных с минимальным потреблением RAM.

✨ Особенности

  • Эффективность по памяти: Обрабатывает гигантские файлы (многогигабайтные) с низким потреблением памяти благодаря разделению на чанки.
  • Высокая производительность: Оптимизирован для скорости с использованием буферизованного ввода-вывода и многопоточной обработки.
  • Удобство использования: Интерактивное меню для выбора файла в текущей директории.
  • Качественное перемешивание: Реализует двухэтапное перемешивание: сначала строки перемешиваются внутри каждого чанка, а затем чанки случайным образом объединяются в итоговый файл.

🚀 Начало работы

Предварительные требования

Для сборки и запуска проекта вам понадобится установленный Rust toolchain.

Установка и запуск

  1. Клонируйте репозиторий:

    git clone https://github.com/lonesomestranger/file-shuffler-rust.git
    cd file-shuffler-rust
  2. Поместите ваш файл в директорию проекта: Скопируйте большой текстовый файл, который вы хотите перемешать, в ту же папку, где находится проект.

  3. Запустите приложение: Для максимальной производительности рекомендуется запускать в release-режиме.

    cargo run --release
  4. Выберите файл: В терминале появится меню со списком файлов в текущей директории. Используйте стрелки для выбора нужного файла и нажмите Enter.

    ? Select input file
    ❯ my_large_dataset.txt
      another_file.log
    
  5. Дождитесь завершения: Программа начнет обработку. В консоли будет отображаться прогресс перемешивания каждого чанка и общее время выполнения.

  6. Найдите результат: Перемешанный файл будет сохранен в той же директории с именем shuffled_ИМЯ_ВАШЕГО_ФАЙЛА.txt.

⚙️ Как это работает

Процесс перемешивания разделен на несколько этапов для обеспечения высокой производительности и низкого потребления памяти:

  1. Разделение на чанки: Входной файл читается и делится на чанки заданного размера (по умолчанию 512 МБ).
  2. Перемешивание чанков: Строки внутри каждого чанка перемешиваются в памяти и записываются во временный файл в папке temp_chunks.
  3. Слияние: Временные файлы-чанки объединяются в один итоговый файл. Процесс слияния также рандомизирован: утилита случайным образом выбирает, из какого чанка взять следующую строку.
  4. Очистка: Временная директория temp_chunks удаляется после успешного завершения.

Конфигурация

Вы можете настроить производительность, изменив константы в верхней части файла src/main.rs:

  • CHUNK_SIZE: Размер каждого чанка в байтах. Увеличение может ускорить процесс на системах с большим количеством RAM.
  • BUF_CAPACITY: Размер буфера для операций чтения/записи.

🤝 Вклад

Вклад в проект приветствуется! Не стесняйтесь открывать issue или отправлять pull request.
Также доступен на Codeberg.

📄 Лицензия

Этот проект распространяется под лицензией MIT. Подробности смотрите в файле LICENSE.

About

Extremely optimized file shuffler (lines randomizer) using chunk system and powered by Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages