Cette page décrit les requêtes d'écriture par lot Spanner et leur utilisation 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 accepte les écritures à faible latence sans opération de lecture et renvoie des réponses lorsque des mutations sont appliquées par lot. Pour utiliser l'écriture par lot, vous regroupez les mutations associées, et 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épendantes les unes des autres (non atomiques). Spanner n'a pas besoin d'attendre que toutes les mutations soient appliquées avant d'envoyer une réponse, ce qui signifie 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 effectuer un commit d'un grand nombre d'écritures sans opération de lecture, mais que vous n'avez pas 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 les 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 des transactions en lecture-écriture.
Limites
L'écriture par lot Spanner présente les limites suivantes:
L'écriture par lot Spanner n'est pas disponible dans la console Google Cloud ni dans la Google Cloud CLI. Il n'est disponible qu'avec les API REST et RPC, ainsi que la bibliothèque cliente Java de Spanner.
La protection contre la relecture n'est pas compatible avec l'écriture par lot. Il est possible que des mutations soient appliquées plusieurs fois. Dans ce cas, cela peut entraîner un échec. Par exemple, si une mutation d'insertion est relue, elle peut générer une erreur qui existe déjà. Si vous utilisez des clés générées ou basées sur l'horodatage 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 afin d'é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, un rollback est effectué pour les mutations des groupes non terminés. Les mutations des groupes terminés sont validées dans la base de données.
La taille maximale d'une requête d'écriture par lot est identique à la limite d'une requête de commit. Pour en savoir plus, consultez la section Limites de création, de lecture, de mise à jour et de suppression de données.
Utiliser l'écriture par lot
Pour utiliser l'écriture par lot, vous devez disposer de l'autorisation spanner.databases.write
sur la base de données que vous souhaitez modifier. Vous pouvez écrire des mutations de manière non atomique par lot dans un seul appel à l'aide d'un appel de requête d'API REST ou RPC.
Vous devez regrouper les types de mutations suivants lorsque vous utilisez l'écriture par lot:
- Insérer des lignes avec le même préfixe de clé primaire dans les tables parentes et enfants
- Insérer des lignes dans des tableaux avec une relation de clé étrangère entre les tableaux
- Autres types de mutations associées en fonction de votre schéma de base de données et de la logique d'application.
Vous pouvez également effectuer une écriture 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
Étapes suivantes
- En savoir plus sur les transactions Spanner.