Description du problème
Après l'ajout ou la mise à jour de données dans une table, un délai de latence peut survenir. Il est alors impossible d'obtenir les données les plus récentes en exécutant des instructions SQL.
Cause possible
Lorsque vous créez un index de recherche pour une table de données, le moteur SQL sélectionne automatiquement cet index pour interroger les données, à condition que l'index contienne toutes les colonnes de données impliquées dans l'instruction SQL exécutée. Pour plus d'informations, consultez la rubrique Politique de sélection des index.
La synchronisation des données au sein de l'index de recherche peut présenter une certaine latence. Ainsi, même si les données ont été écrites dans la table, les instructions SQL peuvent ne pas renvoyer les informations les plus récentes immédiatement.
Solution
-
Spécifiez explicitement que les index de recherche ne doivent pas être utilisés en priorité
Lors de l'exécution de requêtes SQL, incluez la commande
use index()dans vos instructions pour indiquer explicitement au système de ne pas privilégier les index de recherche.Par exemple, supposons qu'une table de données nommée
exampletablecontient les colonnespk,nameetcontext, et qu'un index de recherche couvrant ces colonnes a été créé. Exécutez l'instruction SQL suivante, qui ne spécifie aucun index, pour interroger les données :SELECT pk,name,context FROM exampletable use index(); -- Specify that search indexes are not preferentially used when you query data from the data table. -
Utilisez des opérations de lecture de données
Pour lire des données en vous basant sur la clé primaire, privilégiez les opérations de lecture directes. Tablestore propose l'opération GetRow pour lire une seule ligne, ainsi que des opérations telles que BatchGetRow et GetRange pour lire plusieurs lignes par lot. Pour plus de détails, reportez-vous à la section Lire des données.
Operation
Description
Scénario
Lit les données d'une seule ligne en fonction de la clé primaire spécifiée.
Cette opération convient aux scénarios où les valeurs de toutes les colonnes de la clé primaire de la ligne à lire sont connues et où le nombre de lignes à récupérer est faible.
Lit plusieurs lignes de données provenant d'une ou plusieurs tables en une seule fois.
Utilisez cette méthode lorsque les valeurs de toutes les colonnes de la clé primaire des lignes cibles sont déterminées, que le volume de données à lire est important ou que vous devez extraire des données depuis plusieurs tables.
Lit les données dont les valeurs de clé primaire se situent dans une plage spécifique.
Cette approche est recommandée lorsque vous pouvez définir une plage de valeurs de clé primaire ou un préfixe de clé primaire pour les lignes à lire.
-
Utilisez un index secondaire
ImportantL'utilisation de la fonctionnalité d'index secondaire entraîne des frais de stockage. De plus, l'écriture de données dans une table consomme des ressources de calcul pour créer l'index de recherche et lire les données.
Vous pouvez utiliser un index secondaire pour interroger des données via des instructions SQL. Procédez comme suit.
-
Créez un index secondaire pour la table de données. Pour plus d'informations, consultez la rubrique Utiliser des index secondaires dans la console Tablestore.
Nous vous recommandons de créer un index secondaire local afin de satisfaire aux exigences de cohérence forte.
-
Exécutez des instructions SQL pour interroger les données via un index secondaire en utilisant l'une des méthodes suivantes :
Prenons l'exemple d'une table nommée
exampletablecontenant les colonnespk,nameetcontext. Un index secondaire nomméexampletable_indexa été créé pour cette table et inclut les colonnes mentionnées.-
Méthode 1 : Spécifiez explicitement un index secondaire pour interroger les données d'une table
Si vous n'indiquez pas explicitement d'index lors de l'exécution d'une requête SQL, Tablestore décide automatiquement d'utiliser ou non un index selon sa politique de sélection.
Exécutez l'instruction SQL suivante, qui spécifie explicitement un index secondaire via la commande
use index():SELECT pk,name,context FROM exampletable use index(exampletable_index); -- Explicitly specify that a secondary index is used to query data from a data table. -
Méthode 2 : Interrogez les données à l'aide d'une table de mappage créée pour un index secondaire
Exécutez l'instruction
CREATE TABLEpour créer une table de mappage nomméeexampletable_indexassociée à l'index secondaire. Pour plus de détails, voir Créer une table de mappage pour une table.-
Exécutez l'instruction SQL
SELECTsuivante pour interroger les données via la table de mappage créée pour l'index secondaire :SELECT pk,name,context FROM exampletable_index; -- Query data by using the mapping table that is created for the secondary index.
-
-