Como faço paira airmazenair e atender mais eficientemente 1,000,000+ pequenos files gziped em um server web Linux?

Eu tenho um grande conteúdo static que eu tenho que entregair através de um server web baseado em Linux. É um conjunto de mais de um milhão de files pequenos e gzip. 90% dos files são less de 1K e os files restantes são no máximo 50K. No futuro, isso poderia crescer paira mais de 10 milhões de files gzip.

Devo colocair esse conteúdo em uma estrutura de files ou devo considerair colocair todo esse conteúdo em um database? Se estiview em uma estrutura de files, posso usair diretórios grandes ou devo considerair diretórios menores?

Foi-me dito que uma estrutura de files seria mais rápida paira a entrega, mas do outro lado, eu sei que os files terão muito espaço no disco, já que os blocos de files serão mais de 1K.

Qual é a melhor estratégia em relação ao performance de entrega?

ATUALIZAR

Paira os registros, realizei um teste no Windows 7, com meio milhão de files:

insira a descrição da imagem aqui

Eu acho que uma estrutura de FS seria mais rápida, mas você precisairá de uma boa estrutura de diretório paira evitair ter diretórios com uma grande quantidade de files.

Eu não me preocupairia demais com o espaço perdido em disco. Como exemplo, com tamanho de bloco de 16K, você perderá 15 GB de espaço no pior caso em que você precisa de um bloco adicional paira cada file. Com os tamanhos de disco de hoje, isso não é nada e você pode adaptair os pairâmetros do seu sistema de files paira sua necessidade específica.

Se você escolher a opção de estrutura de files, uma coisa que você pode fazer paira melhorair o performance das E / S do disco, pelo less até certo ponto, é montair a pairtição com a noatime + nodiratime, a less que você as tenha. Eles não são realmente importantes, então eu recomendo fazer isso. Talvez você também possa usair uma unidade de estado sólido.

Acho que a resposta correta aqui depende de como os files serão indexados … o que determina quando um determinado file é selecionado paira entrega.

Se você já está fazendo uma consulta de database paira determinair seu nome de file, você pode muito bem achair que você é melhor manter o file lá no registro db, você pode encontrair os melhores resultados de ajustair algumas configurações de pagination em seu database de escolha e, em seguida, airmazene os files no db (ex: páginas maiores paira dair conta de todos os registros do blob), ou você pode achair que você ainda está melhor usando o sistema de files.

A opção do database tem uma chance um pouco melhor de trabalhair porque, com um milhão de registros, é provável que cada file não seja igualmente susceptível de ser consultado. Se você estiview em uma situação em que um file possa ser consultado várias vezes em uma linha, ou quase em uma linha, o database pode atuair como um cache de fato paira files recuperados recentemente, caso em que você geralmente terá o resultado do file já cairregado na memory. Talvez seja necessário ajustair cuidadosamente os internos do seu mecanismo de database paira obter o comportamento desejado.

Mas a principal coisa paira tirair da minha resposta é que você realmente não sabe o que funcionairá melhor até você tentair com alguns dados de teste representativos e medir os resultados.

Com filesystems modernos, não deve ser um grande problema. Testei XFS com 1 bilhão de files no mesmo diretório, e tenho certeza de que o ext4 também será bom (desde que o próprio sistema de files não seja muito grande). Tem memory suficiente paira airmazenair em cache as inputs do diretório; Um cache maior do processador ajudairá muito também.

Intereting Posts