Cookbook > Subgraph Best Practice 2: Manage Arrays with @derivedFrom

Boas Práticas de Subgraph 2 - Melhorar a Indexação e a Capacidade de Resposta de Queries com @derivedFrom

Reading time: 3 min

Resumo

Link para esta seção

O desempenho de um subgraph pode ser muito atrasado por arranjos no seu schema, já que esses podem crescer além dos milhares de entradas. Se possível, a diretiva @derivedFrom deve ser usada ao usar arranjos, já que ela impede a formação de grandes arranjos, simplifica handlers e reduz o tamanho de entidades individuais, o que melhora muito a velocidade da indexação e o desempenho dos queries.

Como Usar a Diretiva @derivedFrom

Link para esta seção

Você só precisa adicionar uma diretiva @derivedFrom após o seu arranjo no seu schema. Assim:

comments: [Comment!]! @derivedFrom(field: "post")

o @derivedFrom cria relações eficientes de um-para-muitos, o que permite que uma entidade se associe dinamicamente com muitas entidades relacionadas com base em um campo na entidade relacionada. Esta abordagem faz com que ambos os lados do relacionamento não precisem armazenar dados duplicados e aumenta a eficácia do subgraph.

Exemplo de Caso de Uso para @derivedFrom

Link para esta seção

Um exemplo de um arranjo que cresce dinamicamente é uma plataforma de blogs onde um "Post" pode ter vários "Comments" (comentários).

Vamos começar com as nossas duas entidades, Post e Comment

Sem otimização, seria possível implementá-la assim com um arranjo:

type Post @entity {
id: Bytes!
title: String!
content: String!
comments: [Comment!]!
}
type Comment @entity {
id: Bytes!
content: String!
}

Arranjos como este, efetivamente, armazenarão dados extras de Comments no lado do Post no relacionamento.

Aqui está uma versão otimizada que usa o @derivedFrom:

type Post @entity {
id: Bytes!
title: String!
content: String!
comments: [Comment!]! @derivedFrom(field: "post")
}
type Comment @entity {
id: Bytes!
content: String!
post: Post!
}

Ao adicionar a diretiva @derivedFrom, este schema só armazenará os "Comentários" no lado "Comments" do relacionamento, e não no lado "Post". Os arranjos são armazenados em fileiras individuais, o que os faz crescer significativamente. Se o seu crescimento não for contido, isto pode permitir que o tamanho fique excessivamente grande.

Isto não só aumenta a eficiência do nosso subgraph, mas também desbloqueia três características:

  1. Podemos fazer um query sobre o Post e ver todos os seus comentários.

  2. Podemos fazer uma pesquisa reversa e um query sobre qualquer Comment, para ver de qual post ele vem.

  3. Podemos usar Carregadores de Campos Derivados para desbloquear a habilidade de acessar e manipular diretamente dados de relacionamentos virtuais nos nossos mapeamentos de subgraph.

Adotar a diretiva @derivedFrom nos subgraphs lida eficientemente com arranjos que crescem dinamicamente, o que melhora a performance da indexação e o retiro de dados.

Para aprender mais estratégias detalhadas sobre evitar arranjos grandes, leia este blog por Kevin Jones: Melhores Práticas no Desenvolvimento de Subgraphs: Como Evitar Grandes Arranjos.

Editar página

Anterior
Subgraph Best Practice 1: Pruning with indexerHints
Próximo
Subgraph Best Practice 3: Using Immutable Entities and Bytes as IDs
Editar página