HyperLogLog - HyperLogLog

HyperLogLog için bir algoritmadır farklı sayım sorunu, bir içindeki farklı öğelerin sayısını yaklaşık olarak çoklu set.[1] Hesaplanıyor tam kardinalite Bir çoklu kümenin, kardinalite ile orantılı bir bellek miktarını gerektirmesi, çok büyük veri kümeleri için pratik değildir. HyperLogLog algoritması gibi olasılıksal kardinalite tahmin edicileri, kardinalitenin yalnızca bir yaklaşık değerini elde etme pahasına bundan önemli ölçüde daha az bellek kullanır. HyperLogLog algoritması,> 10 kardinalitelerini tahmin edebilir9 1,5 kB bellek kullanarak% 2 tipik doğrulukta (standart hata).[1] HyperLogLog, önceki LogLog algoritmasının bir uzantısıdır,[2] kendisi 1984'ten geliyor Flajolet-Martin algoritması.[3]

Terminoloji

Flajolet'in orijinal makalesinde et al.[1] ve ilgili literatürde farklı sayım sorunu "Kardinalite" terimi, tekrarlanan elemanlara sahip bir veri akışındaki farklı elemanların sayısı anlamında kullanılır. Ancak teorisinde çoklu kümeler terim, bir çoklu kümenin her bir üyesinin çokluklarının toplamını ifade eder. Bu makale, Flajolet'in kaynaklarla tutarlılık tanımını kullanmayı seçmektedir.

Algoritma

HyperLogLog algoritmasının temeli, tekdüze dağıtılmış rastgele sayıların çoklu kümesinin kardinalitesinin, kümedeki her sayının ikili gösteriminde önde gelen sıfırların maksimum sayısı hesaplanarak tahmin edilebileceğinin gözlemidir. Gözlemlenen maksimum sıfır sayısı isen, kümedeki farklı öğelerin sayısı için bir tahmin 2n.[1]

HyperLogLog algoritmasında, bir Özet fonksiyonu orijinal çoklu kümedeki her bir elemana uygulanarak, orijinal çoklu kümeyle aynı kardinaliteye sahip tekdüze dağıtılmış rastgele sayılardan oluşan bir çoklu set elde edilir. Bu rastgele dağıtılmış kümenin kardinalitesi, daha sonra yukarıdaki algoritma kullanılarak tahmin edilebilir.

Yukarıdaki algoritma kullanılarak elde edilen basit kardinalite tahmini, büyük bir dezavantaja sahiptir. varyans. HyperLogLog algoritmasında, varyans, çoklu kümeyi çok sayıda alt kümeye bölerek, bu alt kümelerin her birindeki sayılarda önde gelen sıfırların maksimum sayısı hesaplanarak ve bir harmonik ortalama her alt küme için bu tahminleri, tüm kümenin esas niteliğinin bir tahmininde birleştirmek.[4]

Operasyonlar

HyperLogLog'un üç ana işlemi vardır: Ekle sete yeni bir öğe eklemek için, Miktar setin önemini elde etmek ve birleştirmek iki setin birliğini elde etmek için. Bazı türetilmiş işlemler kullanılarak hesaplanabilir. Dahil etme-dışlama ilkesi gibi kavşağın önemi ya da farkın önemi birleştirme ve sayma işlemlerini birleştiren iki HyperLogLog arasında.

HyperLogLog'un verileri bir dizide saklanır M büyüklükte kayıt adı verilen sayaçların sayısı m başlangıç ​​durumlarında 0 olarak ayarlanmıştır.

Ekle

Ekleme işlemi, giriş verilerinin karmasını hesaplamaktan oluşur v karma işlevli h, ilkini almak b bitler (nerede b dır-dir ) ve değiştirilecek kayıt adresini elde etmek için bunlara 1 ekleyin. Kalan bitlerle hesaplanır en soldaki 1'in konumunu döndürür. Kaydın yeni değeri, kayıt defterinin mevcut değeri ile .

Miktar

Sayma algoritması, armonik ortalamanın hesaplanmasından oluşur. m yazmaçlar ve bir tahmin elde etmek için bir sabit kullanma sayımın:

Sezgi şudur: n bilinmeyen kardinalite olmak M, her alt küme sahip olacak elementler. Sonra yakın olmalı . 2'nin bu büyüklüklere harmonik ortalaması şöyledir: hangisi yakın olmalı . Böylece, olmalı n yaklaşık olarak.

Son olarak, sabit mevcut sistematik çarpımsal önyargıyı düzeltmek için tanıtıldı hash çarpışmaları nedeniyle.

Pratik Hususlar

Sabit hesaplanması kolay değildir ve formülle yaklaşık olarak hesaplanabilir[1]

HyperLogLog tekniği, bir eşiğin altındaki küçük kardinaliteler için önyargılıdır. . Orijinal makale, Doğrusal Sayım olarak bilinen küçük kardinaliteler için farklı bir algoritma kullanmayı önerir.[5] Yukarıda verilen tahminin eşikten düşük olması durumunda alternatif hesaplama kullanılabilir:

  1. İzin Vermek 0'a eşit kayıtların sayısı.
  2. Eğer , standart HyperLogLog tahmin aracını kullanın yukarıda.
  3. Aksi takdirde Doğrusal Sayımı kullanın:

Ek olarak, yazmaçların boyut sınırına yaklaşan çok büyük kardinaliteler için ( 32 bitlik kayıtlar için), kardinalite şu şekilde tahmin edilebilir:

Alt ve üst sınırlar için yukarıdaki düzeltmelerle, hata şu şekilde tahmin edilebilir: .

Birleştirmek

İki HLL için birleştirme işlemi () her kayıt çifti için maksimum değeri elde etmekten oluşur

Karmaşıklık

Karmaşıklığı analiz etmek için veri akışı model[6] bir alan elde etmek için gerekli alanı analiz eden kullanılır. Sabit bir başarı olasılığı ile yaklaşıklık . HLL'nin göreceli hatası ve ihtiyacı var uzay, nerede n set kardinalite ve m kayıt sayısıdır (genellikle bir bayt boyutundan daha küçük).

Ekle işlem, hash işlevinin çıktısının boyutuna bağlıdır. Bu boyut sabit olduğundan, ekleme işleminin çalışma süresinin .

Miktar ve birleştirmek işlemler kayıt sayısına bağlıdır m ve teorik bir maliyeti var . Bazı uygulamalarda (Redis )[7] kayıt sayısı sabittir ve maliyet olarak kabul edilir belgelerde.

HLL ++

HyperLogLog ++ algoritması, bellek gereksinimlerini azaltmak ve bazı kardinalite aralıklarında doğruluğu artırmak için HyperLogLog algoritmasında çeşitli iyileştirmeler önerir:[6]

  • Orijinal kağıtta kullanılan 32 bit yerine 64-bit hash fonksiyonu kullanılır. Bu, büyük kardinaliteler için hash çarpışmalarını azaltır ve geniş aralık düzeltmesini kaldırmaya izin verir.
  • Doğrusal sayımdan HLL sayımına geçerken küçük kardinaliteler için bazı sapmalar bulunur. Sorunu hafifletmek için deneysel bir önyargı düzeltmesi önerilmektedir.
  • Küçük kardinaliteler için hafıza gereksinimlerini azaltmak için kayıtların seyrek bir temsili önerilmiştir, bu daha sonra kardinalite büyürse yoğun bir gösterime dönüştürülebilir.

HLL akışı

Veriler tek bir akışta geldiğinde, Tarihi Ters Olasılık veya martingale tahmin edicisi [8][9]HLL çiziminin doğruluğunu önemli ölçüde artırır ve belirli bir hata düzeyine ulaşmak için% 36 daha az bellek kullanır. Bu kestirimci, tek bir akış üzerindeki herhangi bir yinelenen duyarsız yaklaşık farklı sayım taslağı için kanıtlanabilir şekilde optimaldir.

Tek akış senaryosu aynı zamanda HLL çizim yapısında varyantlara da yol açar. HLL-TailCut +, orijinal HLL çiziminden% 45 daha az bellek kullanır, ancak bunun maliyeti veri ekleme sırasına bağlıdır ve çizimleri birleştiremez.[10]

Referanslar

  1. ^ a b c d e Flajolet, Philippe; Fusy, Éric; Gandouet, Olivier; Meunier, Frédéric (2007). "Hyperloglog: Optimale yakın bir kardinalite tahmin algoritmasının analizi" (PDF). Ayrık Matematik ve Teorik Bilgisayar Bilimleri Bildirileri. Nancy, Fransa. AH: 127–146. CiteSeerX  10.1.1.76.4286. Alındı 2016-12-11.
  2. ^ Durand, M .; Flajolet, P. (2003). "Büyük kardinalitelerin LogLog sayımı." (PDF). G. Di Battista ve U. Zwick (ed.) İçinde. Bilgisayar Bilimlerinde Ders Notları. Algoritmalar Yıllık Avrupa Sempozyumu (ESA03). 2832. Springer. s. 605–617.
  3. ^ Flajolet, Philippe; Martin, G. Nigel (1985). "Veri tabanı uygulamaları için olasılıklı sayma algoritmaları" (PDF). Bilgisayar ve Sistem Bilimleri Dergisi. 31 (2): 182–209. doi:10.1016/0022-0000(85)90041-8.
  4. ^ S Heule, M Nunkesser, Bir Salon (2013). "Uygulamada HyperLogLog: Modern Kardinalite Tahmin Algoritmasının Durumunda Algoritma Mühendisliği" (PDF). saniye 4.CS1 Maint: yazar parametresini kullanır (bağlantı)
  5. ^ Whang, Kyu-Young; Vander-Zanden, Brad T; Taylor, Howard M (1990). Veritabanı uygulamaları için "doğrusal zamanlı olasılıklı sayma algoritması". Veritabanı Sistemlerinde ACM İşlemleri. 15 (2): 208–229. doi:10.1145/78922.78925.
  6. ^ a b "Uygulamada HyperLogLog: Modern Kardinalite Tahmin Algoritmasının Durumunda Algoritma Mühendisliği". Alındı 2014-04-19.
  7. ^ "PFCOUNT - Redis".
  8. ^ Cohen, E. (Mart 2015). "Tüm mesafelerin eskizleri, yeniden gözden geçirildi: Büyük grafik analizi için HIP tahmin edicileri". Bilgi ve Veri Mühendisliğinde IEEE İşlemleri. 27 (9): 2320–2334. arXiv:1306.3284. doi:10.1109 / TKDE.2015.2411606.
  9. ^ Ting, D. (Ağustos 2014). "Farklı öğelerin akışlı yaklaşık sayımı: optimum toplu yöntemlerini geçme". 20. ACM SIGKDD Uluslararası Bilgi Keşfi ve Veri Madenciliği Konferansı Bildirileri (KDD '14): 442–451. doi:10.1145/2623330.2623669. ISBN  9781450329569.
  10. ^ Xiao, Q .; Zhou, Y .; Chen, S. (Mayıs 2017). "Daha az bitle daha iyi: Büyük veri akışlarının kardinalite tahmini performansını iyileştirme". IEEE INFOCOM 2017 - Bilgisayar İletişimi IEEE Konferansı: 1–9. doi:10.1109 / INFOCOM.2017.8057088. ISBN  978-1-5090-5336-0.