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.

Definire l'ambito delle definizioni delle proprietà

Le proprietà sono coppie chiave-valore che forniscono informazioni aggiuntive associate a nodi o archi. Ti consigliamo di includere solo le proprietà necessarie nei nodi o negli archi ed evitare di utilizzare la sintassi PROPERTIES ALL COLUMNS o la sintassi predefinita che collega tutte le colonne delle tabelle dei nodi o degli archi all'elenco delle proprietà. La presenza di molte proprietà in nodi o archi potrebbe causare scansioni inutili delle colonne nelle query grafiche, il che peggiora le prestazioni.

Per limitare le proprietà che includi in una definizione di nodo o arco, utilizza la parola chiave PROPERTIES quando definisci le proprietà degli elementi nell'istruzione CREATE PROPERTY GRAPH.

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 esterna primaria ed esterna nelle tabelle dei nodi e degli archi per ottimizzare le query del grafo riducendo le scansioni non necessarie delle tabelle. Tuttavia, BigQuery non applica vincoli di chiave primaria o esterna alle 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 errati.

Il seguente esempio definisce i vincoli di chiave primaria e chiave esterna nelle tabelle dei nodi Person e Account e nella 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