2 минуты
Лучшая практика субграфа 1 — Улучшение скорости запросов с помощью сокращения (Pruning) субграфа
Краткое содержание
Pruning removes archival entities from the Subgraph’s database up to a given block, and removing unused entities from a Subgraph’s database will improve a Subgraph’s query performance, often dramatically. Using indexerHints is an easy way to prune a Subgraph.
Как сократить субграф с помощью indexerHints
Добавьте раздел с названием ‘indexerHints’ в манифест.
indexerHints имеет три опции prune:
prune: auto: Retains the minimum necessary history as set by the Indexer, optimizing query performance. This is the generally recommended setting and is the default for all Subgraphs created bygraph-cli>= 0.66.0.prune: <Number of blocks to retain>: Устанавливает пользовательский предел на количество исторических блоков, которые следует сохранить.prune: never: без сокращения исторических данных; сохраняет всю историю и является значением по умолчанию, если разделindexerHintsотсутствует.prune: neverследует выбрать, если требуются Запросы на путешествия во времени.
We can add indexerHints to our Subgraphs by updating our subgraph.yaml:
1specVersion: 1.3.02schema:3 file: ./schema.graphql4indexerHints:5 prune: auto6dataSources:7 - kind: ethereum/contract8 name: Contract9 network: mainnetВажные замечания
-
Если требуются Запросы на путешествия во времени и при этом нужно выполнить сокращение данных, сокращение необходимо выполнить точно, чтобы сохранить функциональность запросов на путешествия во времени. По этой причине обычно не рекомендуется использовать
indexerHints: prune: autoс запросами на путешествия во времени. Вместо этого следует выполнить сокращение, используяindexerHints: prune: <Number of blocks to retain>, чтобы выполнить точное сокращение до высоты блока, которое сохранит исторические данные, необходимые для запросов на путешествия во времени, или использоватьprune: never, чтобы сохранить все данные. -
Невозможно выполнить графтинг на высоте блока, который был сокращен. Если графтинг выполняется регулярно и требуется сокращение данных, рекомендуется использовать
indexerHints: prune: <Number of blocks to retain>, чтобы точно сохранить необходимое количество блоков (например, достаточное для шести месяцев).
Заключение
Pruning using indexerHints is a best practice for Subgraph development, offering significant query performance improvements.