Cette page explique comment créer et gérer des points de division dans votre base de données. Vous pouvez créer des points de division pour diviser au préalable votre base de données afin de vous préparer à une augmentation anticipée du trafic. Pour en savoir plus sur la pré-division, consultez Présentation de la pré-division.
Avant de commencer
-
Pour obtenir l'autorisation nécessaire pour créer et gérer des points de division, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de bases de données Cloud Spanner (
roles/spanner.databaseAdmin) sur votre instance. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.Ce rôle prédéfini contient l'autorisation
spanner.databases.addSplitPoints, qui est nécessaire pour créer et gérer des points de division.Vous pouvez également obtenir cette autorisation avec des rôles personnalisés ou d'autres rôles prédéfinis.
Les exemples Google Cloud CLI de cette page reposent sur les hypothèses suivantes :
- Vous avez configuré gcloud CLI pour l'utiliser avec Spanner. Si vous débutez avec gcloud CLI et Spanner, consultez Créer et interroger une base de données à l'aide de gcloud CLI.
Vous avez configuré gcloud CLI avec votre projet. Exemple :
gcloud config set core/project PROJECT_ID
Assurez-vous que votre instance Spanner dispose de suffisamment de nœuds pour prendre en charge l'augmentation de trafic prévue. Pour en savoir plus, consultez la présentation de la pré-division.
Créer des points de fractionnement
Vous pouvez créer des points de division à l'aide de la gcloud CLI ou des API REST.
gcloud
Si vous souhaitez créer des points de division à l'aide de la gcloud CLI, vous devez créer un fichier contenant toutes les divisions et fournir le chemin d'accès dans la commande gcloud CLI. Le fichier ne doit pas dépasser la limite de l'API de 100 points par requête API. Pour en savoir plus, consultez la page Quotas et limites.
Le fichier doit utiliser le format suivant pour spécifier les points de division :
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
Remplacez les variables suivantes lors de la création du fichier :
- ObjectType : type d'objet dans lequel vous souhaitez ajouter des divisions. Les valeurs valides sont
TABLEetINDEX. - ObjectName : nom de la table ou de l'index de la base de données.
- SplitValue1..N : valeurs de clé du point de division où vous souhaitez introduire les divisions.
- IndexSplitValue1..N : valeurs de clé d'index pour un point de division d'index.
- TableSplitValue1..N : valeurs de clé de table pour un point de division d'index.
Utilisez les règles suivantes lorsque vous créez les valeurs de point de partage dans le fichier :
- Les valeurs de chaîne doivent être placées entre guillemets simples. Par exemple :
'splitKeyPart' - Les valeurs booléennes doivent être
trueoufalse. - Les valeurs de type de données Spanner
INT64etNUMERICdoivent être placées entre guillemets simples. Par exemple,'123'ou'99.99'. - Toutes les autres valeurs numériques doivent être écrites sans guillemets simples. Par exemple,
1.287. - Les valeurs de code temporel doivent être fournies au format
'2020-06-18T17:24:53Z'entre guillemets simples. - Les valeurs de fractionnement doivent être entourées de parenthèses.
- L'ordre des valeurs des clés de division doit être identique à celui de la clé primaire.
- Si la valeur de fractionnement doit comporter une virgule, vous devez l'échapper à l'aide d'un caractère "\".
- Pour diviser des index, vous pouvez fournir la clé d'index ou l'index entier et la clé de table complète.
- Vous devez toujours utiliser la clé complète lorsque vous spécifiez le point de division.
Voici un exemple de fichier qui montre comment les points de division sont spécifiés :
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')
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SPLITS_FILE : chemin d'accès au fichier de fractionnement.
- INSTANCE_ID : ID de l'instance.
- DATABASE_ID : ID de la base de données.
-
EXPIRATION_DATE : (facultatif) date d'expiration des points de répartition. Accepte un code temporel au format
'2020-06-18T17:24:53Z'. - INITIATOR (facultatif) : initiateur des points de division.
Exécutez la commande suivante :
Linux, macOS ou 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
Vous pouvez utiliser la méthode projects.instances.databases.addSplitPoints pour créer des points de division.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet.
- INSTANCE_ID : ID de l'instance.
- DATABASE_ID : ID de la base de données.
Méthode HTTP et URL :
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Corps JSON de la requête :
{
"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
]
}
}
]
}
]
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.
Bibliothèques clientes
Go
Java
Node.js
Python
Scénarios d'erreur possibles
Les scénarios suivants peuvent entraîner une erreur lors de la création de points de division :
- Le nom de la table est incorrect dans l'entrée de la division au niveau de l'index.
- Le point de division au niveau de la table comporte plusieurs clés.
- Le point de division au niveau de l'index comporte plus de deux clés.
- Les points de division sont définis sur des tables ou des index qui ne sont pas définis dans le schéma de la base de données.
- La requête contient des points de division en double.
Pour plus d'informations sur les quotas et les limites, consultez la section Quotas et limites.
Afficher les points de partage
Vous pouvez afficher tous les points de division créés dans votre base de données à l'aide de la consoleGoogle Cloud ou de la gcloud CLI :
Console
Pour obtenir le nombre de points de division en interrogeant la vue SPANNER_SYS.USER_SPLIT_POINTS dans la console Google Cloud , procédez comme suit :
Ouvrez la page "Instances Spanner".
Sélectionnez les noms de l'instance Spanner et de la base de données que vous souhaitez interroger.
Cliquez sur Spanner Studio dans le panneau de navigation de gauche.
Saisissez la requête suivante dans le champ de texte :
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTSCliquez sur Exécuter la requête.
Un résultat semblable à celui-ci s'affiche :
| 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 sur T, clé d'index : (10), clé de table principale : (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
| T | T_IDX | CloudAddSplitPointsAPI | Index : T_IDX sur T, clé d'index : (9091), clé de table principale : (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
Exécutez la commande gcloud CLI suivante pour afficher les points de division dans votre base de données :
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
Remplacez les variables suivantes lorsque vous exécutez cette commande :
- INSTANCE_ID : ID de l'instance Spanner.
- DATABASE_ID : ID de la base de données Spanner.
Une réponse semblable à la suivante s'affiche :
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
Faire expirer un point de répartition
Vous pouvez définir un délai d'expiration pour chaque point de répartition que vous créez. Pour en savoir plus, consultez Expiration du point de division. Vous pouvez faire expirer des points de répartition à l'aide de la gcloud CLI ou des API REST.
gcloud
Si vous souhaitez faire expirer des points de répartition à l'aide de la gcloud CLI, vous devez créer un fichier contenant toutes les répartitions que vous souhaitez faire expirer et fournir son chemin d'accès à l'aide du paramètre splits-file dans la commande gcloud CLI. Le fichier ne doit pas dépasser la limite de l'API de 100 points par requête API. Pour en savoir plus, consultez la page Quotas et limites.
Le fichier doit utiliser le format suivant pour spécifier les points de division :
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
Remplacez les variables suivantes lors de la création du fichier :
- ObjectType : type d'objet de la répartition que vous souhaitez faire expirer. Les valeurs valides sont
TABLEetINDEX. - ObjectName : nom de la table ou de l'index de la base de données.
- SplitValue1..N : valeurs de clé du point de division que vous souhaitez faire expirer.
- IndexSplitValue1..N : valeurs de clé d'index pour un point de division d'index.
- TableSplitValue1..N : valeurs de clé de table pour un point de division d'index.
Utilisez les règles suivantes lorsque vous créez les valeurs de point de partage dans le fichier :
- Les valeurs de chaîne doivent être placées entre guillemets simples. Par exemple :
'splitKeyPart' - Les valeurs booléennes peuvent être
trueoufalse. - Les valeurs de type de données Spanner
INT64etNUMERICdoivent être placées entre guillemets simples. Par exemple,'123'ou'99.99'. - Toutes les autres valeurs numériques doivent être écrites sans guillemets simples. Par exemple,
1.287. - Les valeurs de code temporel doivent être fournies au format
'2020-06-18T17:24:53Z'entre guillemets simples. - Les valeurs de fractionnement doivent être entourées de parenthèses.
- L'ordre des valeurs des clés de division doit être identique à celui de la clé primaire.
- Si la valeur de fractionnement doit comporter une virgule, vous devez l'échapper à l'aide d'un caractère "\".
- Pour diviser des index, vous pouvez fournir la clé d'index ou l'index entier et la clé de table complète.
- Vous devez toujours utiliser la clé complète lorsque vous spécifiez le point de division.
Voici un exemple de fichier qui montre comment les points de division sont spécifiés :
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')
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- SPLITS_FILE : chemin d'accès au fichier de fractionnement.
- INSTANCE_ID : ID de l'instance.
- DATABASE_ID : ID de la base de données.
-
EXPIRATION_DATE : (facultatif) date d'expiration des points de répartition. Accepte un code temporel au format
'2020-06-18T17:24:53Z'. - INITIATOR (facultatif) : initiateur des points de division.
Exécutez la commande suivante :
Linux, macOS ou 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
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet.
- INSTANCE_ID : ID de l'instance.
- DATABASE_ID : ID de la base de données.
Méthode HTTP et URL :
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
Corps JSON de la requête :
{
"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
]
}
}
]
}
]
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.