Best Practices für Graphschemata

Dieses Dokument enthält Best Practices zum Definieren Ihres Graphschemas, um die Leistung Ihrer Graphabfragen zu verbessern.

Property-Definitionen eingrenzen

Properties sind Schlüssel/Wert-Paare, die Knoten oder Kanten zusätzliche Informationen liefern. Wir empfehlen, nur die erforderlichen Properties in Knoten oder Kanten einzufügen und die Syntax PROPERTIES ALL COLUMNS oder die Standardsyntax zu vermeiden, mit der alle Spalten aus den Knoten- oder Kantentabellen an die Property-Liste angehängt werden. Viele Properties in Knoten oder Kanten können zu unnötigen Spaltenscans in Graphabfragen führen, was die Leistung beeinträchtigt.

Verwenden Sie das PROPERTIES Schlüsselwort, wenn Sie Element-Properties definieren in Ihrer CREATE PROPERTY GRAPH Anweisung, um die Properties einzuschränken, die Sie in eine Knoten- oder Kantendefinition aufnehmen.

Die folgende Knotentabellendefinition beschränkt die Properties für die Knotentabelle Person auf id und name:

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

Beschränkungen für Primär- und Fremdschlüssel für Graphknoten und -kanten definieren

BigQuery kann Beschränkungen für Primär- und Fremdschlüssel in Ihren Knoten- und Kantentabellen verwenden, um Ihre Graphabfragen zu optimieren, indem unnötige Tabellenscans reduziert werden. BigQuery erzwingt jedoch keine Beschränkungen für Primär- oder Fremdschlüssel für Tabellen. Wenn Ihre Anwendung keine referenzielle Integrität oder Eindeutigkeit für Primärschlüssel garantieren kann, kann die Verwendung von Primär- oder Fremdschlüsseln zur Abfrageoptimierung zu falschen Abfrageergebnissen führen.

Im folgenden Beispiel werden Beschränkungen für Primär- und Fremdschlüssel für die Knoten tabellen Person und Account sowie die Kantentabelle PersonOwnAccount definiert:

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
);

Nächste Schritte