Feature: `.findMany` & `.saveMany`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- rust, typescript
- Área
- api, backend-api-design, databases
Línea de trabajo
Comienza con la API de entidades inyectadas descrita en la propuesta y compara el comportamiento previsto de findMany y saveMany con la referencia de findMany de Prisma V2. Define la semántica de lectura masiva, ordenación y escritura; después, identifica los puntos de entrada relevantes de implementación y pruebas; se considera completado cuando los subgrafos pueden reemplazar las cargas y guardados repetidos de entidades por estas operaciones.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Proposal
The injected entity API should also expose bulk operations like findMany, saveMany. This seems like a simple addition to me that would enable better bulk operations and indexing-time aggregations like storing a rank, percentiles, etc.
By the example of the Eden Network Subgraph, that would enable them to save a lot of database reads and writes:
Instead of (simplified ranking logic from them):
let stakers = network.stakers.map<Staker | null>(id => Staker.load(id)).filter(staker => staker != null);
let sortedStakers = stakers((a, b) =>
b.staked.div(WEI).minus(a.staked.div(WEI)).toI32()
);
sortedStakers.forEach((staker, index) => {
staker.rank = BigInt.fromI32(index);
staker.save();
});
They could do something like:
let stakers = Stakers.findMany({ orderBy: { staked: 'desc' } });
let rankedStakers = sortedStakers.map((staker, index) => {
staker.rank = BigInt.fromI32(index);
return staker;
});
Stakers.saveMany(rankedStakers);
Currently, they have ~7000 stakers. That addition would save them 14k-2 database operations.
Current behaviour
In order to update multiple entities in one mapping, subgraph developers are forced to store the ids of all entities that they would like to update in an array on a global singleton entity. That leads to unnecessary big arrays in the database and unnecessary amount of reads and writes.
Affected subgraphs
- Eden Network
- Superfluid
- ...
Inspiration
I personally think the Prisma V2 ORM is pretty well designed: https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#findmany
- Lenguaje dominante
- Rust
- Estrellas
- 3.2k
- Forks
- 1.1k
- Merge medio
- 4 d 1 h
- PR fusionados (30 d)
- 1
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de graphprotocol/graph-node
-
current: include emits an all-null bucket for dimensionless aggregations, nulling the whole response Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
graphprotocol/graph-node#6719 ·
-
RUSTSEC-2026-0194: Quadratic run time when checking a start tag for duplicate attribute names Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
graphprotocol/graph-node#6673 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
graphprotocol/graph-node#6650 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
graphprotocol/graph-node#6722 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
graphprotocol/graph-node#6721 ·
Todos los issues de graphprotocol/graph-node
Issues similares
-
risk:low runtime status:in-progress type:test
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
bevyengine/bevy#25861 ·