Queries fail to return if sub-relation table has real world amount of data
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- graphql, python, sqlalchemy
- Domaine
- api, database, performance
Piste de recherche
Commencez par graphene/types/resolver.py, en particulier attr_resolver, et reproduisez la requête imbriquée tableA/tableB présentée dans l’issue sur une grande table associée. Suivez comment la résolution de TableA entraîne l’accès à la relation TableB, puis vérifiez que la requête renvoie un résultat dans un délai raisonnable sans charger toute la table associée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
}
}
}
}
}
}
}
- Langage dominant
- Python
- Étoiles
- 984
- Forks
- 224
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de graphql-python/graphene-sqlalchemy
-
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 52/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
graphql-python/graphene-sqlalchemy#422 · 1 commentaire ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
graphql-python/graphene-sqlalchemy#419 · 3 commentaires ·
Toutes les issues de graphql-python/graphene-sqlalchemy
Issues similaires
-
vis.image() reports "Unsupported number of image channels: 224" for an HxWxC imagePeut-être pris @piyush182004 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
fossasia/visdom#1997 · 3 commentaires ·
Les mainteneurs répondent en général sous 6 jours
-
Byse new domainOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Gujal00/ResolveURL#1525 ·
Les mainteneurs répondent en général sous 1 jour
-
Serialisation fails with pydantic 2.14: wrap serialisers pass SerializationInfo as index_keyPeut-être pris @hugohills-regnosys l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
finos/rune-python-runtime#45 ·
-
[Bug]: LangGraph Store sync put bypasses namespace validationPeut-être pris @ktz03 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
volcengine/OpenViking#6050 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
hummingbot/condor#283 ·
Les mainteneurs répondent en général sous 1 jour