Bonnes pratiques pour le schéma de graphe
Ce document présente les bonnes pratiques à adopter pour définir votre schéma de graphe afin d'améliorer les performances de vos requêtes de graphe.
Définir la portée de vos définitions de propriétés
Les propriétés sont des paires clé/valeur qui fournissent des informations supplémentaires associées à des nœuds ou à des arêtes. Nous vous recommandons de n'inclure que les propriétés nécessaires dans les nœuds ou les arêtes, et d'éviter d'utiliser la syntaxe PROPERTIES ALL COLUMNS ou la syntaxe par défaut qui associe toutes les colonnes des tables de nœuds ou d'arêtes à la liste de propriétés. Un grand nombre de propriétés dans les nœuds ou les arêtes peut entraîner des analyses de colonnes inutiles dans les requêtes de graphe, ce qui dégrade les performances.
Pour limiter les propriétés que vous incluez dans une définition de nœud ou d'arête, utilisez
le mot clé PROPERTIES lorsque vous
définissez des propriétés d'élément
dans votre instruction CREATE PROPERTY GRAPH.
La définition de table de nœuds suivante limite les propriétés de la table de nœuds Person à id et name :
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
Définir des contraintes de clé primaire et de clé étrangère sur les nœuds et les arêtes du graphe
BigQuery peut utiliser des contraintes de clé primaire et de clé étrangère sur vos tables de nœuds et d'arêtes pour optimiser vos requêtes de graphe en réduisant les analyses de tables inutiles. Toutefois, BigQuery n'applique pas de contraintes de clé primaire ni de clé étrangère aux tables. Si votre application ne peut pas garantir l'intégrité référentielle ni l'unicité des clés primaires, l'utilisation de clés primaires ou étrangères pour l'optimisation des requêtes peut entraîner des résultats de requête incorrects.
L'exemple suivant définit des contraintes de clé primaire et de clé étrangère sur les tables de nœuds
Person et Account, et sur la table d'arêtes PersonOwnAccount :
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) references graph_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) references graph_db.Account(id) NOT ENFORCED
);
Étape suivante
- Pour en savoir plus sur les graphes, consultez la page Présentation de BigQuery Graph.
- Pour en savoir plus sur la définition d'un schéma, consultez la page Présentation du schéma.
- Pour en savoir plus sur l'écriture de requêtes de graphe, consultez la page Présentation des requêtes de graphe.
- Pour en savoir plus sur la création de graphes pour les mesures et la modélisation des relations plusieurs-à-plusieurs, consultez la page Utiliser des mesures.