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.