Bonnes pratiques pour le schéma de graphique
Ce document présente les bonnes pratiques à suivre pour définir votre schéma de graphique afin d'améliorer les performances de vos requêtes de graphique.
Définir le champ d'application de vos définitions de propriété
Les propriétés sont des paires clé/valeur qui fournissent des informations supplémentaires associées aux nœuds ou aux 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 des propriétés. Si les nœuds ou les arêtes comportent de nombreuses propriétés, cela peut entraîner des analyses de colonnes inutiles dans les requêtes de graphiques, 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 les propriétés des éléments dans votre instruction CREATE PROPERTY GRAPH.
La définition de tableau de nœuds suivante limite les propriétés du tableau 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 graphique
BigQuery peut utiliser des contraintes de clé primaire et étrangère sur vos tables de nœuds et d'arêtes pour optimiser vos requêtes de graphiques en réduisant les analyses de tables inutiles. Toutefois, BigQuery n'applique pas de contraintes de clé primaire ni é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 optimiser les requêtes peut entraîner des résultats 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
);
Étapes suivantes
- Pour en savoir plus sur les graphiques, consultez Présentation de BigQuery Graph.
- Pour en savoir plus sur la définition d'un schéma, consultez Présentation des schémas.
- Pour en savoir plus sur la rédaction de requêtes de graphe, consultez Présentation des requêtes de graphe.