La fonctionnalité de mise à jour conditionnelle vous permet de mettre à jour les données d'une table uniquement si les conditions spécifiées sont remplies. Si les conditions ne sont pas satisfaites, la mise à jour échoue.
Prérequis
Une instance OTSClient est initialisée. Pour plus d'informations, consultez la rubrique Initialiser une instance OTSClient.
Une table de données a été créée et des données y ont été écrites. Pour plus d'informations, consultez les rubriques Créer une table de données et Écrire des données.
Notes d'utilisation
Lorsque vous appelez les opérations PutRow, UpdateRow, DeleteRow ou BatchWriteRow pour mettre à jour des données, vous pouvez utiliser la mise à jour conditionnelle afin de vérifier les conditions d'existence des lignes et les conditions basées sur les colonnes. La mise à jour aboutit uniquement si ces conditions sont remplies.
La mise à jour conditionnelle s'appuie sur deux types de conditions : les conditions d'existence des lignes et les conditions basées sur les colonnes.
-
Les conditions d'existence des lignes incluent IGNORE, EXPECT_EXIST et EXPECT_NOT_EXIST.
Lorsque vous modifiez une table de données, Tablestore vérifie d'abord la condition d'existence de la ligne. Si cette condition n'est pas remplie, la modification échoue et une erreur est renvoyée.
-
Les conditions basées sur les colonnes comprennent SingleColumnCondition et CompositeCondition. Elles permettent de déterminer si les conditions sont satisfaites en fonction des valeurs d'une ou plusieurs colonnes.
Les conditions basées sur les colonnes prennent en charge les opérateurs relationnels suivants : =, !=, >, >=, < et <=. Elles supportent également les opérateurs logiques suivants : NOT, AND et OR. Vous pouvez spécifier jusqu'à 10 conditions basées sur les colonnes lors d'une mise à jour conditionnelle.
SingleColumnCondition permet de comparer une constante à une colonne. En revanche, elle ne prend pas en charge la comparaison entre deux colonnes ni entre deux constantes.
Les opérateurs logiques servent à combiner des sous-conditions au sein d'une CompositeCondition. Ces sous-conditions peuvent être de type SingleColumnCondition ou CompositeCondition.
Vous pouvez exploiter la mise à jour conditionnelle pour implémenter un verrouillage optimiste. Lors de la mise à jour d'une ligne, vous devez obtenir la valeur d'une colonne spécifique et définir une condition de mise à jour basée sur cette valeur. Par exemple, si vous souhaitez modifier la valeur de la colonne A d'une ligne pour la passer à 2, vous devez d'abord récupérer sa valeur actuelle (supposons qu'elle soit égale à 1). Ensuite, vous spécifiez que la mise à jour ne doit s'effectuer que si la valeur de la colonne A est bien 1. Si la condition est satisfaite, la mise à jour réussit. En revanche, si un autre client a modifié la ligne entre-temps, la mise à jour échoue.
Paramètres
|
Paramètre |
Description |
|
RowExistenceExpectation |
Condition d'existence de la ligne. Lors de la modification d'une table, Tablestore vérifie cette condition. Si elle n'est pas remplie, la modification échoue et une erreur est signalée. Les conditions d'existence des lignes incluent IGNORE, EXPECT_EXIST et EXPECT_NOT_EXIST. Dans Tablestore, RowExistenceExpectation_IGNORE correspond à IGNORE, RowExistenceExpectation_EXPECT_EXIST correspond à EXPECT_EXIST et RowExistenceExpectation_EXPECT_NOT_EXIST correspond à EXPECT_NOT_EXIST.
|
|
columnName |
Nom de la colonne. |
|
columnValue |
Valeur de comparaison pour la colonne. |
|
comparator |
Opérateur relationnel utilisé pour comparer la valeur de la colonne. Pour connaître les types d'opérateurs relationnels, consultez la rubrique ComparatorType. Les opérateurs relationnels incluent EQUAL (=), NOT_EQUAL (!=), GREATER_THAN (>), GREATER_EQUAL (>=), LESS_THAN (<) et LESS_EQUAL (<=). Dans Tablestore, CT_EQUAL correspond à EQUAL (=), CT_NOT_EQUAL correspond à NOT_EQUAL (!=), CT_GREATER_THAN correspond à GREATER_THAN (>), CT_GREATER_EQUAL correspond à GREATER_EQUAL (>=), CT_LESS_THAN correspond à LESS_THAN (<) et CT_LESS_EQUAL correspond à LESS_EQUAL (<=). |
|
combinator |
Opérateur logique permettant de combiner plusieurs conditions. Pour connaître les types d'opérateurs logiques, consultez la rubrique LogicalOperator. Les opérateurs logiques incluent NOT, AND et OR. Dans Tablestore, LO_NOT correspond à NOT, LO_AND correspond à AND et LO_OR correspond à OR. Le nombre de sous-conditions que vous pouvez spécifier dépend de l'opérateur logique utilisé.
|
|
passIfMissing |
Indique si la vérification conditionnelle est considérée comme réussie lorsqu'une colonne n'existe pas dans une ligne. Ce paramètre est de type booléen. La valeur par défaut est true, ce qui signifie que si la colonne n'existe pas dans la ligne, la vérification de la condition est réussie et la ligne satisfait aux conditions de mise à jour. Si vous définissez le paramètre passIfMissing sur false et que la colonne n'existe pas dans la ligne, la vérification de la condition échoue et la ligne ne satisfait pas aux conditions de mise à jour. |
|
latestVersionOnly |
Indique si seule la dernière version de la valeur est utilisée pour la comparaison lorsqu'une colonne possède plusieurs versions de valeurs. Ce paramètre est de type booléen. La valeur par défaut est true, ce qui signifie que si la colonne comporte plusieurs versions de valeurs, seule la dernière version est utilisée pour la comparaison. Si vous définissez le paramètre latestVersionOnly sur false et que la colonne possède plusieurs versions de valeurs, toutes les versions sont utilisées pour la comparaison. Dans ce cas, si au moins une version satisfait à la condition, la vérification de la condition est réussie et la ligne satisfait aux conditions de mise à jour. |
Exemples
Mettez à jour une ligne en fonction de la clé primaire spécifiée. La mise à jour réussit si la ligne spécifiée existe, si la valeur de la colonne « name » est « john » et si la valeur de la colonne « addr » est « china ». Dans le cas contraire, la mise à jour échoue.
var params = {
tableName: "sampleTable",
primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
updateOfAttributeColumns: [{ 'PUT': [{ 'col1': 'test6' }] }]
};
// Specify the update conditions. Specify that data can be updated only if the following conditions are met: the specified row exists, the value of the "name" column is "john", and the value of the "addr" column is "china".
var condition = new TableStore.CompositeCondition(TableStore.LogicalOperator.AND);
condition.addSubCondition(new TableStore.SingleColumnCondition('name', 'john', TableStore.ComparatorType.EQUAL));
condition.addSubCondition(new TableStore.SingleColumnCondition('addr', 'china', TableStore.ComparatorType.EQUAL));
params.condition = new TableStore.Condition(TableStore.RowExistenceExpectation.EXPECT_EXIST, condition);
client.updateRow(params,
function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});