Este documento descreve as práticas recomendadas para ajustar o desempenho da consulta do Spanner Graph, incluindo as seguintes otimizações:
- Evite uma verificação completa da tabela de entrada para nós e arestas.
- Reduza a quantidade de dados que a consulta precisa ler do armazenamento.
- Reduzir o tamanho dos dados intermediários.
Começar com nós de cardinalidade mais baixa
Escreva o caminho de acesso para que ele comece com os nós de cardinalidade mais baixos. Essa abordagem mantém o conjunto de resultados intermediários pequeno e acelera a consulta execução.
Por exemplo, as consultas a seguir têm a mesma semântica:
Transposição de borda para frente:
GRAPH FinGraph MATCH (p:Person)-[:Owns]->(a:Account) WHERE p.name = "Alex" AND a.is_blocked RETURN p.id AS person_id, a.id AS account_id;
Travessia de arestas reversa:
GRAPH FinGraph MATCH (a:Account)<-[:Owns]-(p:Person) WHERE p.name = "Alex" AND a.is_blocked RETURN p.id AS person_id, a.id AS account_id;
Supondo que há menos pessoas com o nome Alex
do que
contas bloqueadas, recomendamos que você escreva essa consulta daqui para
travessia de arestas.
Começar pelos nós de cardinalidade mais baixa é especialmente importante para travessia de caminhos de comprimento variável. O exemplo a seguir mostra a maneira recomendada de encontrar contas que são transferidas transitivamente de uma determinada conta em até três saltos.
GRAPH FinGraph
MATCH (:Account {id: 7})-[:Transfers]->{1,3}(a:Account)
RETURN a.id;
Especificar todos os rótulos por padrão
O Spanner Graph infere os nós qualificados e os rótulos de aresta se os rótulos forem omitidos. Recomendamos que você especifique rótulos para todos os nós e arestas sempre que possível, porque essa inferência nem sempre é possível e pode fazer com que mais rótulos do que o necessário sejam digitalizados.
Instrução MATCH única
O exemplo a seguir encontra contas vinculadas por no máximo três transferências da conta específica:
GRAPH FinGraph
MATCH (src:Account {id: 7})-[:Transfers]->{1,3}(dst:Account)
RETURN dst.id;
Em instruções MATCH
Especifique rótulos em nós e arestas quando eles se referem ao mesmo elemento, mas estão
em instruções MATCH
.
O exemplo a seguir mostra essa abordagem recomendada:
GRAPH FinGraph
MATCH (acct:Account {id: 7})-[:Transfers]->{1,3}(other_acct:Account)
RETURN acct, COUNT(DISTINCT other_acct) AS related_accts
GROUP BY acct
NEXT
MATCH (acct:Account)<-[:Owns]-(p:Person)
RETURN p.id AS person, acct.id AS acct, related_accts;
A seguir
- Saiba como consultar gráficos de propriedades no gráfico do Spanner.
- Migrar para o gráfico do Spanner.