Pergunta

Eu estou no processo de implementação de cache para o meu projeto. Depois de olhar para as estruturas de diretórios de cache, já vi muitos exemplos como:

cache
cache/a
cache/a/a/
cache/a/...
cache/a/z
cache/...
cache/z
...

Você começa a idéia. Outro exemplo para armazenar arquivos, digamos que o nosso arquivo é chamado IMG_PARTY.JPG, uma maneira comum é colocá-lo em um diretório chamado:

files/i/m/IMG_PARTY.JPG

Alguns pensamentos vêm à mente, mas eu gostaria de saber as verdadeiras razões para isso.

  • Filesystems fazendo pesquisas lineares encontrar arquivos mais rápido quando há menos deles em um diretório. Estes diferenciais estrutura arquivos fina.

  • Para não atrapalhar utilitários * nix como rm, que levam um número finito de argumentos e exclusão de grande número de arquivos ao mesmo tempo tende a ser hacky (ter que passá-lo embora find etc.)

O que é a verdadeira razão? O que é um "bom" estrutura de diretório de cache e por quê?

Foi útil?

Solução

Toda vez que eu fiz isso, tem sido para evitar pesquisas lineares lentas em sistemas de arquivos. Felizmente, pelo menos no Linux, isso está se tornando uma coisa do passado.

No entanto, ainda hoje, com os diretórios baseados b-tree, um grande diretório vai ser difícil de tratar, uma vez que vai demorar uma eternidade e um dia apenas para obter uma listagem de todos os arquivos, não importa encontrar o arquivo certo .

Outras dicas

Apenas datas uso. Desde que você irá remover por data. :)

Se você fizer ls -l, todos os arquivos precisam ser stat()ed para obter detalhes, o que aumenta consideravelmente o tempo listando -. Isso acontece se os usos FS hash ou estruturas lineares

Assim, mesmo se os FS tem uma capacidade de lidar com incrivelmente grandes tamanhos de diretório, há boas razões para não ter estruturas planas grandes (Eles são também um porco para fazer backup)

Eu aferido GFS2 (cluster) com 32.000 arquivos em um diretório ou dispostos em uma estrutura de árvore - listas recursivas eram cerca de 300 vezes mais rápido do que obter um listando quando eles estavam todos em uma estrutura plana (pode levar até 10 minutos para obter uma listagem de diretório)

EXT4 mostrou índices semelhantes, mas como o ponto final foi apenas um par de segundos a maioria das pessoas não iria notar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top