Desempenho associado ao armazenamento de milhões de arquivos no NTFS

3

Alguém tem um método / fórmula, etc, que eu poderia usar - esperançosamente baseado em números atuais e projetados de arquivos - para projetar a duração 'direita' da divisão e o número de pastas aninhadas?

Por favor, note que, embora semelhante, não é exatamente o mesmo que Armazenando um milhões de imagens no sistema de arquivos . Estou procurando uma maneira de ajudar a tornar as teorias descritas mais genéricas.

Suposições

  • Eu tenho 'alguns' números iniciais de arquivos. Esse número seria arbitrário, mas grande. Diga 500k a 10m +.
  • Considerei os requisitos de IO do disco de hardware físico subjacente que seriam necessários para dar suporte a esse esforço.

Dito de outra forma

Conforme o tempo avança, essa loja crescerá. Eu quero ter o melhor equilíbrio entre o desempenho atual e as minhas necessidades aumentarem. Digamos que eu duplique ou triplique meu armazenamento. Eu preciso ser capaz de abordar as necessidades atuais e o crescimento futuro projetado. Preciso planejar com antecedência e não sacrificar muito o desempenho atual.

O que eu tenho com

Eu já estou pensando em usar um hash para dividir cada um dos muitos caracteres para dividir as coisas em vários diretórios e manter as árvores uniformes, muito semelhantes, conforme descrito nos comentários da pergunta acima. Também evita arquivos duplicados, o que seria crítico ao longo do tempo.

Tenho certeza de que a estrutura de pastas inicial seria diferente com base no que descrevi e dependendo da escala inicial. Tanto quanto eu posso descobrir, não há uma solução única para todas as soluções aqui. Seria horrendamente tempo intensivo trabalhar algo experimentalmente.

    
por Tim Brigham 20.08.2014 / 22:13

2 respostas

2

Há alguns anos, comecei a escrever um sistema de armazenamento semelhante ao ceph. Então eu descobri ceph e o que eles tinham trabalhado melhor, então eu joguei meu desenvolvimento.

Durante o processo de desenvolvimento, eu perguntei a uma pergunta semelhante à sua mas em SA Eu fiz muitos cálculos ao lidar com muitos arquivos pequenos e descobri que nomear arquivos (assumindo que eles podem ser qualquer coisa) por uuid e dividi-los em 3 níveis de profundidade era suficiente para minhas necessidades.

Da memória, usei as 3 primeiras letras para formar o nível superior, depois as 3 seguintes para formar o nível 2 e, em seguida, usei o uuid completo para o nome do arquivo.

Meu cálculo foi baseado no número de arquivos que eu queria e na quantidade de dados por unidade armazenada e quais eram os limites para o tipo de sistema de arquivos.

Para um UUID, se você usar a versão hexadecimal, obterá A-Z, a-z, 0-9, 26 + 26 + 9 ou 61. Para 3 níveis de profundidade, isso é 61 * 61 * 61 = 226,981. Eu imaginei 226k combinações de diretório é amplo. Para o XFS, tudo bem. Mas para NTFS não tenho certeza. Então é melhor você descobrir quais são os limites reais. Apenas listar esses diretórios abrindo o explorador pode fazer com que seu servidor seja um pouco difícil. Então você pode querer criar um esquema que não tenha tantas pastas no nível superior. Talvez usando uma única letra e vá a 4 níveis de profundidade ou algo assim.

    
por 20.08.2014 / 22:50
1

Você não fornece a versão do Windows que você usará. Eu realmente recomendo usar o 2012 R2 para obter todos os novos recursos do NTFS, como reparo a quente.

Seus 3 pesadelos serão:

  • Fragmentação
  • Tempo gasto para fazer um chkdsk . A hora é baseada no número de arquivos, não no tamanho.
  • Tempo de backup

Se você estiver pelo menos no Windows 2012, deve consultar o ReFS. Este novo sistema de arquivos tem o que você deseja: link

Problema de ReFS que você pode ter: gerenciamento de segurança e software de backup.

Se você mantiver o NTFS, eu dividiria os dados em várias unidades NTFS (usando o ponto de montagem) e usaria o DFS para acessá-los (e assim vincular uma pasta raiz a uma unidade diferente e depois a um servidor diferente para se espalhar).

Você deve procurar por um software de desfragmentação, como o o & o, que vai muito além do que o do Windows. Inicie a desfragmentação desde o início e com a maior frequência possível.

Você precisará de muita memória RAM para armazenar os arquivos em cache (se acessar mais de uma vez em quando).

    
por 20.08.2014 / 23:25