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: