Questa pagina descrive come creare e gestire i punti di suddivisione nel database. Puoi creare punti di suddivisione per pre-suddividere il database e prepararti a un aumento previsto del traffico. Per saperne di più sulla pre-suddivisione, consulta Panoramica della pre-suddivisione.
Prima di iniziare
-
Per ottenere l'autorizzazione necessaria per creare e gestire i punti di suddivisione, chiedi all'amministratore di concederti il ruolo IAM Cloud Spanner Database Admin (
roles/spanner.databaseAdmin) nell'istanza. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Questo ruolo predefinito contiene l'autorizzazione
spanner.databases.addSplitPoints, necessaria per creare e gestire i punti di suddivisione.Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Gli esempi di Google Cloud CLI in questa pagina presuppongono quanto segue:
- Hai configurato gcloud CLI per l'utilizzo con Spanner. Se non hai mai utilizzato gcloud CLI con Spanner, consulta Crea ed esegui query su un database utilizzando gcloud CLI.
Hai configurato gcloud CLI con il tuo progetto. Ad esempio:
gcloud config set core/project PROJECT_ID
Assicurati che l'istanza Spanner disponga di nodi sufficienti per supportare l'aumento di traffico previsto. Per saperne di più, consulta la panoramica della pre-suddivisione.
Crea punti di suddivisione
Puoi creare punti di suddivisione utilizzando gcloud CLI o le API REST.
gcloud
Se vuoi creare punti di suddivisione utilizzando gcloud CLI, devi creare un file contenente tutte le suddivisioni e fornire il percorso nel comando gcloud CLI. Il file non deve superare il limite API di 100 punti per richiesta API. Per saperne di più, consulta Quote e limiti.
Il file deve utilizzare il seguente formato per specificare i punti di suddivisione:
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
Sostituisci le seguenti variabili durante la creazione del file:
- ObjectType: il tipo di oggetto in cui vuoi aggiungere le suddivisioni. I valori validi sono
TABLEeINDEX. - ObjectName: il nome della tabella o dell'indice del database.
- SplitValue1..N: i valori chiave del punto di suddivisione in cui vuoi introdurre le suddivisioni.
- IndexSplitValue1..N: i valori della chiave di indice per un punto di suddivisione dell'indice.
- TableSplitValue1..N: i valori della chiave di tabella per un punto di suddivisione dell'indice.
Utilizza le seguenti regole per creare i valori dei punti di suddivisione nel file:
- I valori stringa devono essere racchiusi tra virgolette singole. Ad esempio,
'splitKeyPart' - I valori booleani devono essere
trueofalse. - I valori dei tipi di dati Spanner
INT64eNUMERICdevono essere racchiusi tra virgolette singole. Ad esempio:'123'o'99.99'. - Tutti gli altri valori numerici devono essere scritti senza virgolette singole. Ad esempio,
1.287. - I valori di timestamp devono essere forniti nel formato
'2020-06-18T17:24:53Z'tra virgolette singole. - I valori di suddivisione devono essere racchiusi tra parentesi.
- L'ordine dei valori delle chiavi di suddivisione deve essere lo stesso dell'ordine delle chiave primaria.
- Se il valore di suddivisione deve contenere una virgola, devi eseguire l'escape della virgola utilizzando un carattere "\".
- Per la suddivisione degli indici, puoi fornire la chiave dell'indice o l'intero indice e la chiave della tabella completa.
- Devi sempre utilizzare la chiave completa quando specifichi il punto di suddivisione.
Di seguito è riportato un file di esempio che mostra come vengono specificati i punti di suddivisione:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey (123,'ab\,c')
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- SPLITS_FILE: il percorso del file delle suddivisioni.
- INSTANCE_ID: l'ID istanza.
- DATABASE_ID: l'ID del database.
-
EXPIRATION_DATE:
(facoltativo) la data di scadenza dei punti di suddivisione. Accetta un timestamp nel formato
'2020-06-18T17:24:53Z'. - INITIATOR: (facoltativo) l'utente che ha avviato la divisione dei punti.
Esegui questo comando:
Linux, macOS o Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
Puoi utilizzare il metodo projects.instances.databases.addSplitPoints per creare punti di suddivisione.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID progetto
- INSTANCE_ID: l'ID istanza.
- DATABASE_ID: l'ID del database.
Metodo HTTP e URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Corpo JSON della richiesta:
{
"split_points": [
{
"table": "T1",
"index": "T1_IDX",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
3
]
}
},
{
"key_parts": {
"values": [
10
]
}
}
]
},
{
"table": "T2",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
50
]
}
}
]
}
]
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere un codice di stato riuscito (2xx) e una risposta vuota.
Librerie client
Vai
Java
Node.js
Python
Possibili scenari di errore
I seguenti scenari possono causare un errore durante la creazione dei punti di suddivisione:
- La suddivisione a livello di indice ha un nome di tabella errato nell'input.
- Il punto di suddivisione a livello di tabella ha più di una chiave.
- Il punto di suddivisione a livello di indice ha più di due chiavi.
- I punti di suddivisione sono definiti su tabelle o indici non definiti nello schema del database.
- La richiesta contiene punti di suddivisione duplicati.
Per informazioni su quote e limiti, consulta Quote e limiti.
Visualizza i punti di suddivisione
Puoi visualizzare tutti i punti di suddivisione creati nel database utilizzando la consoleGoogle Cloud o gcloud CLI:
Console
Per ottenere il conteggio dei punti di suddivisione eseguendo una query sulla vista SPANNER_SYS.USER_SPLIT_POINTSnella console Google Cloud , segui questi passaggi:
Apri la pagina Istanze Spanner.
Seleziona i nomi dell'istanza Spanner e del database su cui vuoi eseguire la query.
Fai clic su Spanner Studio nel pannello di navigazione a sinistra.
Digita la seguente query nel campo di testo:
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTSFai clic su Esegui query.
Viene visualizzato un risultato simile al seguente:
| TABLE_NAME | INDEX_NAME | INITIATOR | SPLIT_KEY | EXPIRE_TIME |
|---|---|---|---|---|
| T | CloudAddSplitPointsAPI | T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-06T09:58:58.007201Z | |
| T | T_IDX | CloudAddSplitPointsAPI | Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
| T | T_IDX | CloudAddSplitPointsAPI | Indice: T_IDX su T, chiave indice: (9091), chiave tabella principale: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
Esegui il seguente comando gcloud CLI per visualizzare i punti di suddivisione nel database:
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
Sostituisci le seguenti variabili quando esegui questo comando:
- INSTANCE_ID: l'ID istanza Spanner.
- DATABASE_ID: l'ID del database Spanner.
Viene visualizzata una risposta simile alla seguente:
TABLE_NAME: T
INDEX_NAME:
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-06T09:58:58.007201Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
EXPIRE_TIME: 2025-03-08T07:33:23.861682Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-08T07:35:25.990007Z
Come far scadere un punto di suddivisione
Puoi impostare una data di scadenza per ogni punto di suddivisione che crei. Per saperne di più, consulta Scadenza del punto di suddivisione. Puoi far scadere i punti di suddivisione utilizzando gcloud CLI o le API REST.
gcloud
Se vuoi far scadere i punti di suddivisione con gcloud CLI, devi creare un file contenente tutte le suddivisioni che vuoi far scadere e fornire il relativo percorso utilizzando il parametro splits-file nel comando gcloud CLI. Il file non deve superare il limite API di 100 punti per richiesta API. Per saperne di più, consulta Quote e limiti.
Il file deve utilizzare il seguente formato per specificare i punti di suddivisione:
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
Sostituisci le seguenti variabili durante la creazione del file:
- ObjectType: il tipo di oggetto della suddivisione che vuoi far scadere. I valori validi sono
TABLEeINDEX. - ObjectName: il nome della tabella o dell'indice del database.
- SplitValue1..N: i valori delle chiavi dei punti di suddivisione che vuoi far scadere.
- IndexSplitValue1..N: i valori della chiave di indice per un punto di suddivisione dell'indice.
- TableSplitValue1..N: i valori della chiave di tabella per un punto di suddivisione dell'indice.
Utilizza le seguenti regole per creare i valori dei punti di suddivisione nel file:
- I valori stringa devono essere racchiusi tra virgolette singole. Ad esempio,
'splitKeyPart' - I valori booleani possono essere
trueofalse. - I valori dei tipi di dati Spanner
INT64eNUMERICdevono essere racchiusi tra virgolette singole. Ad esempio:'123'o'99.99'. - Tutti gli altri valori numerici devono essere scritti senza virgolette singole. Ad esempio,
1.287. - I valori di timestamp devono essere forniti nel formato
'2020-06-18T17:24:53Z'tra virgolette singole. - I valori di suddivisione devono essere racchiusi tra parentesi.
- L'ordine dei valori delle chiavi di suddivisione deve essere lo stesso dell'ordine delle chiave primaria.
- Se il valore di suddivisione deve contenere una virgola, devi eseguire l'escape della virgola utilizzando un carattere "\".
- Per la suddivisione degli indici, puoi fornire la chiave dell'indice o l'intero indice e la chiave della tabella completa.
- Devi sempre utilizzare la chiave completa quando specifichi il punto di suddivisione.
Di seguito è riportato un file di esempio che mostra come vengono specificati i punti di suddivisione:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey (123,'ab\,c')
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- SPLITS_FILE: il percorso del file delle suddivisioni.
- INSTANCE_ID: l'ID istanza.
- DATABASE_ID: l'ID del database.
-
EXPIRATION_DATE:
(facoltativo) la data di scadenza dei punti di suddivisione. Accetta un timestamp nel formato
'2020-06-18T17:24:53Z'. - INITIATOR: (facoltativo) l'utente che ha avviato la divisione dei punti.
Esegui questo comando:
Linux, macOS o Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID progetto
- INSTANCE_ID: l'ID istanza.
- DATABASE_ID: l'ID del database.
Metodo HTTP e URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Corpo JSON della richiesta:
{
"split_points": [
{
"table": "T1",
"index": "T1_IDX",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
3
]
}
},
{
"key_parts": {
"values": [
10
]
}
}
]
},
{
"table": "T2",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
50
]
}
}
]
}
]
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere un codice di stato riuscito (2xx) e una risposta vuota.