Cette page décrit les requêtes d'écriture par lot Spanner et explique comment les utiliser pour modifier vos données Spanner.
Vous pouvez utiliser l'écriture par lot Spanner pour insérer, mettre à jour ou supprimer plusieurs lignes dans vos tables Spanner. L'écriture par lot Spanner est compatible avec les écritures à faible latence sans opération de lecture et renvoie des réponses lorsque les mutations sont appliquées par lot. Pour utiliser l'écriture par lot, vous devez regrouper les mutations associées. Toutes les mutations d'un groupe sont validées de manière atomique. Les mutations entre les groupes sont appliquées dans un ordre non spécifié et sont indépendants les uns des autres (non atomiques). Spanner n'a pas besoin d'attendre l'application de toutes les mutations avant d'envoyer une réponse. Autrement dit, que l'écriture par lot autorise un échec partiel. Vous pouvez également exécuter plusieurs écritures par lot à la fois. Pour en savoir plus, consultez la section Utiliser l'écriture par lot.
Cas d'utilisation
L'écriture par lot Spanner est particulièrement utile si vous souhaitez valider un grand nombre d'écritures sans opération de lecture, mais sans avoir besoin d'une transaction atomique pour toutes vos mutations.
Si vous souhaitez traiter vos requêtes LMD par lot, utilisez le traitement LMD par lot. pour modifier vos données Spanner. Pour en savoir plus sur les différences entre le LMD et les mutations, consultez la section Comparer le LMD et les mutations.
Pour les requêtes de mutation unique, nous vous recommandons d'utiliser un verrouillage en lecture/écriture transaction.
Limites
L'écriture par lot Spanner présente les limites suivantes:
L'écriture par lot Spanner n'est pas disponible avec la console Google Cloud ni avec Google Cloud CLI. Il n'est disponible qu'avec REST et RPC. et la bibliothèque cliente Java Spanner.
La protection contre la réexécution n'est pas compatible avec l'écriture par lot. Il est possible que les mutations soient appliquée plusieurs fois, et une mutation appliquée plusieurs fois peut peut entraîner une défaillance. Par exemple, si une mutation d'insertion est rejouée, elle peut générer une erreur "Cet élément existe déjà". Si vous utilisez des clés générées ou basées sur le code temporel de validation dans la mutation, des lignes supplémentaires peuvent être ajoutées à la table. Nous vous recommandons de structurer vos écritures pour qu'elles soient idempotentes pour éviter ce problème.
Vous ne pouvez pas effectuer un rollback d'une requête d'écriture par lot terminée. Vous pouvez annuler une requête d'écriture par lot en cours. Si vous annulez une écriture par lot en cours, les mutations des groupes inachevés sont annulées. Les mutations des groupes terminés sont enregistrées dans la base de données.
La taille maximale d'une requête d'écriture par lot est la même que la limite d'une requête de validation. Pour en savoir plus, consultez la section Limites de création, lecture, modification et suppression des données.
Utiliser les écritures par lot
Pour utiliser l'écriture par lot, vous devez disposer de l'autorisation spanner.databases.write
sur
la base de données à modifier. Vous pouvez écrire des mutations par lot
de manière non atomique dans un seul appel à l'aide d'un objet REST ;
ou API RPC
appel de requête.
Vous devez regrouper les types de mutations suivants lorsque vous utilisez l'écriture par lot:
- Insertion de lignes avec le même préfixe de clé primaire dans les tables parente et enfant.
- Insertion de lignes dans des tables avec une relation de clé étrangère entre les tables.
- Autres types de mutations associées en fonction du schéma de votre base de données et logique d'application.
Vous pouvez également effectuer des écritures par lot à l'aide de la bibliothèque cliente Java Spanner.
L'exemple de code suivant met à jour la table Singers
avec de nouvelles lignes.
Java
Étape suivante
- En savoir plus sur les transactions Spanner.