Máximo de arquivos por diretório em S3


87

Se eu tivesse um milhão de imagens, seria melhor armazená-las em alguma hierarquia de pasta / subpasta ou simplesmente despejá-las em um balde (sem pastas)?

Despejar todas as imagens em um depósito sem hierarquia retardaria as operações LIST?

Existe uma sobrecarga significativa na criação de pastas e subpastas dinamicamente e na configuração de suas ACLs (falando de maneira programática)?

Respostas:


123

S3 não respeita namespaces hierárquicos. Cada depósito contém simplesmente uma série de mapeamentos de chave para objeto (junto com metadados associados, ACLs e assim por diante).

Mesmo que a chave do seu objeto possa conter uma '/', o S3 trata o caminho como uma string simples e coloca todos os objetos em um namespace simples.

Na minha experiência, as operações LIST demoram (linearmente) mais à medida que a contagem de objetos aumenta, mas isso é provavelmente um sintoma do aumento de I / O necessário nos servidores Amazon e na conexão com o cliente.

No entanto, os tempos de pesquisa não parecem aumentar com a contagem de objetos - é mais provavelmente algum tipo de implementação de hashtable O (1) em sua extremidade - então, ter muitos objetos no mesmo intervalo deve ter o mesmo desempenho que pequenos intervalos para uso normal (ou seja, não LISTs).

Quanto à ACL, as concessões podem ser definidas no intervalo e em cada objeto individual. Como não há hierarquia, são suas duas únicas opções. Obviamente, definir tantas concessões para todo o intervalo reduzirá enormemente as dores de cabeça do administrador se você tiver milhões de arquivos, mas lembre-se de que você só pode conceder permissões, não revogá-las; portanto, as concessões para todo o intervalo devem ser o subconjunto máximo da ACL para todos seu conteúdo.

Eu recomendo dividir em intervalos separados para:

  • conteúdo totalmente diferente - ter baldes separados para imagens, som e outros dados torna a arquitetura mais sã
  • ACLs significativamente diferentes - se você puder ter um bloco com cada objeto recebendo uma ACL específica, ou dois blocos com ACLs diferentes e nenhuma ACL específica de objeto, use os dois blocos.

no S3 existem baldes e dentro de você pode ter 'pastas' e 'objetos' onde uma pasta é provavelmente um objeto aos olhos do sistema
mwm

14
@mwm você está enganado. As "pastas" são estritamente sutilezas da IU fornecidas por qualquer ferramenta que você esteja usando. James está correto ao dizer que as chaves podem ter barras, mas o s3 não se importa - ele definitivamente não pensa nelas como pastas.
Ry4an Brase

O S3 definitivamente limita a taxa de solicitações com base no prefixo do caminho, veja os documentos oficiais: docs.aws.amazon.com/AmazonS3/latest/dev/…
Anatoly

Prefixos S3 não são mais necessários ou recomendados: aws.amazon.com/about-aws/whats-new/2018/07/…
Aea


-3

Eu uso uma estrutura de diretório com uma raiz e pelo menos um subdiretório. Costumo usar "data de importação do documento" como o diretório sob a raiz. Isso pode tornar o gerenciamento de backups um pouco mais fácil. Qualquer que seja o sistema de arquivos que você esteja usando, certamente atingirá um limite de contagem de arquivos (um limite prático, se não físico). Você pode pensar em suportar raízes múltiplas também.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.