Colocando muitos (10 milhões) arquivos em uma pasta

14

Acabei de adicionar um recurso de pesquisa preditiva (veja o exemplo abaixo) ao meu site que é executado em um servidor Ubuntu. Isso é executado diretamente de um banco de dados. Eu quero armazenar em cache o resultado para cada pesquisa e usar que, se existir, crie-o.

Haveria algum problema comigo salvando o potencial de 10 milhões de resultados em arquivos separados em um diretório? Ou é aconselhável dividi-los em pastas?

Exemplo:

    
por Kohjah Breese 11.02.2015 / 18:04

2 respostas

24
  

Haveria algum problema comigo salvando o potencial de cerca de 10 milhões de resultados em arquivos separados em um diretório?

Sim. Provavelmente há mais razões, mas estas posso postar no topo da minha cabeça:

  • tune2fs tem uma opção chamada dir_index que tende a ser ativada por padrão (no Ubuntu) que permite armazenar aproximadamente 100k arquivos em um diretório antes de você ver um desempenho atingido. Isso não é nem perto dos arquivos de 10m que você está pensando.

  • ext filesystems tem um número máximo fixo de inodes. Todo arquivo e diretório usa 1 inode. Use df -i para ver suas partições e inodes gratuitamente. Quando você ficar sem inodes, não poderá criar novos arquivos ou pastas.

  • Os comandos
  • como rm e ls ao usar curingas expandem o comando e terminam com uma "lista de argumentos longa demais". Você terá que usar find para excluir ou listar arquivos. E find tende a ser lento.

  

Ou é aconselhável dividi-los em pastas?

Sim. Definitivamente. Basicamente, você não pode nem armazenar arquivos de 10m em um diretório.

Eu usaria o banco de dados. Se você quiser armazenar em cache para um site, dê uma olhada em " solr " ("fornecendo indexação distribuída, replicação e balanceamento de carga consultando ").

    
por Rinzwind 11.02.2015 / 20:32
0

Uma pesquisa binária pode manipular facilmente milhões de registros, portanto, pesquisar o diretório único não seria um problema. Vai fazer isso muito rápido.

Basicamente, se você estiver usando um sistema de 32 bits, a busca binária de até 2Gb é fácil e boa.

O Berekely DB, um software de código aberto, permitiria que você armazenasse o resultado completo em uma entrada e tivesse a pesquisa incorporada.

    
por Ashok Chand Mathur 18.02.2015 / 02:57