Boas Práticas de Subgraph 2 - Melhorar a Indexação e a Capacidade de Resposta de Queries com @derivedFrom
Reading time: 3 min
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.
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.
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:
Podemos fazer um query sobre o
Post
e ver todos os seus comentários.Podemos fazer uma pesquisa reversa e um query sobre qualquer
Comment
, para ver de qual post ele vem.Podemos usar 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: .