Como servir arquivos de 50m como se estivessem em um diretório?

2

Eu gerarei cerca de 50 milhões de arquivos HTML que gostaria de veicular. Cada arquivo tem um código único (por exemplo, thingy) e eu gostaria de exibi-los como se estivessem em um único diretório (por exemplo, example.com/thingy).

Eu suspeito que colocar 50 milhões de arquivos em um diretório é pedir aos deuses que me derrubem, então estou inclinado a fazê-lo com diretórios aninhados (por exemplo, coisa está em / t / h / i / thingy). Eu acho que eu poderia fazer isso com o Apache e mod_rewrite sem muita dor, mas eu estou querendo saber se existem outras opções que fazem mais sentido.

Se for importante, pretendo fazer isso no Linux.

    
por William Pietri 17.11.2010 / 01:10

3 respostas

5

Tem certeza de que todos (ou a maioria) dos arquivos de 50M serão solicitados? Se não, e se o seu domínio de problema permitir, você pode considerar uma abordagem de "computação lenta". Ou seja, apenas gere (e depois armazene em cache) os arquivos realmente solicitados.

Ainda assim, sim, você desejará usar uma estrutura de diretório aninhada (digamos 3+ níveis de profundidade), de modo que nenhum diretório receba mais do que alguns milhares de arquivos nela. Em seguida, use mod_rewrite para converter solicitações para os nomes de arquivos físicos reais, algo como o seguinte (mas provavelmente com mais verificações e lógica):

RewriteRule (\w)(\w)(\w)(\w+) /path/to/cache/$1/$2/$3/$1$2$3$4 [L]

Por fim, alguns sistemas de arquivos são melhores em lidar com arquivos grandes do que outros, então você pode querer fazer alguns testes e benchmarking com alguns candidatos (por exemplo, ext4, xfs, jfs, reiserfs) antes de começar a produção. / p>     

por 17.11.2010 / 01:54
3

Não, mod_rewrite é como você faria isso.

    
por 17.11.2010 / 01:12
1

Para esse tipo de coisa, eu usaria um banco de dados e serviria os arquivos do banco de dados. Você pode modelar a página para que você não tenha a página inteira no banco de dados.

Dependendo de como você está gerando as páginas, considere colocar a origem da página no banco de dados e gerar as páginas conforme necessário. Existem técnicas de cache que podem ser usadas para evitar a necessidade de gerar a página toda vez que for solicitado.

    
por 17.11.2010 / 02:04