Docs
Arama⌘ K
  • Ana sayfa
  • Graph Hakkında
  • Desteklenen Ağlar
  • Protocol Contracts
  • Subgraph'ler
    • Substream'ler
      • Token API
        • AI Suite
          • Endeksleme
            • Kaynaklar
              Subgraph'ler > En İyi Uygulamalar

              4 dakika

              Subgraph Örnek Uygulama 5 - Zaman serileri ve Toplulaştırma ile Basitleştirip Optimize Edin

              Özet

              Leveraging the new time-series and aggregations feature in Subgraphs can significantly enhance both indexing speed and query performance.

              Genel Bakış

              Zaman serisi ve toplulaştırmalar, toplulaştırma hesaplamalarını veritabanına aktararak ve eşleme kodunu basitleştirerek, veri işleme yükünü azaltır ve sorguları hızlandırır. Bu yaklaşım, özellikle büyük hacimli zamana dayalı verilerle başa çıkarken etkilidir.

              Zaman Serisi ve Toplulaştırmaların Faydaları

              1. İyileştirilmiş Endeksleme Süresi
              • Yüklenmesi Gereken Daha Az Veri: Ham veri noktaları değiştirilemez zaman serisi varlıkları olarak depolandığı için, eşlemeler daha az veri işler.
              • Veritabanı Tarafından Yönetilen Toplulaştırmalar: Toplulaştırmalar otomatik olarak veritabanı tarafından hesaplanır, bu da eşlemeler üzerindeki yükü azaltır.
              1. Basitleştirilmiş Eşleme Kodu
              • Manuel Hesaplama Olmaması: Geliştiriciler artık eşlemelerde karmaşık toplulaştırma mantığı yazmak zorunda değildir.
              • Azaltılmış Karmaşıklık: Kod bakımını basitleştirir ve hata olasılığını en aza indirir.
              1. Çok Daha Hızlı Sorgular
              • Değişmez Veri: Tüm zaman serisi verileri değişmezdir. Bu da verimli depolama ve geri çağırmayı mümkün kılar.
              • Verimli Veri Ayrımı: Toplulaştırmalar, ham zaman serisi verilerinden ayrı olarak depolanır, bu da sorguların önemli ölçüde —genellikle birkaç büyüklük derecesi— daha az veri işlemesine olanak tanır.

              Önemli Hususlar

              • Değişmez Veri: Zaman serisi verileri yazıldıktan sonra değiştirilemez, bu da veri bütünlüğünü sağlar ve endekslemeyi basitleştirir.
              • Otomatik Kimlık Numarası ve Zaman Damgası Yönetimi: id (kimlik numarası) ve timestamp (zaman damgası) alanları graph-node tarafından otomatik olarak yönetilir, potansiyel hataları azaltır.
              • Verimli Veri Depolama: Ham verileri toplulaştırmalardan ayırarak, depolama optimize edilir ve sorgular daha hızlı çalışır.

              Zaman Serisi ve Toplulaştırmaları Nasıl Uygulanır

              Prerequisites

              You need spec version 1.1.0 for this feature.

              Zaman Serisi Varlıklarının Tanımlanması

              Bir zaman serisi varlığı, zaman içinde toplanan ham veri noktalarını temsil eder. @entity(timeseries: true) notasyonu ile tanımlanır. Ana gereksinimler:

              • Değişmezlik: Zaman serisi varlıkları her zaman değişmezdir.
              • Zorunlu Alanlar:
                • id: Int8! türünde olmalı ve otomatik olarak artmalıdır.
                • timestamp: Timestamp! türünde olmalı ve blok zaman damgasına otomatik olarak ayarlanmalıdır.

              Örnek:

              1type Data @entity(timeseries: true) {2  id: Int8!3  timestamp: Timestamp!4  amount: BigDecimal!5}

              Toplulaştırma Varlıklarını Tanımlama

              Bir toplulaştırma varlığı, bir zaman serisi kaynağından toplulaştırılmış değerleri hesaplar. @aggregation ile tanımlanır. Ana bileşenler:

              • Açıklama Argümanları:
                • intervals: Zaman aralıklarını belirtir (örneğin, ["hour", "day"]).

              Örnek:

              1type Stats @aggregation(intervals: ["hour", "day"], source: "Data") {2  id: Int8!3  timestamp: Timestamp!4  sum: BigDecimal! @aggregate(fn: "sum", arg: "amount")5}

              In this example, Stats aggregates the amount field from Data over hourly and daily intervals, computing the sum.

              Toplulaştırılmış Verileri Sorgulama

              Toplulaştırmalar, boyut ve zaman aralıklarına göre filtreleme ve geri alma imkanı sağlayan sorgu alanları aracılığıyla dışarı sunulur.

              Örnek:

              1{2  tokenStats(3    interval: "hour"4    where: { token: "0x1234567890abcdef", timestamp_gte: "1704164640000000", timestamp_lt: "1704251040000000" }5  ) {6    id7    timestamp8    token {9      id10    }11    totalVolume12    priceUSD13    count14  }15}

              Toplulaştırmalarda Boyutların Kullanımı

              Boyutlar, veri noktalarını gruplamak için kullanılan toplulaştırılmamış alanlardır. Belirli kriterlere dayalı toplulaştırmalar sağlarlar. Mesela, bir finansal uygulamadaki belirli bir token’a ait toplulaştırmaları elde etmek için kullanılırlar.

              Örnek:

              Zaman Serisi Varlığı

              1type TokenData @entity(timeseries: true) {2  id: Int8!3  timestamp: Timestamp!4  token: Token!5  amount: BigDecimal!6  priceUSD: BigDecimal!7}

              Boyut Kullanan Toplulaştırma Varlığı

              1type TokenStats @aggregation(intervals: ["hour", "day"], source: "TokenData") {2  id: Int8!3  timestamp: Timestamp!4  token: Token!5  totalVolume: BigDecimal! @aggregate(fn: "sum", arg: "amount")6  priceUSD: BigDecimal! @aggregate(fn: "last", arg: "priceUSD")7  count: Int8! @aggregate(fn: "count", cumulative: true)8}
              • Boyut Alanı: Token, verileri gruplar. Bu nedenle toplulaştırmalar her token için hesaplanır.
              • Toplulaştırmalar:
                • totalVolume: Miktarın (amount alanının) toplamı.
                • priceUSD: Kayıtlı son priceUSD.
                • count: Kayıtların kümülatif sayısı.

              Toplulaştırma Fonksiyonları ve İfadeleri

              Desteklenen toplulaştırma fonksiyonları:

              • sum (toplama)
              • count (sayma)
              • min (asgari)
              • max (azami)
              • first (ilk)
              • last (son)

              @aggregate içindeki arg (argüman) şunlar olabilir

              • Zaman serisi varlığındaki bir alan adı.
              • Alanlar ve sabit değerler kullanılarak oluşturulan bir ifade.

              Toplulaştırma İfadeleri Örnekleri

              • Token Değerini Topla: @aggregate(fn: “sum”, arg: “priceUSD _ amount”)
              • Azami Pozitif Tutar: @aggregate(fn: “max”, arg: “greatest(amount0, amount1, 0)”)
              • Koşullu Toplama: @aggregate(fn: “sum”, arg: “case when amount0 > amount1 then amount0 else 0 end”)

              Desteklenen operatörler ve fonksiyonlar arasında temel aritmetik (+, -, _, /) operatörleri, karşılaştırma operatörleri, mantıksal operatörler (and, or, not) ve SQL fonksiyonları (örneğin greatest, least, coalesce) bulunur.

              Sorgu Parametreleri

              • interval: Zaman aralığını belirtir (ör., “hour”).
              • where: Boyutlara ve zaman damgası aralıklarına göre filtreler.
              • timestamp_gte / timestamp_lt: Başlangıç ve bitiş zamanları için filtreler (dönem başlangıcından itibaren geçen mikrosaniye cinsinden).

              Notlar

              • Sıralama: Sonuçlar otomatik olarak zaman damgası ve id’ye göre azalan sırada sıralanır.
              • Mevcut Veriler: Opsiyonel mevcut argüman, mevcut, kısmen doldurulmuş aralığı içerebilir.

              Sonuç

              Implementing timeseries and aggregations in Subgraphs is a best practice for projects dealing with time-based data. This approach:

              • Performansı Artırır: Veri işleme yükünü azaltarak endeksleme ve sorgulamayı hızlandırır.
              • Geliştirmeyi Basitleştirir: Eşlemelerde manuel toplulaştırma mantığı ihtiyacını ortadan kaldırır.
              • Verimli Ölçeklenir: Hız veya yanıt verme süresinden ödün vermeden büyük hacimli verileri işler.

              By adopting this pattern, developers can build more efficient and scalable Subgraphs, providing faster and more reliable data access to end-users. To learn more about implementing timeseries and aggregations, refer to the Timeseries and Aggregations Readme⁠ and consider experimenting with this feature in your Subgraphs.

              Subgraph Örnek Uygulamalar 1-6

              1. Improve Query Speed with Subgraph Pruning

              2. Improve Indexing and Query Responsiveness by Using @derivedFrom

              3. Improve Indexing and Query Performance by Using Immutable Entities and Bytes as IDs

              4. Improve Indexing Speed by Avoiding eth_calls

              5. Simplify and Optimize with Timeseries and Aggregations

              6. Use Grafting for Quick Hotfix Deployment

              ⁠GitHub'da Düzenle⁠

              Avoiding eth_callsGrafting and Hotfixing
              Bu sayfada
              • Özet
              • Genel Bakış
              • Zaman Serisi ve Toplulaştırmaların Faydaları
              • Önemli Hususlar
              • Zaman Serisi ve Toplulaştırmaları Nasıl Uygulanır
              • Prerequisites
              • Zaman Serisi Varlıklarının Tanımlanması
              • Toplulaştırma Varlıklarını Tanımlama
              • Toplulaştırılmış Verileri Sorgulama
              • Toplulaştırmalarda Boyutların Kullanımı
              • Zaman Serisi Varlığı
              • Boyut Kullanan Toplulaştırma Varlığı
              • Toplulaştırma Fonksiyonları ve İfadeleri
              • @aggregate içindeki arg (argüman) şunlar olabilir
              • Toplulaştırma İfadeleri Örnekleri
              • Sorgu Parametreleri
              • Notlar
              • Sonuç
              • Subgraph Örnek Uygulamalar 1-6
              The GraphStatusTestnetBrand AssetsForumSecurityPrivacy PolicyTerms of Service