50.000 arquivo em um diretório, qual é a minha melhor opção?

2

Eu sou forçado a ter essa estrutura de diretórios / var / www / $ WEBSITE / $ DIR1 / $ DIR2 / $ FILES

para cada um desses $ FILES, há aproximadamente 50.000 páginas XHTML.

Estou executando o Cherokee, que possui novo suporte ao armazenamento em cache de front-end. Mas eu sou um pouco limitado à memória, então não posso armazenar tudo em cache. Acredito que posso armazenar em cache apenas a listagem, que é a pior parte.

O que posso fazer no lado do sistema de arquivos? Eu normalmente uso ext4 (meu servidor está usando ext3), mas eu sei ReiserFS é o preferido para este tipo de situação. Eu poderia apenas montar esse $ WEBSITE no ReiserFS. Eu realmente não estou ansioso para reparticionar as coisas, e gostaria de contornar isso.

Posso fazer subdiretórios escalonados em algum lugar no sistema de arquivos e ligá-los todos a $ DIR2? Isso ajudaria a tornar esta situação desagradável melhor, com menos dor do ext3?

Eu realmente não quero nada RDB, eu consideraria uma opção NOSQL Se eu pudesse de alguma forma criar um sistema de arquivos falso a partir dele. essa seria uma opção tão legal, só não tenho certeza se ela existe. Possivelmente algo relacionado a FUSE existe?

o site inteiro já existe, e basicamente é apenas uma listagem de diretório sofisticada. Os arquivos são escritos uma vez e depois são lidos de lá em diante. Não há chance de o número de arquivos por diretório aumentar a partir desse ponto.

    
por J. M. Becker 21.09.2011 / 17:46

4 respostas

1

Eu encontrei uma solução para o meu problema

O desempenho do meu FS estava me deixando desconfortável em meros 5 mil arquivos, motivo pelo qual postei essa pergunta. Eu normalmente usaria o Ext4 e usaria o XFS; que sempre foi um performer sólido; mas eu já tinha tudo instalado no Ext3.

O Ext4 possui índices Htree habilitados por padrão, o que tornaria isso um problema. Ext3 tem suporte para índices da Htree, dir_index; no entanto, não foi ativado no meu FS.

# I Checked Ext features, no dir_index
$ tune2fs -l /dev/xvda | grep features

# Enabled dir_index
$ tune2fs -O dir_index /dev/xvda

Eu tive que fsck depois que eu reiniciei, mas caso contrário, ele foi ativado com sucesso. Quando listei os arquivos nesses diretórios, os problemas de desempenho desapareceram. Eu poderia evitar a implementação de um VFS baseado no NoSQL, gridfs-fuse; e eu poderia evitar um redimensionamento / repartição no meu HD totalmente alocado.

Quanto a mudar meu FS, eu queria evitar esse tipo de operação de disco, se possível.

    
por 22.09.2011 / 18:30
2

50.000 arquivos não devem ser suficientes para causar um problema significativo de velocidade no Linux. Você mencionou o armazenamento em cache da listagem, então estou pensando que você está fazendo algum tipo de processamento nos arquivos em vez de simples. Eu procuraria por problemas em como você processa os arquivos.

    
por 21.09.2011 / 18:02
2

Eu recomendo o XFS com uma possível exceção: se você precisar remover muitos arquivos dessa árvore de diretórios, o desempenho da exclusão não será estelar no XFS. Isso foi melhorado um pouco com o novo parâmetro de montagem delaylog , no entanto.

Além disso, o XFS nem sequer tosse com 50.000 arquivos em um diretório.

    
por 21.09.2011 / 18:33
1

Você pode experimentar o XFS. Eu tenho grandes diretórios em execução no sistema de arquivos XFS com bons resultados. ls , du e outras operações de arquivo são visivelmente melhores que no ext3. De qualquer maneira, para escalabilidade, pode fazer sentido desenvolver uma estrutura de diretórios mais limpa.

[root@bootylicious /data/print]# ls -1 | wc -l
431801
    
por 21.09.2011 / 18:03