Usar o GlusterFS para armazenar e acessar muitos e muitos arquivos pequenos é uma dificuldade que muitas implementações enfrentam, e parece que você já está em um bom caminho para resolver o problema: dividir os arquivos em diretórios separados.
Você poderia implementar uma solução como essa. Basta criar um monte de diretórios, escolher um limite para quantos arquivos podem ir em cada diretório e esperar que você não fique sem lugares para colocar arquivos. No seu exemplo, você está criando diretórios de 65k +, portanto, isso provavelmente não será um problema tão cedo.
Outra opção é criar diretórios com base na data em que um arquivo é criado. Por exemplo, se o arquivo cust_logo_xad.png
foi criado hoje, ele seria armazenado aqui:
/gluster/files/2015/08/24/cust_logo_xad.png
Se você hospeda dados para diferentes entidades (clientes, departamentos, etc.), é possível separar arquivos com base na propriedade, atribuindo à entidade uma ID exclusiva de algum tipo. Por exemplo:
/gluster/files/ry/ry7eg4k/cust_logo_xad.png
Além disso, seria uma boa ideia dar uma olhada na documentação do GlusterFS para ajustar o cluster de armazenamento para hospedagem de arquivos pequenos. No mínimo, certifique-se de que:
- Os sistemas de arquivos nos servidores de armazenamento GlusterFS possuem inodes gratuitos suficientes disponíveis (
mkfs
option) - As unidades nos servidores de armazenamento GlusterFS podem manipular muitos IOPs.
- Você usa um sistema de arquivos apropriado para a tarefa (ext4 ou xfs)
- Seu aplicativo / equipe não tenta varrer diretórios com muitos arquivos pequenos com frequência.
Se você puder (e se ainda não o fez), é uma boa idéia criar um banco de dados que funcione como um índice para os arquivos, em vez de ter que verificar (por exemplo, ls
) ou pesquisar (por exemplo, find
) para arquivos o tempo todo.