Pergunta

Estamos criando um site ASP.NET MVC que precisará armazenar 1 milhão de fotos, em torno de 2K-5k de tamanho. Do ReSSearch anterior, parece que um servidor de arquivos é provavelmente melhor que um db (fique à vontade para comentar o contrário).

Existe algo de especial a considerar ao armazenar tantos arquivos? Há algum problema com o Windows pode encontrar a foto rapidamente se houver tantos arquivos em uma pasta? Uma estrutura de diretório segmentada precisa ser criada, por exemplo, dividindo -os pelo nome do arquivo? Seria bom se a solução escalar para pelo menos 10 milhões de fotos para possíveis necessidades futuras de expansão.

Foi útil?

Solução

4KB é o tamanho do cluster padrão para NTFs. Você pode ajustar essas configurações, dependendo do tamanho usual da imagem.http://support.microsoft.com/kb/314878

Eu construiria uma árvore com subdiretas para poder passar de um FS para outro: Quantos arquivos posso colocar em um diretório?E evite alguns problemas: http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

Você também pode ter arquivos contendo imagens associadas para carregá -las com apenas um arquivo aberto. Esses arquivos podem ser compactados é que o gargalo é I/S, não compactado se for a CPU.

Um db é mais fácil de manter, mas mais lento ... então depende de você!

Outras dicas

Veja também Esta questão de falha do servidor Para alguma discussão sobre estruturas de diretório.

O problema não é que o sistema de arquivos não consiga armazenar tantos arquivos em um diretório, mas que se você quiser acessar esse diretório usando o Windows Explorer, ele levará uma eternidade; portanto, se você precisar acessar manualmente nessa pasta, deve segmentar segmentar Por exemplo, com um diretório de cada 2-3 primeiras letras/números do nome ou mesmo uma estrutura mais profunda.

Se você puder dividir isso em pastas 1K com arquivos 1K, cada um será mais do que suficiente e o código para fazer isso é bastante simples.

Assumindo o NTFS, há um limite de 4 bilhões de arquivos por volume (2^32 - 1). Esse é o limite total para todas as pastas no volume (incluindo arquivos de sistema operacional etc.)

Um grande número de arquivos em uma única pasta não deve ser um problema; O NTFS usa uma árvore B+ para recuperação rápida. A Microsoft recomenda que você desative a geração de nomes de arquivos curtos (o recurso que permite recuperar o mypictureofyou.html como mypic ~ 1.htm).

Não sei se há alguma vantagem de desempenho em segmentá -los em vários diretórios; Meu palpite é que não haveria uma vantagem, porque o NTFS foi projetado para desempenho com grandes diretórios.

Se você decidir segmentá -los em vários diretórios, use uma função de hash no nome do arquivo para obter o nome do diretório (em vez do nome do diretório sendo a primeira letra do nome do arquivo, por exemplo), para que cada subdiretório tenha aproximadamente o mesmo número de arquivos.

Eu não descartaria o uso de uma rede de entrega de conteúdo. Eles foram projetados para esse problema. Eu tive muito sucesso com a Amazon S3. Como você está usando uma solução baseada na Microsoft, talvez o Azure possa ser um bom ajuste.

Existe algum tipo de requisito que impeça que você use uma solução de terceiros?

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