Créer un index secondaire global
Vous pouvez utiliser des vues matérialisées continues comme index secondaires globaux pour les tables.
Avant de lire cette page, familiarisez-vous avec les vues matérialisées continues.
Les données d'une table Bigtable sont généralement indexées par clés de ligne. Toutefois, vous pouvez créer une vue matérialisée continue à partir d'une table source et l'utiliser comme index secondaire global. Cela vous permet de récupérer les mêmes données à l'aide de différents modèles de recherche de requêtes en interrogeant la vue matérialisée.
Un index secondaire global est une vue matérialisée continue qui contient un sous-ensemble de colonnes d'une table source, ainsi qu'une clé de ligne différente de celle de la table source. Ces clés de ligne peuvent être basées sur les transformations suivantes, qui permettent à votre application de récupérer les mêmes données en fonction de différents modèles de recherche de requêtes :
- Attributs de la table source, tels que les qualificatifs de colonne, les valeurs de colonne ou les parties de la clé de ligne source.
- Une reformulation de la clé de ligne.
- Transformation qui combine la clé de ligne avec un attribut.
Bigtable synchronise automatiquement les index secondaires globaux avec la table source de manière cohérente à terme.
Quand utiliser un index secondaire global ?
Les applications ont souvent besoin d'interroger les mêmes données à l'aide de différents attributs ou modèles de recherche. Par exemple, prenons le cas d'une application qui récupère les informations utilisateur à l'aide de l'adresse e-mail ou du numéro de téléphone. Vous pouvez souhaiter le même niveau de performances pour les deux modèles de requête. Si vous définissez l'adresse e-mail comme clé de ligne Bigtable et que vous stockez les numéros de téléphone dans une colonne, les performances de la recherche de numéro de téléphone sont plus lentes, car elles nécessitent une analyse complète de la table.
Pour améliorer les performances des requêtes lors de la recherche par numéro de téléphone, vous pouvez créer une vue matérialisée continue avec une instruction SQL. L'instruction SQL indique à Bigtable comment restructurer vos données avec une clé de ligne différente. Une vue matérialisée continue se comporte comme une table que vous pouvez interroger. Vous utilisez ensuite la vue comme index secondaire global. Il offre à votre application un autre chemin d'accès aux mêmes données. Chaque chemin utilise une clé de ligne différente. Vous pouvez donc choisir un autre chemin pour chaque requête. Pour choisir le meilleur chemin pour votre requête, comprenez la structure de la clé de ligne pour chaque table et les données que chaque table stocke.
L'utilisation d'une vue matérialisée continue comme index secondaire global peut améliorer les performances des requêtes dans les cas d'utilisation suivants :
- Recréer les clés de vos données : si vous devez interroger vos données à l'aide d'une clé différente de celle des clés de ligne de la table source, vous pouvez créer une vue matérialisée continue avec la clé alternative et interroger cette vue.
- Filtrer les données : si vous souhaitez filtrer la table source et n'insérer que des lignes de données spécifiques dans l'index secondaire global, fournissez une clause
WHERE
dans la requête SQL qui définit la vue. - Clés d'attribut : si vous devez interroger vos données en fonction d'un attribut non clé, tel qu'un qualificatif ou une valeur de colonne, vous pouvez l'inclure dans votre clause
ORDER BY
.
À propos des index secondaires globaux
Pour utiliser une vue matérialisée continue dans Bigtable comme index secondaire global, tenez compte des exigences suivantes :
- La clé de ligne d'un nouvel index secondaire global doit inclure la clé de ligne de la table source pour garantir un mappage un-à-un entre les lignes de la table source et les lignes de l'index secondaire global de la vue matérialisée continue.
- L'index secondaire global n'a pas besoin d'avoir le même schéma ni les mêmes attributs que la table source. Dans la partie
SELECT
de la requête SQL, vous devez spécifier les colonnes de la table qui sont nécessaires et les transformations SQL des données que vous souhaitez appliquer. - L'index secondaire global n'a besoin de copier que les données dont vous avez besoin pour le modèle de requête. Il n'est pas nécessaire de fournir toutes les données sources dans le tableau source.
- Dans Bigtable, la clé de ligne que vous choisissez fournit l'ordre de tri par défaut.
Pour interroger des index secondaires globaux, tenez compte des exigences suivantes :
- Chaque colonne de la clause
ORDER BY
doit également figurer dans la clauseSELECT
. - Une fois que vous avez défini l'index secondaire global, votre application doit pouvoir choisir entre interroger la table source ou la vue matérialisée qui représente l'index secondaire global.
- Les applications n'écrivent pas directement dans l'index, qui se synchronise en permanence avec la table source. Écrivez toujours dans la table source.
- L'index secondaire global est cohérent à terme. Les données sont d'abord écrites dans la table source, puis transformées au format de l'index secondaire global.
- Nous vous recommandons de créer un index couvrant. Pour en savoir plus, consultez la section Index de couverture de ce document.
- La clause
ORDER BY
doit contenir la clé de ligne non modifiée de la table source, et toutes les données doivent être triées par ordre croissant. La clé de ligne de la table source est toujours projetée dans la vue matérialisée. Toutefois, elle peut être combinée à d'autres attributs. - Les colonnes de la clause
ORDER BY
font partie de la clé de ligne structurée de l'index secondaire global. Toutes les autres colonnes sélectionnées deviennent des valeurs de colonne non clé dans l'index secondaire global. Si vous convertissez une valeur dans la clauseORDER BY
en un type de données GoogleSQL pour Bigtable spécifique, elle conserve son type de données dans la clé de ligne structurée de l'index secondaire global.
Index de couverture
Un index de couverture inclut toutes les colonnes dont vos requêtes ont besoin. Lorsque vous interrogez un index de couverture, Bigtable peut récupérer toutes les données requises directement à partir de l'index, sans avoir à accéder à la table source. Nous recommandons cette approche pour des performances optimales, car elle minimise le nombre de lectures de disque. Pour créer un index de couverture, assurez-vous que votre instruction SELECT
spécifie toutes les colonnes dont vous avez besoin dans vos requêtes.
Lorsque vous souhaitez créer un index non couvrant, interrogez l'index, puis utilisez les résultats pour rechercher les colonnes supplémentaires dont vous avez besoin dans la table source.
Définir un index secondaire global
Pour créer un index secondaire global, créez une vue matérialisée continue avec une requête SQL qui définit l'index secondaire global.
Dans l'exemple suivant, la requête SQL crée un index secondaire global qui vous permet d'interroger les données d'interaction utilisateur. La clause ORDER BY
définit la clé de ligne structurée de l'index secondaire global, en combinant le numéro de téléphone, l'ID utilisateur et l'adresse e-mail de l'utilisateur. Il attribue également le nom interactions
à la famille de colonnes activity
:
SELECT
user['phone'] AS phone,
CAST(user['id'] AS INT64) AS user_id,
_key AS email,
activity AS interactions
FROM CLICKS_TABLE
ORDER BY 1, 2, 3;
Le tableau suivant explique comment l'index est créé en comparant la vue de la même ligne dans la table source avec l'index secondaire global correspondant :
Ligne de la table source | Ligne d'index secondaire global |
---|---|
Clé de ligne : _key : user1@example.com Attributs : user : {id: "123", phone: "555-123-4567"} activity : {action: "CLICKED_PRODUCT_A"} |
Clé de ligne structurée : phone : 555-123-4567 user_id : 123 email : user1@example.com Attribut : interactions : {action: "CLICKED_PRODUCT_A"} |
Clé de ligne : _key : user2@example.com Attributs : user : {id: "456", phone: "555-987-6543"} activity : {action: "VIEWED_PRODUCT_B"} |
Clé de ligne structurée : phone : 555-987-6543 user_id : 456 email : user2@example.com Attribut : interactions : {action: "VIEWED_PRODUCT_B"} |
Clé de ligne : _key : user3@example.com Attributs : user : {id: "1000", phone: "555-111-2222"} activity : {action: "ADDED_TO_CART_PRODUCT_C"} |
Clé de ligne structurée : phone : 555-111-2222 user_id : 1000 email : user3@example.com Attribut : interactions : {action: "ADDED_TO_CART_PRODUCT_C"} |
Limites
- Pour lire la clé de sortie, qui est la clé d'index secondaire global, vous ne pouvez utiliser que des requêtes SQL.
Étapes suivantes
- Requêtes de vues matérialisées continues
- Créer et gérer des vues matérialisées continues
- Bonnes pratiques relatives à la conception de schémas
- Gérer les schémas de clés de ligne
- Comptage distribué dans Bigtable