Оценка размера большого текстового файла - PullRequest
0 голосов
/ 28 мая 2020

Из комментария к вопросу о выборе n случайных строк из текстового файла здесь:

Выбрать случайные строки из файла

Пользователь прокомментировал, что они использовали команду shuf для случайного выбора строк из текстового файла, содержащего 78 миллиардов строк, менее чем за минуту.

Я вижу из различных источников на inte rnet, что у людей есть текстовые файлы размером от 100 до 200 - 300 ГБ, всего 7-15 миллиардов строк, в зависимости от метаданных.

Предполагается, что у нас есть:

  1. Текстовый файл, содержащий символы ASCII, где мы определяем разрыв строки для новой строки после каждых 100 символов. В этом файле 78 миллиардов строк.

  2. У нас есть система с вычислительной мощностью:

    a. Оперативная память - 16 ГБ

    1028 * б. Процессор - 2,5 ГГц Intel Core i7

    c. Диск - 500 ГБ SSD

Мне любопытно:

  1. Каков будет приблизительный размер текстового файла?

Будет ли это также зависеть от того, как разные ОС кодируют и хранят символы на уровне памяти? Если да, то насколько это будет учитываться при расчете размера?

В идеале, сколько времени bash - запущенного в системе (с указанными выше спецификациями) - потребуется для обработки этого текстового файла с помощью команды shuf ?

Если размер текстового файла указан в ТБ, то как передать данные в систему? Как shuf будет работать с такими большими файлами с максимальной эффективностью в упомянутой системе.

shuf производительность в моей системе (спецификации выше):

  • 100 символов в строке: 1 строка

    РАЗМЕР ФАЙЛА: ~ 100 Байт

    ВРЕМЯ: реальное 0m0.025s user 0m0.007s sys 0m0.013s

  • 100 символов в строке: 100000 строк

    РАЗМЕР ФАЙЛА: ~ 10MB

    ВРЕМЯ: реальное 0m0.122s user 0m0.036s sys 0m0.080s

  • 100 символов на строку: 100000000 строк

    РАЗМЕР ФАЙЛА: ~ 10 ГБ

    ВРЕМЯ: реальное 9m37.108s пользовательское 2m22.011s sys 3m3.659s

[nit: Для тех, кому интересно, вот несколько тем Reddit Meme для того же: https://www.reddit.com/r/ProgrammerHumor/comments/grsreg/shuf_go_brrr/
https://www.reddit.com/r/ProgrammerHumor/comments/groe6y/78_billion_prayers/]

Редактировать # 1: Уточнение вопроса, чтобы было больше деталей. Добавление дополнительных ресурсов в соответствии с комментариями и выводами.

Редактировать # 2: Добавлена ​​производительность shuf в мою систему для текстовых файлов разных размеров

1 Ответ

1 голос
/ 28 мая 2020

Не все комментаторы сообщения, на которое вы ссылаетесь, согласны с характеристиками. В то время как один пользователь прокомментировал сверхбыструю обработку (78 Б - одна минута), другой сообщил о гораздо более медленных результатах (1000 строк из 500 миллионов строк за 13 минут).

Вы можете попробовать следующее: (замените NNN на свой любимый размер): seq 1 NNN> 1; time shuf 1> / dev / null

Я получаю: * Для N = 1 000 000 раз = 0,2 сек * для N = 10 000 000 раз = 3,5 сек c

Оба в соответствии с 500M строк за 13 минут.

Обратите внимание, что операция ограничена ЦП для 10M строк. Если размер файла превышает размер памяти, он будет работать медленнее.

Нижняя строка, наиболее вероятная ошибка измерения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...