A razão pela qual se criaria este tipo de estrutura de diretórios é que os sistemas de arquivos devem localizar um arquivo dentro de um diretório, e quanto maior o diretório, mais lenta é a operação.
Quanto mais lento depende do design do sistema de arquivos.
O sistema de arquivos ext4 usa um B-tree para armazenar entradas de diretório. Espera-se que uma pesquisa nesta tabela leve o tempo O (log n) , que na maioria das vezes é menor que a ingênua tabela linear usada pelos sistemas de arquivos ext3 e anteriores (e quando não é, diretório é muito pequeno para que realmente importe).
O sistema de arquivos XFS usa uma árvore B + em vez disso. A vantagem disso sobre uma tabela de hash ou árvore B é que qualquer nó pode ter vários filhos b , onde em XFS b varia e pode ser tão alto quanto 254 (ou 19 para o nó raiz e esses números podem estar desatualizados). Isso lhe dá uma complexidade de tempo de O (log b n) , uma grande melhoria.
Qualquer um desses sistemas de arquivos pode lidar com dezenas de milhares de arquivos em um único diretório, com o XFS sendo significativamente mais rápido que o ext4 em um diretório com o mesmo número de inodes. Mas você provavelmente não quer um único diretório com 3M inodes, pois mesmo com uma árvore B +, a pesquisa pode levar algum tempo. Isso é o que levou à criação de diretórios dessa maneira em primeiro lugar.
Quanto às estruturas propostas, a primeira opção que você deu é exatamente o que é mostrado nos exemplos do nginx. Ele funcionará bem em qualquer sistema de arquivos, embora o XFS ainda tenha uma vantagem. A segunda opção pode ser um pouco melhor ou um pouco pior, mas provavelmente será bem próxima, mesmo em benchmarks.