5 minutes
Agrégation de données par composition de subgraphs
Tirez parti de la composition de subgraphs pour accélérer le temps de développement. Créez un subgraph de base avec les données essentielles, puis construisez d’autres subgraphs par-dessus.
Optimize your Subgraph by merging data from independent, source Subgraphs into a single composable Subgraph to enhance data aggregation.
Présentation
Composable Subgraphs enable you to combine multiple Subgraphs’ data sources into a new Subgraph, facilitating faster and more flexible Subgraph development. Subgraph composition empowers you to create and maintain smaller, focused Subgraphs that collectively form a larger, interconnected dataset.
Avantages de la composition
La composition de subgraphs est une fonctionnalité puissante pour la mise à l’échelle, qui vous permet de.. :
- Réutiliser, mélanger et combiner les données existantes
- Rationaliser le développement et les requêtes
- Utiliser plusieurs sources de données (jusqu’à cinq subgraphs sources)
- Accélérer la vitesse de synchronisation de votre subgraph
- Gérer les erreurs et optimiser la resynchronisation
Overview de l’architecture
La configuration de cet exemple implique deux subgraphs :
- Subgraph source : Suit les données d’événements en tant qu’entités.
- Subgraph dépendant : Utilise le subgraph source comme source de données.
Vous pouvez les trouver dans les répertoires source
et dependent
.
- Le Subgraph Source est un subgraph de base de suivi des événements qui enregistre les événements émis par les contrats concernés.
- Le subgraph dépendant fait référence au subgraph source en tant que source de données, en utilisant les entités de la source comme déclencheurs.
Alors que le subgraph source est un subgraph standard, le subgraph dépendant utilise la fonction de composition de subgraphs.
Prérequis
Source Subgraphs
- All Subgraphs need to be published with a specVersion 1.3.0 or later (Use the latest graph-cli version to be able to deploy composable Subgraphs)
- See notes here: https://github.com/graphprotocol/graph-node/releases/tag/v0.37.0
- Immutable entities only: All Subgraphs must have immutable entities when the Subgraph is deployed
- Pruning can be used in the source Subgraphs, but only entities that are immutable can be composed on top of
- Source Subgraphs cannot use grafting on top of existing entities
- Aggregated entities can be used in composition, but entities that are composed from them cannot performed additional aggregations directly
Composed Subgraphs
- You can only compose up to a maximum of 5 source Subgraphs
- Composed Subgraphs can only use datasources from the same chain
- Nested composition is not yet supported: Composing on top of another composed Subgraph isn’t allowed at this time
- Aggregated entities can be used in composition, but the composed entities on them cannot also use aggregations directly
- Developers cannot compose an onchain datasource with a Subgraph datasource (i.e. you can’t do normal event handlers and call handlers and block handlers in a composed Subgraph)
Additionally, you can explore the example-composable-subgraph repository for a working implementation of composable Subgraphs
Commencer
The following guide provides examples for defining 3 source Subgraphs to create one powerful composed Subgraph.
Spécificités
- Pour que cet exemple reste simple, tous les subgraphs sources n’utilisent que des gestionnaires de blocs. Cependant, dans un environnement réel, chaque subgraph source utilisera des données provenant de différents contrats intelligents.
- Les exemples ci-dessous montrent comment importer et étendre le schéma d’un autre subgraph afin d’en améliorer les fonctionnalités.
- Chaque subgraphe source est optimisé avec une entité spécifique.
- Toutes les commandes listées installent les dépendances nécessaires, génèrent du code basé sur le schéma GraphQL, construisent le subgraph et le déploient sur votre instance locale de Graph Node.
Étape 1. Déployer le subgraph source de temps de bloc
Ce premier subgraph source calcule le temps de bloc pour chaque bloc.
- Il importe des schémas d’autres subgraphs et ajoute une entité
block
avec un champtimestamp
, représentant l’heure à laquelle chaque bloc a été extrait. - Il écoute les événements de la blockchain liés au temps (par exemple, les horodatages des blocs) et traite ces données pour mettre à jour les entités du subgraph en conséquence.
Pour déployer ce subgraph localement, exécutez les commandes suivantes :
1npm install2npm run codegen3npm run build4npm run create-local5npm run deploy-local
Étape 2. Déployer le subgraph de la source de coût du bloc
Ce deuxième subgraph source indexe le coût de chaque bloc.
Principales fonctions
- Il importe des schémas d’autres subgraphs et ajoute une entité
block
avec des champs liés aux coûts. - Il écoute les événements de la blockchain liés aux coûts (par exemple, les frais de gaz, les coûts de transaction) et traite ces données pour mettre à jour les entités du subgraph en conséquence.
Pour déployer ce subgraph localement, exécutez les mêmes commandes que ci-dessus.
Étape 3. Définition de la taille des blocs dans le subgraph source
Ce troisième subgraph source indexe la taille de chaque bloc. Pour déployer ce subgraph localement, exécutez les mêmes commandes que ci-dessus.
Principales fonctions
- Il importe les schémas existants des autres subgraphs et ajoute une entité
block
avec un champsize
représentant la taille de chaque bloc. - Il écoute les événements de la blockchain liés à la taille des blocs (par exemple, le stockage ou le volume) et traite ces données pour mettre à jour les entités du subgraph en conséquence.
Étape 4. Combinaison en Subgraph Block Stats
This composed Subgraph combines and aggregates the information from the source Subgraphs above, providing a unified view of block statistics. To deploy this Subgraph locally, run the same commands as above.
Note:
- Toute modification apportée à un subgraph source est susceptible de générer un nouvel ID de déploiement.
- Veillez à mettre à jour l’ID de déploiement dans l’adresse de la source de données du manifeste Subgraph pour bénéficier des dernières modifications.
- Tous les subgraphs sources doivent être déployés avant le déploiement du subgraph composé.
Principales fonctions
- Il fournit un modèle de données consolidé qui englobe toutes les mesures de bloc pertinentes.
- It combines data from 3 source Subgraphs, and provides a comprehensive view of block statistics, enabling more complex queries and analyses.
Principaux points à retenir
- Cet outil puissant vous permettra de développer vos subgraphs et de combiner plusieurs subgraphs.
- The setup includes the deployment of 3 source Subgraphs and one final deployment of the composed Subgraph.
- Cette caractéristique permet de débloquer l’évolutivité, simplifiant ainsi l’efficacité du développement et de la maintenance.
Ressources supplémentaires
- Check out all the code for this example in this GitHub repo.
- Pour ajouter des fonctionnalités avancées à votre subgraph, consultez Fonctionnalités avancées du subgraph.
- Pour en savoir plus sur les agrégations, consultez Séries chronologiques et agrégations.