Docs
搜索⌘ K
  • 主页
  • 关于 The Graph
  • 支持的网络
  • 协议合约
  • 子图
    • 子流
      • 代币 API
        • AI Suite
          • 索引
            • 资源
              子图 > 最佳实践

              3 分钟

              子图最佳实践1-通过子图修剪提高查询速度

              TLDR

              修剪 会从子图的数据库中删除给定块内的存档实体,从子图数据库中删除未使用的实体将提高子图的查询性能,通常会显著提高。使用indexerHints是修剪子图的一种简单方法。

              如何用indexerHints修剪子图

              在清单中添加一个名为indexerHints的部分。

              indexerHints有三个修剪选项:

              • prune:auto:保留Indexer设置的最小必要历史记录,优化查询性能。这是通常推荐的设置,也是graph-cli>=0.66.0创建的所有子图的默认设置。
              • prune: <Number of blocks to retain>: 对要保留的历史块数量设置自定义限制。
              • prune: never:不修剪历史数据;保留整个历史记录,如果没有indexerHints部分,则为默认设置。prune: never:如果需要Time Travel Queries,则不应选择修剪。

              我们可以通过更新我们的subgraph.yaml将indexerHints添加到我们的子图中:

              1specVersion: 1.3.02schema:3  file: ./schema.graphql4indexerHints:5  prune: auto6dataSources:7  - kind: ethereum/contract8    name: Contract9    network: mainnet

              重要注意事项

              • 如果同样需要Time Travel Queries 和修剪,则必须准确执行修剪以保留Time Travel Query。因此,通常不建议在Time Travel Queries中使用indexerHints: prune:auto。相反,修剪使用indexerHints: prune: <Number of blocks to retain>:修剪:精确修剪到保留Time Travel Queries所需历史数据的块高度,或使用prune: never维护所有数据。

              • 在修剪过的块高度进行嫁接是不可能的。如果嫁接是常规操作,需要修剪,建议使用indexerHints: prune: <Number of blocks to retain>,这将准确地保留一定数量的块(例如足够六个月)。

              结论

              使用indexerHints进行修剪是子图开发的最佳实践,可以显著提高查询性能。

              子图最佳实践1-6

              1. 通过子图修剪提高查询速度

              2. 使用@derivedFrom提高索引和查询响应能力

              3. 通过使用不可变实体和字节作为ID来提高索引和查询性能

              4. 通过避免eth_calls提高索引速度

              5. 通过时间序列和聚合进行简化和优化

              6. 使用嫁接快速部署修补程序

              ⁠在GitHub上编辑⁠

              与Cana CLI的智能合约分析带有@derivedFrom的数组
              在此页面上
              • TLDR
              • 如何用indexerHints修剪子图
              • 重要注意事项
              • 结论
              • 子图最佳实践1-6
              The GraphStatusTestnetBrand AssetsForum安全Privacy PolicyTerms of Service