Queries fail to return if sub-relation table has real world amount of data
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- graphql, python, sqlalchemy
- Bereich
- api, database, performance
Rechercherichtung
Beginne mit graphene/types/resolver.py, insbesondere mit attr_resolver, und reproduziere die im Issue gezeigte verschachtelte tableA/tableB-Abfrage anhand einer großen verwandten Tabelle. Verfolge, wie das Auflösen von TableA dazu führt, dass auf die TableB-Beziehung zugegriffen wird, und überprüfe anschließend, dass die Abfrage innerhalb einer angemessenen Zeit zurückkehrt, ohne die gesamte verwandte Tabelle zu laden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
In a one to many if you have a table setup as follows (a very simple one to many relationship), the GraphQL query will timeout if tableB has any real world amount of data.
TableB has about 400k records in total. Graphene-sqlalchemy will query for TableA, and then SQLAlchemy itself will try resolve the relationship of the table when graphene calls for it. When this happens the query is sent to the DB but it won't return in enough time (its pulling back ~1GB of data as it tries to pull every single field on the sub table).
I've narrowed it down to graphene/types/resolver.py
def attr_resolver(attname, default_value, root, info, **args):
return getattr(root, attname, default_value)
Graphene captures the TableA information, and then when TableB get resolved, the root parameter is populated with the "TableA" model, which SQLAlchemy then tries to completely resolve 400k records, query times out and then fails.
query{
tableA(first: 10){
edges{
node{
tableB(first: 5){
edges{
node{
fieldA
}
}
}
}
}
}
}
- Vorherrschende Sprache
- Python
- Sterne
- 984
- Forks
- 224
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus graphql-python/graphene-sqlalchemy
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 52/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
graphql-python/graphene-sqlalchemy#422 · 1 Kommentar ·
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
graphql-python/graphene-sqlalchemy#419 · 3 Kommentare ·
Alle Issues in graphql-python/graphene-sqlalchemy
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
vllm-project/vllm#61131 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
kubernetes-client/python#2735 ·
Maintainer antworten meist innerhalb von 1 Tag
-
desktop help wanted test
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
docs pydanty:is-working
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
pydantic/pydantic-ai#10113 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Tutorial unit test leaks sample data into tutorial doctestEvtl. vergeben @Gambit-Checkmate hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100