Organizar objetos usando prefixos
Você pode usar prefixos para organizar os dados armazenados nos buckets do Amazon S3. Um prefixo é uma string no início do nome da chave do objeto. Um prefixo pode ter qualquer comprimento, sujeito ao comprimento máximo do nome da chave do objeto (1.024 bytes). Você pode pensar nos prefixos como uma forma de organizar seus dados de forma semelhante aos diretórios. No entanto, os prefixos não são diretórios.
Pesquisar por prefixo limita os resultados a somente essas chaves que começam com o prefixo especificado. O delimitador faz com que uma operação de lista acumule todas as chaves que compartilham um prefixo comum em um único resultado da lista de resumo.
A finalidade dos parâmetros de prefixo e delimitador é ajudá-lo a organizar e navegar, hierarquicamente, por suas chaves. Para fazer isso, escolha primeiro um delimitador para seu bucket, tal como barra (/), que você não prevê que apareça em nomes de chave. Você pode usar outro caractere como um delimitador. Não há nada de especial no caractere barra (/), mas esse um delimitador de prefixo muito comum. Em seguida, crie seus nomes de chave concatenando todos os níveis de contenção de hierarquia, separando cada nível com o delimitador.
Por exemplo, se você estava armazenando informações sobre cidades, pode, naturalmente, organizá-las por continente, país, província ou estado. Como esses nomes geralmente não usam pontuação, você pode usar a barra (/) como delimitador. Os seguintes exemplos usam uma barra (/) como delimitador.
-
Europa/França/Nova Aquitânia/Bordeaux
-
América do Norte/Canadá/Quebec/Montreal
-
América do Norte /EUA/Washington/Bellevue
-
América do Norte /EUA/Washington/Seattle
Se você armazenou dados de cada cidade do mundo desta forma, ficaria estranho gerenciar um namespace plano de chave. Usando Prefix
e Delimiter
com a operação de lista, você pode usar a hierarquia que criou para listar os dados. Por exemplo, para listar todos os estados nos EUA, defina Delimiter='/'
e Prefix='North America/USA/'
. Para listar todas as províncias no Canadá para as quais você tem dados, defina Delimiter='/'
e Prefix='North
America/Canada/'
.
Para obter mais informações sobre delimitadores, prefixos e pastas aninhadas, consulte Diferença entre prefixos e pastas aninhadas
Listar objetos usando prefixos e delimitadores
Se emitir uma solicitação de lista com um delimitador, você poderá pesquisar a hierarquia apenas em um nível, pulando e resumindo as chaves aninhadas (possivelmente milhões) em níveis mais profundos. Por exemplo, suponha que você tenha um bucket (amzn-s3-demo-bucket
) com as seguintes chaves:
sample.jpg
photos/2006/January/sample.jpg
photos/2006/February/sample2.jpg
photos/2006/February/sample3.jpg
photos/2006/February/sample4.jpg
O bucket de exemplo tem somente sample.jpg
o objeto no nível raiz. Para listar somente os objetos no nível raiz no bucket, você envia uma solicitação GET no bucket com o caractere delimitador barra (/
). Em resposta, o Simple Storage Service (Amazon S3) retorna a chave do objeto sample.jpg
porque não contém o caractere delimitador /
. Todas as outras chaves contêm o caractere delimitador. O Simple Storage Service (Amazon S3) agrupa essas chaves e retorna um único elemento CommonPrefixes
com valor de prefixo photos/
, que é uma substring que vai do início dessas chaves até a primeira ocorrência do delimitador especificado.
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>
amzn-s3-demo-bucket
</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <Delimiter>/</Delimiter> <IsTruncated>false</IsTruncated> <Contents> <Key>sample.jpg</Key> <LastModified>2011-07-24T19:39:30.000Z</LastModified> <ETag>"d1a7fb5eab1c16cb4f7cf341cf188c3d"</ETag> <Size>6</Size> <Owner> <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID> <DisplayName>displayname</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <CommonPrefixes> <Prefix>photos/</Prefix> </CommonPrefixes> </ListBucketResult>
Para obter mais informações sobre como listar chaves de objeto programaticamente, consulte Listar chaves de objeto programaticamente.