Best practice per lo schema del grafico

Questo documento fornisce le best practice per definire lo schema del grafico al fine di migliorare il rendimento delle query del grafico.

Definisci l'ambito delle definizioni delle proprietà

Le proprietà sono coppie chiave-valore che forniscono informazioni aggiuntive associate a nodi o bordi. Ti consigliamo di includere solo le proprietà necessarie nei nodi o nei bordi ed evitare di utilizzare la sintassi PROPERTIES ALL COLUMNS o la sintassi predefinita che associa tutte le colonne delle tabelle dei nodi o dei bordi all'elenco delle proprietà. La presenza di molte proprietà nei nodi o nei bordi potrebbe causare scansioni di colonne non necessarie nelle query del grafico, il che peggiora il rendimento.

Per limitare le proprietà da includere nella definizione di un nodo o di un bordo, utilizza la PROPERTIES parola chiave quando definisci le proprietà degli elementi nell'istruzione CREATE PROPERTY GRAPH statement.

La seguente definizione della tabella dei nodi limita le proprietà della tabella dei nodi Person a id e name:

NODE TABLES (
  graph_db.Person PROPERTIES (id, name)
)

Definisci i vincoli di chiave primaria ed esterna su nodi e archi del grafo

BigQuery può utilizzare vincoli di chiave primaria e chiave esterna sulle tabelle dei nodi e degli archi per ottimizzare le query del grafo riducendo le scansioni di tabelle non necessarie. Tuttavia, BigQuery non applica i vincoli di chiave primaria o esterna sulle tabelle. Se la tua applicazione non può garantire l'integrità referenziale o l'unicità delle chiavi primarie, l'utilizzo di chiavi primarie o esterne per l'ottimizzazione delle query potrebbe portare a risultati di query errati.

L'esempio seguente definisce i vincoli di chiave primaria e chiave esterna sulle tabelle dei nodi Person e Account e sulla tabella degli archi 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
);

Passaggi successivi