Questa pagina descrive gli oggetti, una risorsa in Cloud Storage. Per una panoramica generale del funzionamento di Cloud Storage, consulta la panoramica del prodotto Cloud Storage.
Oggetti
Gli oggetti sono i singoli elementi di dati che archivi in Cloud Storage. Non esiste un limite al numero di oggetti che puoi creare in un bucket.
Gli oggetti sono composti da due componenti: dati oggetto e metadati oggetto. I dati dell'oggetto sono in genere un file che vuoi archiviare in Cloud Storage ed è completamente opaco per Cloud Storage. I metadati dell'oggetto sono una raccolta di coppie nome-valore che descrivono varie qualità dell'oggetto.
Due importanti elementi dei metadati degli oggetti comuni a tutti gli oggetti sono il nome dell'oggetto e il suo numero di generazione. Quando aggiungi un oggetto a un bucket Cloud Storage, specifichi il nome dell'oggetto e Cloud Storage assegna il numero di generazione. Insieme, il nome e la generazione identificano in modo univoco l'oggetto all'interno del bucket.
Puoi utilizzare gli elenchi di controllo dell'accesso (ACL) per controllare l'accesso ai singoli oggetti. Puoi anche utilizzare Identity and Access Management (IAM) per controllare l'accesso a tutti gli oggetti all'interno di un bucket o di una cartella gestita.
Considerazioni sull'assegnazione dei nomi
Quando assegni un nome agli oggetti in Cloud Storage, è essenziale rispettare requisiti specifici per garantire la compatibilità ed evitare errori. Questi requisiti si applicano sia ai bucket con spazio dei nomi semplice sia ai bucket con spazio dei nomi gerarchico abilitato.
Requisiti generali
- I nomi degli oggetti possono contenere qualsiasi sequenza di caratteri Unicode validi.
- I nomi degli oggetti non possono contenere caratteri di ritorno a capo o avanzamento riga.
- Tieni presente che le barre rovesciate inviate tramite interfacce come gcloud CLI e la console Google Cloud vengono sottoposte a escape in background. Ad esempio,
\n
diventa\\n
. La limitazione del ritorno a capo e dell'avanzamento riga si riferisce rigorosamente ai caratteri di escape ANSI.
- Tieni presente che le barre rovesciate inviate tramite interfacce come gcloud CLI e la console Google Cloud vengono sottoposte a escape in background. Ad esempio,
- I nomi degli oggetti non possono iniziare con
.well-known/acme-challenge/
. - Gli oggetti non possono essere denominati
.
o..
.
Limiti di dimensione degli oggetti specifici per lo spazio dei nomi
La dimensione massima del nome di un oggetto varia a seconda dello spazio dei nomi del bucket:
- Dimensioni del nome dell'oggetto in un bucket con spazio dei nomi semplice: 1-1024 byte se codificato in UTF-8.
Dimensioni del nome dell'oggetto nei bucket abilitati con spazio dei nomi gerarchico: i nomi degli oggetti possono essere suddivisi in due parti:
- Nome cartella: il nome della cartella in cui si trova l'oggetto. La dimensione massima del nome della cartella è 512 byte se codificata in UTF-8.
- Nome base: il nome dell'oggetto che si trova nella cartella. La dimensione massima del nome base è 512 byte se codificato in UTF-8.
Ad esempio, il percorso
my-folder/my-object.txt
rappresenta un oggetto con un nome basemy-object.txt
memorizzato in una cartella denominatamy-folder/
.
Consigli
Ti consigliamo vivamente di evitare quanto segue nei nomi degli oggetti:
- Caratteri di controllo illegali in XML 1.0 (#x7F–#x84 e #x86–#x9F): questi caratteri causano problemi con le schede XML quando provi a elencare i tuoi oggetti.
- Il carattere
#
: i comandi Google Cloud CLI interpretano i nomi degli oggetti che terminano con #<stringa numerica> come identificatori di versione, quindi l'inclusione di#
nei nomi degli oggetti può rendere difficile o impossibile eseguire operazioni su questi oggetti con controllo delle versioni utilizzando gcloud CLI. - I caratteri
[
,]
,*
o?
: i comandi Google Cloud CLI interpretano questi caratteri come caratteri jolly, quindi includerli nei nomi degli oggetti può rendere difficile o impossibile eseguire operazioni con caratteri jolly. Inoltre,*
e?
non sono caratteri validi per i nomi dei file in Windows. - I caratteri
:
,"
,<
,>
o|
: questi non sono caratteri validi per i nomi dei file in Windows, pertanto i tentativi di scaricare un oggetto che utilizza questi caratteri nel nome in un file Windows non vanno a buon fine, a meno che il metodo di download non preveda la ridenominazione del file Windows risultante. Il carattere/
, sebbene non sia un carattere valido per i nomi file in Windows, in genere può essere utilizzato nei nomi degli oggetti per simulare una struttura di directory; strumenti come Google Cloud CLI convertono automaticamente il carattere in\
durante il download in un ambiente Windows. - Informazioni sensibili o che consentono l'identificazione personale (PII): i nomi degli oggetti sono più visibili rispetto ai dati degli oggetti. Ad esempio, i nomi degli oggetti vengono visualizzati negli URL dell'oggetto e quando vengono elencati gli oggetti in un bucket.
Non è possibile rinominare direttamente gli oggetti esistenti, ma puoi rinominare indirettamente un oggetto copiando ed eliminando l'oggetto originale.
Spazio dei nomi dell'oggetto
Puoi archiviare gli oggetti nei seguenti spazi dei nomi:
Spazio dei nomi piatto
I bucket configurati per archiviare oggetti in uno spazio dei nomi semplice creano sempre oggetti direttamente sotto il bucket. In questi bucket con spazio dei nomi piatto, non esiste una gerarchia all'interno del bucket e non ci sono directory o cartelle in cui esistono gli oggetti.
Per comodità, esistono diversi modi in cui gli oggetti nei bucket con spazio dei nomi semplice vengono trattati come se fossero archiviati in una gerarchia di cartelle:
Le cartelle gestite sono una risorsa Cloud Storage che fornisce un accesso esteso a gruppi di oggetti con un prefisso del nome condiviso.
Strumenti come Google Cloud console e la CLI di Google Cloud interpretano il carattere barra (
/
) nel nome di un oggetto come delimitatore, per simulare le cartelle nei bucket che utilizzano uno spazio dei nomi semplice per gli oggetti.
Ad esempio, se crei un oggetto denominato folder1/file.txt
nel bucket
your-bucket
, il percorso dell'oggetto è your-bucket/folder1/file.txt
e
Cloud Storage non contiene una cartella denominata folder1
. Dal punto di vista di Cloud Storage, la stringa folder1/
fa parte del nome dell'oggetto.
Tuttavia, poiché l'oggetto ha un /
nel nome, alcuni strumenti implementano l'aspetto delle cartelle. Ad esempio, quando utilizzi la console Google Cloud , devi andare all'oggetto folder1/file1.txt
come se fosse un oggetto
denominato file1.txt
in una cartella denominata folder1
. Analogamente, potresti creare una cartella gestita denominata folder1
, quindi file1.txt
sarebbe soggetto al criterio di accesso impostato da questa cartella gestita.
Tieni presente che, poiché gli oggetti si trovano in uno spazio dei nomi piatto, le strutture nidificate in profondità simili a directory non hanno le prestazioni di un file system nativo quando elencano le sottodirectory nidificate in profondità.
Consulta le best practice per la frequenza delle richieste per suggerimenti su come ottimizzare il rendimento evitando nomi sequenziali durante i caricamenti su larga scala. Gli oggetti caricati con nomi sequenziali probabilmente raggiungeranno lo stesso server di backend e limiteranno le prestazioni.
Cartelle simulate
Per aiutarti a organizzare gli oggetti nei bucket Cloud Storage, alcuni strumenti simulano le cartelle e le API JSON e XML hanno funzionalità che ti consentono di progettare il tuo schema di denominazione per simulare le cartelle. Fai clic sulle schede seguenti per vedere come i diversi strumenti gestiscono le cartelle simulate.
Console
La console Google Cloud crea una rappresentazione visiva delle cartelle che assomiglia a un browser di file locale.
Nella console Google Cloud , puoi creare una cartella vuota in un bucket o caricare una cartella esistente.
Quando carichi una cartella esistente, il nome della cartella diventa parte del percorso di tutti gli oggetti contenuti nella cartella. Anche le eventuali sottocartelle e gli oggetti che contengono sono inclusi nel caricamento.
Per creare una cartella:
- Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.
Vai al bucket.
Fai clic su Crea cartella per creare una nuova cartella vuota oppure su Carica cartella per caricare una cartella esistente.
Riga di comando
Le CLI Cloud Storage simulano la tipica esperienza di directory della riga di comando utilizzando una serie di regole.
Per ottenere l'illusione di una struttura ad albero gerarchica dei file, la gcloud CLI applica le seguenti regole per determinare se l'URL di destinazione in un comando deve essere trattato come nome di oggetto o come cartella:
Se l'URL di destinazione termina con il carattere
/
, i comandi dell'interfaccia a riga della gcloud CLI considerano l'URL di destinazione come una cartella. Ad esempio, considera il seguente comando, doveyour-file
è il nome di un file:gcloud storage cp your-file gs://your-bucket/abc/
Come risultato di questo comando, Cloud Storage crea un oggetto denominato
abc/your-file
nel bucketyour-bucket
.Se copi più file di origine in un URL di destinazione utilizzando il flag
--recursive
o un carattere jolly come**
, l'gcloud CLI considera l'URL di destinazione come una cartella. Ad esempio, considera il seguente comando in cuitop-dir
è una cartella contenente file comefile1
efile2
:gcloud storage cp top-dir gs://your-bucket/abc --recursive
Come risultato di questo comando, Cloud Storage crea gli oggetti
abc/top-dir/file1
eabc/top-dir/file2
nel bucketyour-bucket
.Se nessuna di queste regole è applicabile, l'gcloud CLI controlla gli oggetti nel bucket per determinare se l'URL di destinazione è un nome di oggetto o una cartella. Ad esempio, considera il seguente comando in cui
your-file
è il nome di un file:gcloud storage cp your-file gs://your-bucket/abc
gcloud CLI effettua una richiesta di elenco di oggetti per
your-bucket
, utilizzando il delimitatore/
e il prefisso=abc
, per determinare se esistono oggetti inyour-bucket
il cui percorso inizia conabc/
. In questo caso, la gcloud CLI consideraabc/
come nome di una cartella e il comando crea l'oggettoabc/your-file
nel bucketyour-bucket
. In caso contrario, la gcloud CLI crea l'oggettoabc
inyour-bucket
.
Questo approccio basato su regole è diverso dal funzionamento di molti strumenti, che creano
oggetti di 0 byte per contrassegnare l'esistenza delle cartelle. Gcloud CLI
comprende diverse convenzioni utilizzate da questi strumenti, ad esempio la convenzione
di aggiungere _$folder$
alla fine del nome dell'oggetto di 0 byte, ma
non richiede che questi oggetti marker implementino un comportamento di denominazione coerente
con i comandi UNIX.
Oltre a queste regole, il modo in cui gcloud CLI tratta i file di origine
dipende dall'utilizzo o meno del flag --recursive
. Se utilizzi il
flag, gcloud CLI crea nomi di oggetti che rispecchiano la struttura della directory di origine, a partire dal punto di elaborazione ricorsiva. Ad esempio, considera il seguente comando in cui home/top-dir
è una cartella contenente file come file1
e sub-dir/file2
:
gcloud storage cp home/top-dir gs://your-bucket --recursive
Come risultato di questo comando, Cloud Storage crea gli oggetti
top-dir/file1
e top-dir/sub-dir/file2
nel bucket your-bucket
.
Al contrario, la copia senza il flag --recursive
, anche se vengono copiati più file
a causa della presenza di un carattere jolly come **
, comporta
oggetti denominati in base al componente del percorso finale dei file di origine. Ad esempio,
supponendo ancora che home/top-dir
sia una cartella che contiene file come
file1
e sub-dir/file2
, il comando:
gcloud storage cp home/top-dir/** gs://your-bucket
crea un oggetto denominato file1
e un oggetto denominato file2
nel bucket your-bucket
.
Tentativi e denominazione
Quando gcloud CLI ritenta una richiesta interrotta, potresti riscontrare un problema per cui il primo tentativo copia un sottoinsieme di file e i tentativi successivi rilevano una cartella di destinazione già esistente, il che causa una denominazione errata degli oggetti.
Ad esempio, considera il seguente comando, in cui sono presenti sottocartelle
in your-dir/
, ad esempio dir1
e dir2
, ed entrambe le sottocartelle contengono il
file abc
:
gcloud storage cp ./your-dir gs://your-bucket/new --recursive
Se il percorso gs://your-bucket/new
non esiste ancora, la
gcloud CLId crea i seguenti oggetti al primo tentativo
riuscito:
new/dir1/abc new/dir2/abc
Tuttavia, al successivo tentativo riuscito dello stesso comando, gcloud CLI crea i seguenti oggetti:
new/your-dir/dir1/abc new/your-dir/dir2/abc
Per far funzionare gcloud CLI in modo coerente a ogni tentativo, prova a eseguire le seguenti operazioni:
Aggiungi una barra alla fine dell'URL di destinazione in modo che gcloud CLI lo tratti sempre come una cartella.
Utilizza
gcloud storage rsync
. Poichérsync
non utilizza le regole di denominazione delle cartelle definite da cp di Unix, funziona in modo coerente indipendentemente dall'esistenza o meno della sottocartella di destinazione.
Note aggiuntive
Non puoi creare un oggetto di zero byte per simulare una cartella vuota utilizzando gcloud CLI.
Quando esegui il download in un file system locale, la gcloud CLI ignora gli oggetti il cui nome termina con il carattere
/
, perché la creazione di un file che termina con/
non è consentita su Linux e macOS.Se utilizzi script per creare percorsi di file combinando i sottopercorsi, tieni presente che poiché
/
è solo un carattere che si trova nel nome dell'oggetto, le CLI interpretanogs://your-bucket/folder/
come un oggetto diverso dags://your-bucket/folder
.
API REST
API JSON
Le cartelle non esistono nell'API JSON. Puoi restringere l'elenco degli
oggetti che elenchi e simulare le cartelle utilizzando i parametri di query prefix
e
delimiter
.
Ad esempio, per elencare tutti gli oggetti nel bucket my-bucket
con il prefisso folder/subfolder/
, effettua una richiesta di elenco di oggetti utilizzando questo URL:
"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"
API XML
Le cartelle non esistono nell'API XML. Puoi restringere
gli oggetti che elenchi e simulare le cartelle utilizzando iparametri di ricercay prefix
e delimiter
.
Ad esempio, per elencare tutti gli oggetti nel bucket my-bucket
con il prefisso folder/subfolder/
, effettua una richiesta di elenco di oggetti utilizzando questo URL:
"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"
Rimozione delle cartelle simulate
Poiché le cartelle simulate non esistono realmente, in genere puoi rimuoverle rinominando gli oggetti in modo che la cartella simulata non faccia più parte del nome dell'oggetto. Ad esempio, se hai un oggetto denominato
folder1/file
, puoi rimuovere la cartella simulata folder1/
rinominando l'oggetto
semplicemente file
.
Tuttavia, se hai utilizzato uno strumento che crea oggetti di zero byte come segnaposto delle cartelle, ad esempio la console Google Cloud , devi eliminare l'oggetto di zero byte per rimuovere la cartella.
Spazio dei nomi gerarchico
Lo spazio dei nomi gerarchico consente di organizzare gli oggetti all'interno di un bucket Cloud Storage in una gerarchia di cartelle simile a un file system. Lo spazio dei nomi gerarchico migliora le prestazioni e ti aiuta a gestire in modo efficiente i tuoi dati. Per scoprire di più sullo spazio dei nomi gerarchico e su quando utilizzarlo, consulta Spazio dei nomi gerarchico.
Immutabilità degli oggetti
Gli oggetti sono immutabili, il che significa che un oggetto caricato non può essere modificato durante tutta la durata del suo tempo di archiviazione. La durata di archiviazione di un oggetto è il periodo di tempo tra la creazione riuscita dell'oggetto, ad esempio il caricamento, e l'eliminazione riuscita dell'oggetto. In pratica, ciò significa che non puoi apportare modifiche incrementali agli oggetti, ad esempio operazioni di accodamento o troncamento. Tuttavia, è possibile sostituire gli oggetti archiviati in Cloud Storage e questa operazione viene eseguita in modo atomico: finché il nuovo caricamento non viene completato, ai lettori viene mostrata la vecchia versione dell'oggetto e, dopo il completamento del caricamento, ai lettori viene mostrata la nuova versione dell'oggetto. Una singola operazione di sostituzione segna la fine della durata di un oggetto immutabile e l'inizio della durata di un nuovo oggetto immutabile.
Il numero di generazione di un oggetto cambia ogni volta che sostituisci i dati dell'oggetto. Pertanto, il numero di generazione identifica in modo univoco un oggetto immutabile.
Tieni presente che esiste un limite di una volta al secondo per la sostituzione rapida dello
stesso oggetto. La sostituzione dello stesso oggetto con maggiore frequenza potrebbe comportare errori
429 Too Many Requests
. Devi progettare la tua applicazione in modo da caricare
i dati per un determinato oggetto non più di una volta al secondo e gestire gli errori
429 Too Many Requests
occasionali utilizzando una strategia di
nuovi tentativi con backoff esponenziale.
Passaggi successivi
- Carica e scarica oggetti.
- Spostare un oggetto esistente.
- Scopri di più sui bucket, che sono contenitori di oggetti.
- Scopri di più sulle cartelle gestite.