Benzersiz bir sayfa görünümü sayacı uygulamak?

2 Cevap php

Ben bir sayfaya eşsiz manzarası sayısını izler (SO soru görünümler için ne benzer) bir kullanıcı bakan görünümü sayacı uygulamak istiyor. Orada similar birkaç soru burada ama hiçbiri tam olarak soruma cevap gibi görünüyor.

Ne (vb veritabanı tabloları açısından) bunun için en iyi kurulum olurdu? Bu 'sorular' tablo için bir 'bakıldı' sütun eklemek ve sadece her sayfa görünümünde üzerine bu artırmak için iyi olurdu? Ben görünümleri benzersiz olmak istiyorsanız, ben soru id ve IP adresleri ile başka bir tablo var ve mevcut IP ile zaten bir giriş yoksa sadece 'görünümü' sütununu artırmak sanırım. Ancak bu 'ip-view' tablo Temelde ben bir tablo her sayfa görünümü ve her IP saklamak zorunda yükü ile endişe duyuyorum ... gerçekten hızlı Tankerindeki olacaktı.

Bu bir performans darboğazı haline gelmez ki bu nasıl optimize edilebilir? Ben tarif ne daha iyi bir yaklaşım var mı? Sadece eşsiz manzaralar sayılır benim için çok önemli olduğunu unutmayın.

Update: uygulama yöntemleri düşündüren ek olarak, ben de performans sorunları sadece IP varsa kontrol ve her fırsatta 'görünümü' sütununu güncellenmesi naif yaklaşım varsayarak oyuna gelmek daha anlamak istiyorum sayfa görünümü. (Ağır trafik varsayarak) meydana eklemeleri ana konu büyük miktarda ya da nesne-ip eşleme tablosunda (yeni bir satır, her yeni benzersiz ziyaretçi için soru başına eklenecektir beri büyük olabilir) daha boyutudur. Irk gerektiğini koşulları (Ben sadece bir güncelleme / artım sql deyimi atomik olduğu varsayılır) kabul edilebilir? Tüm sorular için özür dilerim ama ben sadece bu yaklaşımı nasıl gibi kayıp duyuyorum.

2 Cevap

Özellikle eşsiz manzarasını izlemek için gerekiyorsa, size saptayabilirsiniz iç kullanıcılar ile çalışan sürece ... Bunu yapmanın iki yolu muhtemelen var. Şimdi, bunu yapmak için size sayfayı ziyaret ediyor her kullanıcının takip etmek gerekir.

Takip sunucu tarafında veya istemci tarafında da yapılabilir.

Eğer saptayabilirsiniz iç kullanıcılar ile uğraşıyoruz sürece Server-side, IP adresleri olması gerekir. Ve IP insanlar (IP başına birden fazla kullanıcı ya da kullanıcı başına birden fazla IP'ler olabilir) uygulamak belirlemek ve bu konuda bir şey yapamam bunları kullanarak ilgili tüm olağan uyarılar adresleri ile başa zaman.

Ayrıca "ölüm büyük IP tablosu" bir çözümün o kadar da kötü olmadığını düşünmelisiniz. Kullanıcıların yüzbinlerce varsa Performans sadece tabii, düzgün endeksli varsayarak ... bir sorun haline gelecektir.

Client-side muhtemelen bir bırakarak içerir "Ben ziyaret ettik!" çerez. Çerez mevcut değil ise, o zaman kullanıcı sayısını artırmak. Cookie oluşturulur olamaz ise, şişirilmiş bir kullanıcı görünümü ile yaşamak zorunda kalacaksınız. Ve kurabiye ile ilgili hakkında tüm uyarılar uygulamak ... demek ki, onlar sonunda kötü gitmek ve yok edeceğiz.

Kendimi ölçeklenebilir doğrusu uygun olma konusunda henüz emin değil (benim başın üstünden) devrimci bir yaklaşım var gibi görünüyor.

Eğer gerçekten DB IP saklamak isteyen ve ur DB tıkanmış almamak için istedim, hiyerarşik bir düzen içinde saklayarak düşünmek gerekir.

<ID, IP_PART, LEVEL, PARENT_PART, VIEWS>

bu yüzden, bir kullanıcının ziyaret IP 212.121.139.54 ur et, ur tablodaki satırlar olacağını zaman:

<1, 212, 1, 0, 0> <2, 121, 2, 1, 0> <3, 139, 3, 2, 0> <4, 54, 4, 3, 1>

Puan Not:

  1. SEVİYE val = 4 Sadece satırlar, görüntüleme sayısına sahip olacaktır.
  2. SEVİYE val = 1,2,3, = 0 GÖRÜŞLERİ val depolama fazlalığını önlemek için; Eğer farklı bir tablo içinde saklayarak düşünebilirsiniz.
  3. Düşünce, tasavvur gibi, IP'lerin küçük bir set için uygun görünmüyor.
  4. Bu bir kamu proxy IP birden fazla kutu ur web sitesine erişim bir özel ağ önünde oturan gerçeğini ihmal olabilir rağmen. Ama bu ur sora olmak görünmüyor. sanırım.

böylece, chao, beni u ne uygulamak mı bildireceğiz?