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
- Weitere Informationen zu Graphen finden Sie unter Einführung in BigQuery Graph.
- Weitere Informationen zum Definieren eines Schemas finden Sie unter Schemaübersicht.
- Weitere Informationen zum Schreiben von Graphabfragen finden Sie unter Übersicht über Graphabfragen.