5 минуты
Агрегируйте данные с помощью композиции субграфов
Используйте композицию субграфов для ускорения разработки. Создайте базовый субграф с основными данными, а затем разрабатывайте дополнительные субграфы на его основе.
Optimize your Subgraph by merging data from independent, source Subgraphs into a single composable Subgraph to enhance data aggregation.
Введение
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.
Преимущества композиции
Композиция субграфов — это мощная функция для масштабирования, позволяющая вам:
- Повторно использовать, смешивать и комбинировать существующие данные
- Оптимизировать разработку и запросы
- Использовать несколько источников данных (до пяти исходных субграфов)
- Ускорить синхронизацию вашего субграфа
- Обрабатывать ошибки и оптимизировать повторную синхронизацию
Обзор архитектуры
Настройка для этого примера включает два субграфа:
- Исходный субграф: отслеживает данные событий как объекты.
- Зависимый субграф: использует исходный субграф в качестве источника данных.
Вы можете найти их в директориях source
и dependent
.
- Исходный субграф — это базовый субграф для отслеживания событий, который записывает события, генерируемые соответствующими контрактами.
- Зависимый субграф ссылается на источник субграфа как на источник данных, используя объекты из источника в качестве триггеров.
В то время как исходный субграф является стандартным субграфом, зависимый субграф использует функцию композиции субграфов.
Предварительные требования
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
Начнем
The following guide provides examples for defining 3 source Subgraphs to create one powerful composed Subgraph.
Специфические особенности
- Чтобы сделать этот пример простым, все исходные субграфы используют только блок-обработчики. Однако в реальной среде каждый исходный субграф будет использовать данные из разных смарт-контрактов.
- Приведенные ниже примеры показывают, как импортировать и расширять схему другого субграфа для улучшения его функциональности.
- Каждый исходный субграф оптимизирован для работы с конкретным объектом.
- Все перечисленные команды устанавливают необходимые зависимости, генерируют код на основе схемы GraphQL, строят субграф и деплоят его на ваш локальный экземпляр Graph Node.
Шаг 1. Развертывание исходного субграфа для времени блока
Этот первый исходный субграф вычисляет время блока для каждого блока.
- Он импортирует схемы из других субграфов и добавляет объект
block
с полемtimestamp
, представляющим время, когда был добыт каждый блок. - Он слушает события блокчейна, связанные с временем (например, метки времени блоков), и обрабатывает эти данные для обновления объектов субграфа соответствующим образом.
Чтобы развернуть этот субграф локально, выполните следующие команды:
1npm install2npm run codegen3npm run build4npm run create-local5npm run deploy-local
Шаг 2. Развертывание исходного субграфа для стоимости блока
Этот второй исходный субграф индексирует стоимость каждого блока.
Ключевые функции
- Он импортирует схемы из других субграфов и добавляет объект
block
с полями, связанными со стоимостью. - Он отслеживает события блокчейна, связанные с затратами (например, плата за газ, стоимость транзакций), и обрабатывает эти данные для соотвествующего обновления объектов субграфа.
Чтобы развернуть этот субграф локально, выполните те же команды, что и выше.
Шаг 3. Определите размер блока в исходном субграфе
Этот третий исходный субграф индексирует размер каждого блока. Чтобы развернуть этот субграф локально, выполните те же команды, что и выше.
Ключевые функции
- Он импортирует существующие схемы из других субграфов и добавляет объект
block
с полемsize
, представляющим размер каждого блока. - Он слушает события блокчейна, связанные с размерами блоков (например, хранение данных или объем), и обрабатывает эти данные для обновления объектов суграфа соответствующим образом.
Шаг 4. Объединение в субграфе для статистики блоков
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.
Примечание:
- Любое изменение в исходном субграфе, скорее всего, приведет к созданию нового идентификатора развертывания.
- Обязательно обновите идентификатор развертывания в адресе источника данных в манифесте субграфа, чтобы воспользоваться последними изменениями.
- Все исходные субграфы должны быть развернуты до того, как будет развернут композиционный субграф.
Ключевые функции
- Он предоставляет объединенную модель данных, которая охватывает все соответствующие метрики блоков.
- It combines data from 3 source Subgraphs, and provides a comprehensive view of block statistics, enabling more complex queries and analyses.
Основные выводы
- Этот мощный инструмент масштабирует разработку ваших субграфов и позволяет комбинировать несколько субграфов.
- The setup includes the deployment of 3 source Subgraphs and one final deployment of the composed Subgraph.
- Эта функция открывает возможности масштабируемости, упрощая как разработку, так и эффективность обслуживания.
Дополнительные ресурсы
- Check out all the code for this example in this GitHub repo.
- Чтобы добавить продвинутые функции в ваш субграф, ознакомьтесь с продвинутыми функциями субграфа.
- Чтобы узнать больше об агрегациях, ознакомьтесь с разделом Временные ряды и агрегации.