24 puan yazan xguru 2021-09-28 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Go ile yazılmış olsa da neredeyse dilden bağımsız

  • Zaman serisi verisi, zaman damgası eklenmiş birden çok değerden oluşan bir koleksiyondur. Her öğe bir veri noktasıdır

→ Miktarı çok fazladır. Anlamlı olabilmesi için de çok olması gerekir. Saniyede milyonlarca kez yakalanan durumlar da yaygındır

→ Sadece ekleme (append-only), zamana göre sıralama, yakın tarihli veriye öncelik

→ Belirli zaman birimlerinde toplu okuma

→ Yüksek kardinalite (küme birimi çok büyüktür)

→ Çoğunlukla yakın tarihli veriler okunup kullanılır

  • Zaman serisi verilerinde genellikle yazma işlemlerinin yoğun olmasını yansıtacak şekilde, TStorage DB engine kütüphanesi Go diliyle geliştirildi

  • Veri modeli

→ Doğrusal veri modeli

→ Veri noktalarını zaman birimine göre bölümlendirme

→ Her bölüm, o zaman aralığındaki tüm verileri içeren ayrı ve bağımsız bir DB gibi çalışır

→ Yalnızca head ve bir sonraki bölümün heap üzerinde tutulan bellek bölümü olacak şekilde değiştirilebilir

→ Veri kaybını önlemek için yazmadan önce WAL'e (Write Ahead Log) yazılır

→ Daha eski bölüm verileri diskte tek bir dosya olarak saklanır. Disk bölümleri salt okunurdur

  • Bellek bölümü

→ Veri noktalarının listesi heap üzerinde bir dizi olarak gösterilir (Go'nun slice yapısına benzer)

→ Gecikme ve senkronizasyon nedeniyle out-of-order durumu sık görülür. Aynı bölüm içindeyse tamponlama ile kaydederken yeniden sıralanabilir; farklı bölümlerdeyse head olmayan önceki bölümün sonuna eklenerek mümkün olur

→ WAL'e fiilen yazılanla tamamen aynı veri saklanır; böylece hata durumunda da kurtarma mümkün olur

  • Disk bölümü

→ Her bölüm için tek bir dizinde meta veriler ve sıkıştırılmış gerçek veri saklanır (Prometheus V3 Storage'ın küçültülmüş bir sürümü)

→ Memory-Mapped veri biçimi (çekirdek tarafından mmap ile önbelleğe alınabilir)

→ Meta veriler JSON biçiminde indeks oluşturur

  • Zaman damgası ve değer demetlerinden oluşan veri kodlamasında, Facebook'un Gorilla makalesinde önerilen kodlama yöntemi kullanılır

→ Zaman damgası ve değerler farklı yöntemlerle kodlanır

timestamp, unsigned 64-bit integer değerdir ve Delta-of-delta kodlaması kullanılır

→ Delta kodlama: Yalnızca önceki değer ile mevcut değer arasındaki farkı kaydetme yöntemi

→ Delta-of-Delta kodlama: Genellikle sabit zaman aralıklarında oluştuğu için yalnızca deltaların deltasını kaydeder

→ Değişken uzunlukta kodlandığı için Delta-of-Delta en az alanı kullanır

values, signed 64-bit floating-point değerdir ve XOR kodlaması kullanılır

→ İlk değer doğrudan saklanır

→ Sonraki değer XOR'lanır ve sonuç 0 ise önceki değerle aynı olduğu için yalnızca tek bir 0 biti saklanır

→ 0 değilse diğer bitlere göre hesaplanır (Meaningful Bit)

→ Baştaki/sondaki 0'lar hesaplanır; 0 sayısı aynıysa 0'lar ve anlamlı bitler saklanır, farklıysa baştaki sıfır sayısı, Meaningful Bit sayısı ve bitlerin kendisi saklanır

Henüz yorum yok.

Henüz yorum yok.