Pergunta

Eu queria saber quanto aos aspectos práticos de armazenar um na estrutura da árvore memória como árvore de diretórios para fins de persistência. No meu caso ele direcionar sistema de arquivos será ZFS, e uma vez que a estrutura foi criado, ele será acessado por vários processos raramente.

Como performance está usando uma árvore de diretórios como um mecanismo de persistência de dados árvores?

Foi útil?

Solução

Para ler e escrever sua árvore, você estará chamando o sistema de arquivos várias vezes por nó. Isso é muito mais caro do que qualquer código sane você poderia conceber a andar uma imagem de memória.

Se se trata de uma abordagem sensata depende do que o seu padrão de uso é esperado para estar. Se em uma invocação típica do seu código que você espera de ler em toda a estrutura de árvore, trabalhar sobre ela, em seguida, escrevê-lo na íntegra - você é melhor para mobilizar-lo em um único arquivo. Se, no entanto, você espera para ler / trabalho on / mutação apenas alguns nós, sem lendo na maior parte da árvore, a diferença de desempenho entre andar a estrutura de diretórios e fazer diversas buscas / lê a travessia uma árvore armazenada em um único arquivo será muito menor, e pode muito bem tornar-se vale a pena fazer a primeira para a simplicidade / clareza / evitando rodas reinventando. Além disso, se vários processos estão fazendo isso ao mesmo tempo, nós bloqueio e subárvores torna-se muito mais fácil com a abordagem baseada em diretório.

Esteja ciente de que, para alguns sistemas de arquivos mais usados ??o tempo para abrir uma entrada de diretório depende do número total de entradas no diretório.

EDIT: Eu tenho feito coisas semelhantes com ext3 para um site CGI backend; não reinventar a roda prototipagem rápida e manutenção mais simples, lê / escreve / BLOQUEIO escalado muito bem, e mudanças muito frequentes - na ordem das centenas por segundo - para a estrutura de diretório em si trabalhou mal em armazenamento real ; no final eu reestruturado coisas de modo que as seções da árvore de diretórios para que muito frequentemente ser adicionadas entradas de diretório / removidas acabaram em um volume tmpfs - para mim este conjunto de estado poderia (cara) ser reconstruído a partir de que armazenados no armazenamento menos volátil após uma reinicialização. Eu tenho pouca experiência com o ZFS, e não sei o seu padrão de uso pretendido, por isso não sei se isso seria um problema para você. Se eu agora fazer isso por um site muito muito utilizada, eu provavelmente iria rolar minha própria biblioteca de bloqueio chamado em seu lugar.

Outras dicas

A maioria dos sistemas de arquivos são otimizados para o acesso a um arquivo aberto, para abrir / fechar um arquivo leva um tempo significativo. Se cada folha da sua árvore é pequena, leitura / escrita toda a estrutura levaria muitas vezes mais tempo do que o necessário.

Além disso, a maioria dos sistemas de arquivos têm um bloco de alocação mínima, geralmente em torno de 2-8KB. se suas folhas são muito menores do que isso, você estará desperdiçando uma grande quantidade de espaço.

Em suma, menor suas folhas, pior a idéia.

Se eu entendi corretamente você está falando sobre a construção de uma estrutura de árvore que daria uma representação na código do seu sistema de arquivos, então eu suspeito que você vai incorrer em sobrecarga no início onde você está lendo em sua estrutura de árvore, mas pesquisas posteriores e traversals da árvore provavelmente seria mais rápido do que bater de armazenamento em disco de cada vez.

Possíveis problemas:

  • Pode fazer uso ineficiente de espaço em disco (em muitos sistemas de arquivos de um diretório é um arquivo e, como tal, ocupa um quarteirão inteiro no disco ...)
  • Será lenta a leitura / escrita, porque você faz muitos sistema de arquivos acessos
  • O sistema de arquivos pode / vai impor limites à duração de cada nome e / ou caracteres item que você pode usar para nomes
  • Será fácil para outros processos para corromper seus dados e / ou exigir custo bloqueio considerável
  • Ao usar solid-state `` disks '' isso pode resultar em mais gravações do que outros métodos e encurtar a vida útil da mídia

A linha inferior:. Não pode valer a pena

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