Best Practices für das Diagrammschema

Dieses Dokument enthält Best Practices zum Definieren Ihres Grafschemas, um die Leistung von Grafabfragen zu verbessern.

Property-Definitionen eingrenzen

Eigenschaften sind Schlüssel/Wert-Paare, die zusätzliche Informationen zu Knoten oder Kanten enthalten. Wir empfehlen, nur die erforderlichen Properties in Knoten oder Kanten aufzunehmen und die PROPERTIES ALL COLUMNS-Syntax oder die Standardsyntax zu vermeiden, mit der alle Spalten aus den Knoten- oder Kantentabellen an die Property-Liste angehängt werden. Viele Attribute in Knoten oder Kanten können unnötige Spaltenscans in Diagrammabfragen verursachen, was die Leistung beeinträchtigt.

Wenn Sie die Eigenschaften einschränken möchten, die Sie in eine Knoten- oder Kantendefinition aufnehmen, verwenden Sie das Schlüsselwort PROPERTIES, wenn Sie Elementeigenschaften in Ihrer CREATE PROPERTY GRAPH-Anweisung definieren.

Die folgende Knotentabellendefinition beschränkt die Attribute 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 Knoten und Kanten im Diagramm definieren

BigQuery kann Primär- und Fremdschlüsselbeschränkungen für Ihre Knoten- und Kantentabellen verwenden, um Ihre Diagrammabfragen zu optimieren, indem unnötige Tabellenscans reduziert werden. BigQuery erzwingt jedoch keine Primär- oder Fremdschlüsselbeschränkungen 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 Primär- und Fremdschlüsseleinschränkungen für die Knotentabellen 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