Neste documento, descrevemos as práticas recomendadas para ajustar consultas do gráfico do Spanner. desempenho do produto, que incluem as seguintes otimizações:
- Evite fazer uma varredura completa na tabela de entrada em busca de nós e bordas.
- Reduzir a quantidade de dados que a consulta precisa ler do armazenamento.
- Reduzir o tamanho dos dados intermediários.
Iniciar nos nós de cardinalidade inferior
Escreva a travessia de caminhos de modo que comece com os nós de menor cardinalidade. 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:
Travessia 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 tamanho variável. O exemplo a seguir mostra a maneira recomendada para encontrar contas que são transferidas transitivamente de uma determinada conta dentro 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 gráfico do Spanner infere os nós de qualificação e os rótulos de borda se rótulos são omitidos. Recomendamos que você especifique rótulos para todos os nós e bordas sempre que possível, porque essa inferência nem sempre é possível fazer com que mais rótulos do que o necessário sejam verificados.
Instrução MATCH única
O exemplo a seguir encontra contas vinculadas por no máximo três transferências da determinada conta:
GRAPH FinGraph
MATCH (src:Account {id: 7})-[:Transfers]->{1,3}(dst:Account)
RETURN dst.id;
Em instruções MATCH
Especificam rótulos em nós e bordas quando se referirem ao mesmo elemento, mas
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.