Informazioni sugli oggetti Cloud Storage

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 dati che archivi in Cloud Storage. Non esiste un limite al numero di oggetti che puoi creare in un bucket.

Gli oggetti hanno due componenti: dati oggetto e metadati oggetto. I dati oggetto sono in genere un file che vuoi archiviare in Cloud Storage e sono completamente opachi per Cloud Storage. I metadati oggetto sono una raccolta di coppie nome-valore che descrivono varie qualità dell'oggetto.

Due importanti metadati oggetto comuni a tutti gli oggetti sono il nome dell'oggetto e il relativo 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 di quel 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 sulla denominazione

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 di spazi dei nomi semplici sia ai bucket con spazi dei nomi gerarchici.

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 di avanzamento riga.
    • Tieni presente che le barre rovesciate inviate tramite interfacce come gcloud CLI e Google Cloud console 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.
  • 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:

  • Dimensione del nome dell'oggetto in un bucket di spazi dei nomi semplici: 1-1024 byte se codificato in UTF-8.
  • Dimensione del nome dell'oggetto nei bucket con spazi dei nomi gerarchici: 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 è di 512 byte se codificato in UTF-8.
    • Nome base: il nome dell'oggetto che si trova nella cartella. La dimensione massima del nome base è di 512 byte se codificato in UTF-8.

    Ad esempio, il percorso my-folder/my-object.txt rappresenta un oggetto con un nome base my-object.txt archiviato in una cartella denominata my-folder/.

Consigli

Ti consigliamo vivamente di evitare quanto segue nei nomi degli oggetti:

  • Caratteri di controllo non validi in XML 1.0 (#x7F–#x84 e #x86–#x9F). Questi caratteri causano problemi di elenco XML quando provi a elencare gli oggetti.
  • Il carattere #. I comandi di Google Cloud CLI interpretano i nomi degli oggetti che terminano con #NUMERIC_STRING 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 di Google Cloud CLI interpretano questi caratteri come caratteri jolly, quindi la loro inclusione 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, quindi i tentativi di scaricare un oggetto che utilizza questi caratteri nel nome in un file di Windows non vanno a buon fine, a meno che il metodo di download non includa la ridenominazione del file di Windows risultante. Il carattere /, pur non essendo un carattere valido per i nomi dei 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.
  • Le sequenze di caratteri ./ e ../. Queste sequenze di caratteri creano cartelle simulate utilizzando punti singoli o doppi per il nome della cartella, ad esempio folder/./object.txt o folder/../object.txt. Tuttavia, quando scarichi una cartella, le librerie client e gcloud CLI interpretano i segmenti di percorso solo con punti come percorsi di file relativi. Questo comportamento significa che gli oggetti potrebbero essere sovrascritti o non essere scaricati.
    • Un singolo punto nel segmento di percorso viene interpretato come la directory corrente. Ad esempio, supponiamo di scaricare gli oggetti my-object.txt e ./my-object.txt nella stessa destinazione. Il primo oggetto viene scaricato in /destination-directory/my-object.txt. Il riferimento . nel secondo oggetto viene risolto e il percorso effettivo cambia da /destination-directory/./my-object.txt a /destination-directory/my-object.txt, sovrascrivendo l'altro oggetto che già esiste nello stesso percorso.
    • Un doppio punto nel segmento di percorso viene interpretato come la directory principale. Se il percorso finale di un oggetto scaricato si trova al di fuori della directory di destinazione, l'oggetto non viene scaricato. Gli oggetti che non vengono scaricati vengono restituiti nella risposta a una richiesta di directory di download.
  • Informazioni sensibili o che consentono l'identificazione personale (PII). I nomi degli oggetti sono più visibili dei dati degli oggetti. Ad esempio, i nomi degli oggetti vengono visualizzati negli URL dell'oggetto e quando elenchi gli oggetti in un bucket.

Gli oggetti esistenti non possono essere rinominati direttamente, ma puoi rinominare indirettamente un oggetto copiando ed eliminando l'oggetto originale.

Spazio dei nomi degli oggetti

Puoi archiviare gli oggetti nei seguenti spazi dei nomi:

Spazio dei nomi semplice

I bucket configurati per archiviare gli oggetti in uno spazio dei nomi semplice creano sempre gli oggetti direttamente sotto il bucket. In questi bucket di spazi dei nomi semplici non esiste una gerarchia all'interno del bucket e non esistono directory o cartelle in cui si trovano gli oggetti.

Per comodità, gli oggetti nei bucket di spazi dei nomi semplici vengono trattati come se fossero archiviati in una gerarchia di cartelle in diversi modi:

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 ha una cartella denominata folder1 al suo interno. Dal punto di vista di Cloud Storage, la stringa folder1/ fa parte del nome dell'oggetto.

Tuttavia, poiché l'oggetto ha un carattere / nel nome, alcuni strumenti implementano l'aspetto delle cartelle. Ad esempio, quando utilizzi la Google Cloud console, devi andare all'oggetto folder1/file1.txt come se fosse un oggetto denominato file1.txt in una cartella denominata folder1. Allo stesso modo, puoi creare una cartella gestita denominata folder1, quindi file1.txt sarà soggetta a la policy di accesso impostata da questa cartella gestita.

Tieni presente che, poiché gli oggetti risiedono in uno spazio dei nomi semplice, le strutture nidificate in profondità, simili a directory, non hanno le prestazioni di un file system nativo quando elenchi le sottodirectory nidificate in profondità.

Consulta le best practice relative alla frequenza delle richieste per suggerimenti su come ottimizzare le prestazioni evitando nomi sequenziali durante i caricamenti su larga scala. È probabile che gli oggetti caricati con nomi sequenziali raggiungano lo stesso server di backend e limitino 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 seguenti schede per scoprire come i diversi strumenti gestiscono le cartelle simulate.

Console

La Google Cloud console crea una rappresentazione visiva delle cartelle che assomiglia a un browser di file locale.

Nella Google Cloud console 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 sottocartelle e gli oggetti che contengono sono inclusi nel caricamento.

Per creare una cartella:

  1. Nella Google Cloud console, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Vai al bucket.

  3. Fai clic su Crea cartella per creare una nuova cartella vuota o su Carica cartella per caricare una cartella esistente.

Riga di comando

Le CLI di Cloud Storage simulano l'esperienza tipica della directory della riga di comando utilizzando una serie di regole.

Per ottenere l'illusione di un albero di file gerarchico, gcloud CLI applica le seguenti regole per determinare se l'URL di destinazione in un comando deve essere trattato come un nome di oggetto o una cartella:

  1. Se l'URL di destinazione termina con un carattere /, i comandi di gcloud CLI trattano l'URL di destinazione come 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/

    Di conseguenza, Cloud Storage crea un oggetto denominato abc/your-file nel bucket your-bucket.

  2. Se copi più file di origine in un URL di destinazione, utilizzando il flag --recursive o un carattere jolly come **, gcloud CLI tratta l'URL di destinazione come una cartella. Ad esempio, considera il seguente comando in cui top-dir è una cartella contenente file come file1 e file2:

    gcloud storage cp top-dir gs://your-bucket/abc --recursive

    Di conseguenza, Cloud Storage crea gli oggetti abc/top-dir/file1 e abc/top-dir/file2 nel bucket your-bucket.

  3. Se nessuna di queste regole si applica, 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 in your-bucket il cui percorso inizia con abc/. In caso affermativo, gcloud CLI tratta abc/ come nome di cartella, e il comando crea l'oggetto abc/your-file nel bucket your-bucket. In caso contrario, gcloud CLI crea l'oggetto abc in your-bucket.

Questo approccio basato su regole è diverso dal modo in cui funzionano 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 questi oggetti marker per implementare 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 costruisce i nomi degli oggetti in modo da rispecchiare 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

Di conseguenza, 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 **, genera oggetti denominati in base al componente del percorso finale dei file di origine. Ad esempio, supponendo che home/top-dir sia una cartella contenente 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.

Nuovi tentativi e denominazione

Quando gcloud CLI riprova a eseguire 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 fa sì che gli oggetti vengano denominati in modo errato.

Ad esempio, considera il seguente comando, in cui sono presenti sottocartelle in your-dir/ come 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, gcloud CLI 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 fare in modo che gcloud CLI funzioni in modo coerente a ogni tentativo, prova a eseguire le seguenti operazioni:

  1. Aggiungi una barra alla fine dell'URL di destinazione in modo che gcloud CLI lo tratti sempre come una cartella.

  2. Utilizza gcloud storage rsync. Poiché rsync non utilizza le regole di denominazione delle cartelle definite da cp di Unix, funziona in modo coerente indipendentemente dal fatto che la sottocartella di destinazione esista o meno.

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, gcloud CLI ignora gli oggetti il cui nome termina con un 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 interpretano gs://your-bucket/folder/ come un oggetto diverso da gs://your-bucket/folder.

API REST

API JSON

Le cartelle non esistono nell'API JSON. Puoi restringere gli oggetti che elenchi e simulare le cartelle utilizzando i prefix e delimiter parametri di query.

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 i parametri di ricerca 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 effettivamente, 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 in file.

Tuttavia, se hai utilizzato uno strumento che crea oggetti di zero byte come segnaposto per le cartelle, ad esempio la Google Cloud console, devi eliminare l'oggetto di zero byte per rimuovere la cartella.

Ridenominazione o spostamento di cartelle simulate

Per rinominare o spostare una cartella simulata, devi copiare ed eliminare ogni oggetto al suo interno. Se la cartella simulata contiene molti oggetti, il processo di ridenominazione può essere inefficiente e costoso. La ridenominazione o lo spostamento di una cartella simulata non è atomico, il che significa che se il processo non va a buon fine, il bucket potrebbe rimanere in uno stato incoerente, con solo alcuni oggetti spostati.

Spazio dei nomi gerarchico

Lo spazio dei nomi gerarchico ti consente di organizzare gli oggetti all'interno di un bucket Cloud Storage in un file system come una gerarchia di cartelle. Lo spazio dei nomi gerarchico migliora le prestazioni e ti aiuta a gestire i dati in modo efficiente. 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 dell'archiviazione di un oggetto è il periodo di tempo che intercorre 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 avviene in modo atomico: finché il nuovo caricamento non viene completato, ai lettori viene fornita la versione precedente dell'oggetto e, al termine del caricamento, viene fornita 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 una frequenza maggiore potrebbe generare 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 occasionali 429 Too Many Requests utilizzando una strategia di nuovi tentativi con backoff esponenziale .

Passaggi successivi