Acabei de adicionar um recurso de pesquisa preditiva (veja o exemplo abaixo) ao meu site que roda em um servidor Ubuntu. Isso é executado diretamente de um banco de dados. Quero armazenar em cache o resultado de cada pesquisa e usá-lo, se existir, senão criá-lo.
Haveria algum problema comigo ao salvar os potenciais milhões de resultados de cira 10 milhões em arquivos separados em um diretório? Ou é aconselhável dividi-los em pastas?
Exemplo:
os.listdir
em python foi negada categoricamente por esse motivo.Respostas:
Sim. Provavelmente existem mais razões, mas posso postar em cima da minha cabeça:
tune2fs
possui uma opção chamadadir_index
que tende a ser ativada por padrão (no Ubuntu), que permite armazenar aproximadamente 100k arquivos em um diretório antes de ocorrer um desempenho. Isso não chega nem perto dos 10 milhões de arquivos que você está pensando.ext
Os sistemas de arquivos têm um número máximo fixo de inodes. Cada arquivo e diretório usa 1 inode. Usedf -i
para visualizar suas partições e inodes gratuitamente. Quando você fica sem inodes, não pode criar novos arquivos ou pastas.comandos como
rm
els
ao usar curingas expandem o comando e terminam com uma "lista de argumentos muito longa". Você precisará usarfind
para excluir ou listar arquivos. Efind
tende a ser lento.Sim. Definitivamente. Basicamente, você não pode armazenar arquivos de 10m em um diretório.
Eu usaria o banco de dados. Se você deseja armazená-lo em cache em um site, consulte " solr " ("fornecendo indexação distribuída, replicação e consulta com balanceamento de carga").
fonte
Acabou com o mesmo problema. Execute meus próprios benchmarks para descobrir se você pode colocar tudo na mesma pasta versus ter várias pastas. Parece que você pode e é mais rápido!
Ref: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
fonte
Uma pesquisa binária pode lidar facilmente com milhões de registros, portanto, pesquisar no diretório único não seria um problema. Isso será feito muito rápido.
Basicamente, se você estiver usando um sistema de 32 bits, a pesquisa binária de registros de até 2 GB é fácil e boa.
O Berekely DB, um software de código aberto, prontamente permite que você armazene o resultado completo em uma entrada e teria a pesquisa incorporada.
fonte