Práticas recomendadas para o esquema de gráficos

Este documento apresenta as práticas recomendadas para definir o esquema de gráficos e melhorar a performance das consultas.

Definir o escopo das definições de propriedade

As propriedades são pares de chave-valor que fornecem informações adicionais anexadas a nós ou arestas. Recomendamos incluir apenas as propriedades necessárias em nós ou arestas e evitar o uso da sintaxe PROPERTIES ALL COLUMNS ou da sintaxe padrão que anexa todas as colunas das tabelas de nós ou arestas à lista de propriedades. Ter muitas propriedades em nós ou arestas pode causar verificações de coluna desnecessárias em consultas de gráficos, o que prejudica a performance.

Para restringir as propriedades incluídas em uma definição de nó ou aresta, use a palavra-chave PROPERTIES ao definir as propriedades do elemento na instrução CREATE PROPERTY GRAPH.

A definição de tabela de nós a seguir restringe as propriedades da tabela de nós Person a id e name:

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

Definir restrições de chave primária e externa em nós e arestas de grafos

O BigQuery pode usar restrições de chave primária e chave estrangeira nas tabelas de nós e arestas para otimizar as consultas de grafos , reduzindo as verificações de tabelas desnecessárias. No entanto, o BigQuery não aplica restrições de chave primária ou externa em tabelas. Se o aplicativo não puder garantir a integridade referencial ou a exclusividade nas chaves primárias, o uso de chaves primárias ou externas para otimização de consultas poderá levar a resultados incorretos.

O exemplo a seguir define restrições de chave primária e externa nas tabelas de nós Person e Account, e na tabela de arestas 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
);

A seguir