Como dividir um arquivo em vários arquivos com vários segmentos?

1

Então, eu tenho arquivos de texto de 100GB e quero dividi-los em 10000 arquivos. Eu costumava fazer essas tarefas com algo como:

split -l <number of lines> -d --additional-suffix=.txt bigfile small_files_prefix

Mas eu tentei fazer isso com este e eu monitorei meu sistema e percebi que ele não estava usando muita memória ou CPU, então percebi que é só ler o arquivo do começo ao fim com um thread.

Existe alguma ferramenta de baixo nível (ou desempenho muito alto) que pode realizar essa tarefa com vários threads.

Eu até preferiria copiar o arquivo se necessário e aproveitar meus múltiplos núcleos se possivelmente mais rápido (acho que não!).

    
por yukashima huksay 10.01.2018 / 04:15

1 resposta

2

Mesmo com SSDs, o gargalo de dividir arquivos é E / S. Ter vários processos / threads para isso não ganhará desempenho e, geralmente, será muito mais lento.

Além disso, se você quiser dividir em novas linhas somente, não é claro com antecedência de onde para onde cada thread deve ser copiado. Você provavelmente teria que escrever uma ferramenta especial para isso.

A situação pode ser diferente se for necessária outra ação, como por exemplo divisão e compactação. Nesse caso, o uso de vários núcleos pode ajudar, mas a E / S não é o gargalo (dependendo da velocidade da unidade e da CPU).

    
por 10.01.2018 / 09:04