Skip to content
This repository has been archived by the owner on Sep 19, 2018. It is now read-only.

Indexação de Arquivos via DB #31

Open
ericktedeschi opened this issue Sep 25, 2013 · 3 comments
Open

Indexação de Arquivos via DB #31

ericktedeschi opened this issue Sep 25, 2013 · 3 comments

Comments

@ericktedeschi
Copy link

Srs do Conselho,
estou abrindo essa thread para discutir sobre a meneira como está sendo feita a indexação dos arquivos.
Abaixo relaciono alguns itens:

  • Atualmente a indexação está sendo feita por meio de iteração do diretório configurado para Upload. O problema é que, quando a quantidade de arquivos for muito grande vai começar a baleiar para listar os arquivos.
  • Quando o diretório ultrapassar o número de 65535 arquivos, irá estourar a quantidade de inodes.
  • Não é possível fazer controle de acesso (visando futuro)

Sugestão.

  • Todo arquivo deve ser apenas um "hash" dentro do diretório de upload. E o metadado dele guardado em um banco, para posteriormente devolvermos para quem baixar com o nome correto
  • Podemos utilizar um MongoDB por exemplo para guardar os metadados de cada arquivo
  • guardando os arquivos como hash, será possível dois usuários fazerem uploads de arquivos do mesmo nome... E ainda, caso existam arquivos identicos, podemos apenas manter a referência (otimização de espaço).

Como trata-se de uma issue de arquitetura, não sei se consegui endereçar a preocupação corretamente aqui. Talvez fosse mais adequado uma lista, mas acho que ainda não temos! hehe ou passei despercebido.

abz

@ericktedeschi
Copy link
Author

Esqueci de comentar.
Quando ao problema dos inodes... podemos utilizar uma estrutura de diretório PARA hash (assim como sistemas de cache fazem):
http://michaelandrews.typepad.com/the_technical_times/2009/10/creating-a-hashed-directory-structure.html

@hussani
Copy link
Member

hussani commented Sep 25, 2013

@ericktedeschi cara, muito bem pontuado.
Iterar diretamente no filesystem é prático mas tem diversas limitações.
Gostei da sugestão do hash, não tinha pensado nisso.
Sobre utilizar MongoDB, não sei se conseguiremos, ainda não temos os detalhes técnicos sobre o ambiente, mas de qualquer forma rolaria tranquilo num MySQL não é?

Marquei como issue técnica e épica, não é uma "funcionalidade" para o usuário e terá que ser quebrada para ser aplicada. Em algum momento teríamos que mudar a estrutura para uma que suportasse permissões de arquivo, então achei muito válido os problemas e as soluções sugeridas.

Valeu!

@danizord
Copy link

👍👍

Além disso, guardar os meta-dados no DB vai reduzir drasticamente a necessidade de ler o filesystem = Performance!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants