Cihaz verileri nasıl organize edilmeli + yeni alanların etkisi
29 Aralık 2025 - v2
Cihaz bilgileri bir ağaç gibi düşünülebilir. En tepede "Mobil mi, Masaüstü mü?" var. Sonra "Hangi işletim sistemi?", en altta "Hangi tarayıcı?" soruları geliyor.
IP adresi hiyerarşide değil, ayrı bir boyut. Aynı cihaz farklı ağlardan bağlanabilir (ev, iş, mobil data).
Diğer tüm bilgiler user_agent'tan çıkarılır. Ham string olarak saklanır, gerekirse yeniden parse edilebilir.
Abuse detection timeline'da Y ekseni şöyle olmalı:
Şu an sadece şarkı başladığında veri kaydediyoruz. Yeni alanlar için şarkı bittiğinde de sunucuya haber vermemiz gerekir. Bu, her şarkı için 1 yerine 2 istek demek.
| Alan | Ne Zaman Toplanır? | API İsteği | DB Etkisi | Performans |
|---|---|---|---|---|
| source_type | Başlangıçta | Mevcut istekte | +1 varchar field | ✅ Sıfır etki |
| source_id | Başlangıçta | Mevcut istekte | +1 bigint field | ✅ Sıfır etki |
| ended_at | Bitişte | +1 yeni istek | UPDATE query | ⚠️ Orta etki |
| listened_duration | Bitişte | ended_at ile birlikte | +1 int field | ✅ Ek etki yok |
| was_skipped | Bitişte | ended_at ile birlikte | +1 boolean field | ✅ Ek etki yok |
Sonuç: 100 aktif kullanıcı ile haftalık ~22,600 ek istek. Modern sunucu için ihmal edilebilir. Redis/Nginx zaten bu trafiği rahat kaldırır.
Çözüm: localStorage'a kaydet, sonra gönder (queue)
Çözüm: beforeunload + sendBeacon API (fire-and-forget)
Çözüm: play_id indexed olmalı, UPDATE hızlı olur
Önce source_type/source_id ekle - Sıfır performans etkisi, hemen eklenebilir
ended_at için JS altyapısı hazırla - sendBeacon, localStorage queue
Test ortamında dene - Gerçek yük ile performans ölç
Production'a al - Eğer sorun yoksa