Pergunta

Eu estou olhando para construir um servidor com lotes de arquivos pequenos entregues por uma API XML. Ele não vai estar fazendo um monte de iteração sobre diretórios ou blocos de arquivos sequenciais -. Nós estamos falando lotes e lotes de busca para dados descontínuos

Será tempo de busca on BSD UFS degradar ao longo do tempo para os pedidos de arquivos individuais? Eu entendo que limite inode do sistema de arquivos é baseado no tamanho da partição / slice, mas o disco rígido tem que passo através da tabela de inode para cada solicitação de arquivo antes que ele possa descobrir a localização dos dados. O sistema de arquivos produz o melhor desempenho para o tempo de busca?

A alternativa é a configuração de arquivos 2-4GB "blob" e têm um sistema separado de buscar um arquivo contido neles a partir do software. "Tabela de inode" do software poderia ser otimizado para entrega com base no usuário conectado no momento, etc ... Essas "mesas de inode" provavelmente seria em cache na RAM e que apenas se relacionam com os usuários conectados no momento de modo que há menos desperdício de recursos .

Onde é que estas duas soluções taxa de um escalabilidade e manutenção ponto de vista? Que tipo de ganhos de desempenho, se houver, eu poderia esperar usando a segunda solução?

Foi útil?

Solução

A técnica de mitigação mais óbvio e comprovado em tempo é usar um bom design hierárquico para os diretórios (e estratégias de busca caminho), e ter mais diretórios com menos arquivos em cada um.

Outras dicas

Para versões do FreeBSD recentes com dirhash e softupdates que tenho visto sem problemas com alguns dez mil arquivos por diretório. Você provavelmente não quer ir para o norte de 500.000 arquivos ou assim. Por exemplo. exclusão de um diretório com 2.500.000 arquivos Levei três dias.

Eu não tenho certeza eu entendo você pergunta corretamente, mas se você quiser buscar mais lotes de arquivos, por que não usar uma tabela mysql partioned colocado para fora em um RAID0 ou VFS sistema de arquivos?

Edit: tanto quanto eu sei, os lotes de arquivos em uma pasta irá degradar qualquer velocidade FS, pois tem de manter maiores listas de arquivos, permissões e nomes, um banco de dados é projetado para manter listas de dados na memória e procurar de uma forma muito otimizado através dela.

Mais detalhes da sua situação seria útil, são os arquivos existentes ou seriam criadas pelo seu aplicativo? Se você precisar de uma maneira de armazenar dados arbitrários com a estrutura de um banco de dados relacional você olhou banco de dados orientado a objetos

Outra opção, se os objetos devem ou podem ser acessados ??via HTTP, é usar um verniz cache na frente de um pequeno servidor web. Inicialmente objetos seriam armazenados no disco, mas verniz seria armazenar e servir objetos da memória após o primeiro acesso a um determinado objeto.

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