Not içeriği yükleniyor...
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
HyperLogLog ile cardinality estimation, approximate counting ve memory-efficient analytics. PFADD, PFCOUNT komutları ile unique count approximation.
Özellik | Açıklama | Örnek |
---|---|---|
Probabilistic counting | Approximate unique count hesaplama | %1.04 standard error rate |
Fixed memory usage | Element sayısından bağımsız sabit 12KB memory | 1M element = 1B element = 12KB |
Massive scalability | Milyarlarca elementi tracking edebilir | 2^64 theoretical limit |
Merge operations | Multiple HLL'leri birleştirme | PFMERGE result hll1 hll2 |
High performance | Add/count operations O(1) average time | PFADD visitors user123 |
Space efficiency | Traditional sets'e göre %99+ memory tasarrufu | Set: 1M*8B=8MB vs HLL: 12KB |
Union functionality | Set union without storing actual elements | Combined unique counts |
Distributed analytics | Multi-server cardinality aggregation | Cross-datacenter unique counting |
Kullanım Alanı | Açıklama | Redis Komutu Örneği |
---|---|---|
Unique visitor counting | Web sitesi benzersiz ziyaretçi sayımı | PFADD visitors:daily ip_address |
Distinct user tracking | Platform üzerinde benzersiz kullanıcı sayımı | PFADD users:monthly user_123 |
Page view analytics | Benzersiz sayfa görüntüleme analizi | PFADD pages:homepage session_id |
API endpoint monitoring | Distinct API call tracking | PFADD api:users:endpoint client_id |
Search query analytics | Benzersiz arama sorgusu sayımı | PFADD search:terms query_hash |
Email campaign tracking | Benzersiz email open/click rates | PFADD campaign:123:opens email_id |
IoT device monitoring | Distinct device reporting | PFADD devices:active device_uuid |
Social media analytics | Unique engagement tracking | PFADD posts:123:viewers user_id |
Game analytics | Unique player counting | PFADD game:daily:players player_id |
Real-time stream processing | Distinct event counting in streams | PFADD events:stream:unique event_id |
PFMERGE
komutu ile farklı zaman dilimlerinin, farklı sunucuların veya farklı data source'larının HyperLogLog'larını birleştirerek aggregate unique counts elde edebilirsiniz. Bu özellik, distributed analytics, multi-datacenter deployments ve time-series unique counting için vazgeçilmez bir araçtır.HyperLogLog
, Philippe Flajolet tarafından geliştirilen probabilistic cardinality estimation algoritmasının implementasyonudur. Hash functions ve statistical analysis kullanarak, gerçek elementleri saklamadan unique count tahmini yapar. Redis implementasyonu 12KB sabit memory kullanır ve %1.04 standard error rate ile sonuç verir.Komut | Açıklama | Örnek |
---|---|---|
PFADD | HLL'ye element(ler) ekler | PFADD visitors "user123" |
PFCOUNT | Unique element count tahmini döndürür | PFCOUNT visitors |
PFMERGE | Birden fazla HLL'yi birleştirir | PFMERGE result hll1 hll2 |
text127.0.0.1:6379> PFADD daily_visitors "user_123" // "daily_visitors" HLL'sine "user_123" ekliyoruz. (integer) 1 // HLL güncellendi (yeni unique element). 127.0.0.1:6379> PFADD daily_visitors "user_456" // "user_456" ekliyoruz. (integer) 1 // HLL güncellendi. 127.0.0.1:6379> PFADD daily_visitors "user_123" // Aynı elemanı tekrar ekliyoruz. (integer) 0 // HLL güncellenmedi (zaten var). 127.0.0.1:6379> PFADD daily_visitors "user_789" "user_999" "user_111" // Birden fazla element ekliyoruz. (integer) 1 // HLL güncellendi (en az biri yeni). 127.0.0.1:6379> PFADD page_views:homepage "session_abc" "session_def" // Farklı HLL'ye element ekleme. (integer) 1 // Yeni HLL oluşturuldu ve güncellendi.
PFADD
komutu çalıştırıldığında yeni HLL oluşturulur.text127.0.0.1:6379> PFADD numbers 123 "123" // Farklı tip ama aynı string representation. (integer) 1 // Sadece bir kez sayılır. 127.0.0.1:6379>
text127.0.0.1:6379> PFCOUNT daily_visitors // "daily_visitors" HLL'sindeki unique count. (integer) 5 // Tahmini 5 unique element. 127.0.0.1:6379> PFCOUNT page_views:homepage // "page_views:homepage" HLL'sindeki count. (integer) 2 // Tahmini 2 unique element. 127.0.0.1:6379> PFCOUNT daily_visitors page_views:homepage // İki HLL'nin birleşimindeki unique count. (integer) 7 // Tahmini toplam unique count. 127.0.0.1:6379> PFCOUNT nonexistent_hll // Var olmayan HLL sorgulanıyor. (integer) 0 // 0 unique element.
text127.0.0.1:6379> PFADD morning_visitors "user_100" "user_200" "user_300" // Sabah ziyaretçileri. (integer) 1 127.0.0.1:6379> PFADD evening_visitors "user_200" "user_400" "user_500" // Akşam ziyaretçileri. (integer) 1 127.0.0.1:6379> PFCOUNT morning_visitors // Sabah unique visitor sayısı. (integer) 3 127.0.0.1:6379> PFCOUNT evening_visitors // Akşam unique visitor sayısı. (integer) 3 127.0.0.1:6379> PFMERGE daily_total morning_visitors evening_visitors // Günlük toplam için merge. OK // Merge işlemi başarılı. 127.0.0.1:6379> PFCOUNT daily_total // Günlük toplam unique visitor. (integer) 5 // Ortak user_200 nedeniyle 5 (6 değil). 127.0.0.1:6379> PFADD afternoon_visitors "user_300" "user_600" "user_700" // Öğleden sonra ziyaretçileri. (integer) 1 127.0.0.1:6379> PFMERGE daily_total daily_total afternoon_visitors // Mevcut total'a afternoon'u ekle. OK 127.0.0.1:6379> PFCOUNT daily_total // Güncellenmiş günlük toplam. (integer) 7 // Tüm benzersiz ziyaretçiler.
text127.0.0.1:6379> PFADD target "existing_element" 127.0.0.1:6379> PFMERGE target source1 source2 // target'ın eski içeriği kaybolur.
127.0.0.1:6379> PFMERGE result hll1 hll2 hll3 hll4 // 4 HLL'nin birleşimi.
text127.0.0.1:6379> PFADD visitors:2024-01-20 "192.168.1.100" // Günlük ziyaretçi tracking. 127.0.0.1:6379> PFADD visitors:2024-01-20 "192.168.1.101" 127.0.0.1:6379> PFADD visitors:2024-01-20 "192.168.1.102" 127.0.0.1:6379> PFADD visitors:2024-01-20 "192.168.1.100" // Aynı IP tekrar geliyor. 127.0.0.1:6379> PFCOUNT visitors:2024-01-20 // 20 Ocak unique visitor sayısı. (integer) 3 // 3 benzersiz IP. 127.0.0.1:6379> PFADD visitors:2024-01-21 "192.168.1.101" // 21 Ocak ziyaretçileri. 127.0.0.1:6379> PFADD visitors:2024-01-21 "192.168.1.103" 127.0.0.1:6379> PFADD visitors:2024-01-21 "192.168.1.104" 127.0.0.1:6379> PFCOUNT visitors:2024-01-21 // 21 Ocak unique visitor sayısı. (integer) 3 127.0.0.1:6379> PFMERGE visitors:weekly visitors:2024-01-20 visitors:2024-01-21 // Haftalık unique visitor hesaplama. OK 127.0.0.1:6379> PFCOUNT visitors:weekly // Haftalık toplam unique visitor. (integer) 5 // 5 benzersiz IP (ortak IP'ler tek sayılıyor). 127.0.0.1:6379> PFCOUNT visitors:2024-01-20 visitors:2024-01-21 // Alternatif: direkt union count. (integer) 5 // Aynı sonuç.
text127.0.0.1:6379> PFADD product:123:viewers "user_100" // Ürün 123'ü görüntüleyen kullanıcılar. 127.0.0.1:6379> PFADD product:123:viewers "user_200" 127.0.0.1:6379> PFADD product:123:viewers "user_300" 127.0.0.1:6379> PFADD product:123:viewers "user_100" // User 100 tekrar bakıyor. 127.0.0.1:6379> PFADD product:456:viewers "user_200" // Ürün 456'yı görüntüleyen kullanıcılar. 127.0.0.1:6379> PFADD product:456:viewers "user_400" 127.0.0.1:6379> PFADD product:456:viewers "user_500" 127.0.0.1:6379> PFCOUNT product:123:viewers // Ürün 123'ün unique viewer sayısı. (integer) 3 127.0.0.1:6379> PFCOUNT product:456:viewers // Ürün 456'nın unique viewer sayısı. (integer) 3 127.0.0.1:6379> PFMERGE category:electronics product:123:viewers product:456:viewers // Kategori bazlı unique viewer. OK 127.0.0.1:6379> PFCOUNT category:electronics // Elektronik kategorisinin unique viewer'ı. (integer) 5 // 5 benzersiz kullanıcı. 127.0.0.1:6379> PFADD product:789:viewers "user_300" "user_600" "user_700" // Yeni ürün ekle. (integer) 1 127.0.0.1:6379> PFMERGE category:electronics category:electronics product:789:viewers // Kategoriyi güncelle. OK 127.0.0.1:6379> PFCOUNT category:electronics // Güncellenmiş kategori viewer sayısı. (integer) 7 // 7 benzersiz kullanıcı.
text127.0.0.1:6379> PFADD app:sessions:morning "session_abc123" // Sabah app session'ları. 127.0.0.1:6379> PFADD app:sessions:morning "session_def456" 127.0.0.1:6379> PFADD app:sessions:morning "session_ghi789" 127.0.0.1:6379> PFADD app:sessions:afternoon "session_def456" // Öğleden sonra sessions (overlap var). 127.0.0.1:6379> PFADD app:sessions:afternoon "session_jkl012" 127.0.0.1:6379> PFADD app:sessions:afternoon "session_mno345" 127.0.0.1:6379> PFADD app:sessions:afternoon "session_pqr678" 127.0.0.1:6379> PFCOUNT app:sessions:morning // Sabah unique session sayısı. (integer) 3 127.0.0.1:6379> PFCOUNT app:sessions:afternoon // Öğleden sonra unique session sayısı. (integer) 4 127.0.0.1:6379> PFCOUNT app:sessions:morning app:sessions:afternoon // Günlük toplam unique session. (integer) 6 // 6 benzersiz session (overlap nedeniyle 7 değil). 127.0.0.1:6379> PFADD app:feature:premium:users "user_100" "user_200" // Premium feature kullanıcıları. 127.0.0.1:6379> PFADD app:feature:chat:users "user_200" "user_300" "user_400" // Chat feature kullanıcıları. 127.0.0.1:6379> PFCOUNT app:feature:premium:users app:feature:chat:users // Her iki feature'ı kullanan unique user. (integer) 4 // 4 benzersiz kullanıcı. 127.0.0.1:6379> PFMERGE app:active_users app:feature:premium:users app:feature:chat:users // Aktif kullanıcı tracking. OK 127.0.0.1:6379> PFCOUNT app:active_users // Toplam aktif kullanıcı sayısı. (integer) 4
text127.0.0.1:6379> PFADD region:us:users "user_1001" "user_1002" "user_1003" // US region kullanıcıları. (integer) 1 127.0.0.1:6379> PFADD region:eu:users "user_2001" "user_2002" "user_1002" // EU region kullanıcıları (overlap var). (integer) 1 127.0.0.1:6379> PFADD region:asia:users "user_3001" "user_3002" "user_3003" "user_3004" // Asia region kullanıcıları. (integer) 1 127.0.0.1:6379> PFCOUNT region:us:users // US unique user sayısı. (integer) 3 127.0.0.1:6379> PFCOUNT region:eu:users // EU unique user sayısı. (integer) 3 127.0.0.1:6379> PFCOUNT region:asia:users // Asia unique user sayısı. (integer) 4 127.0.0.1:6379> PFMERGE global:users region:us:users region:eu:users region:asia:users // Global unique user calculation. OK 127.0.0.1:6379> PFCOUNT global:users // Global unique user sayısı. (integer) 9 // 9 benzersiz kullanıcı (overlap'ler hesaba katılarak). 127.0.0.1:6379> PFCOUNT region:us:users region:eu:users // US-EU cross-region unique count. (integer) 5 // 5 benzersiz kullanıcı. 127.0.0.1:6379> PFCOUNT region:us:users region:asia:users // US-Asia cross-region unique count. (integer) 7 // 7 benzersiz kullanıcı.
PFADD
, PFCOUNT
, PFMERGE
gibi temel komutları ve gerçek dünya senaryolarında HyperLogLog kullanımını detaylı örneklerle öğrendik.
HyperLogLog'un probabilistic counting, fixed memory usage, massive scalability ve merge operations özellikleri özellikle: