Perché i conteggi delle visualizzazioni dei messaggi sono in ritardo sulla maggior parte dei siti Web?

10

Nota come i conteggi delle visualizzazioni dei video di YouTube sono sempre in ritardo? Ad esempio, un video ha come 1000 commenti e ha ancora 500 hit e avrà 10000 hit ore dopo.

Youtube non è solo in questo. La maggior parte delle bacheche sono implementate in questo modo e i conteggi delle viste vengono aggiornati ogni 10 minuti circa.

Qualcuno conosce la ragione di questo?

Grazie.

    
posta Tom Tucker 08.04.2011 - 19:17
fonte

4 risposte

20

Le visualizzazioni di registrazione sono molto semplici, basta aggiungere una riga a una tabella che rappresenti l'azione di "visualizzazione". Questo è veloce perché non è richiesto alcun blocco nel database, stai solo aggiungendo una riga alla fine di un heap.

L'aggregazione di ciò nel numero totale di visualizzazioni richiede qualcosa come fare SELECT COUNT(*) FROM ... che significa che devi bloccare la tabella mentre il calcolo sta procedendo. In alternativa, UPDATE ... SET num_views = num_views + 1 richiede anche che blocchi quella particolare riga ogni volta che qualcuno la visualizza.

Quindi, dal punto di vista della scalabilità, è molto più efficiente aggiungere una riga ogni volta che qualcuno visualizza il video e quindi eseguire il SELECT COUNT(*) FROM ... ogni dieci minuti circa.

Nota In realtà non conosco l'architettura di YouTube, né se usano un database relazionale per archiviare i propri dati, ma qualsiasi cosa fanno usi, il principio è probabilmente lo stesso: inserire dati è economico, i valori di aggregazione sono (relativamente) costosi.

    
risposta data 08.04.2011 - 19:22
fonte
8

Molto probabilmente il valore è stato memorizzato nella cache da qualche parte lungo il percorso in modo da visualizzare dati obsoleti. Poiché non è essenziale che questi dati siano precisi, gli sviluppatori hanno deciso di favorire le prestazioni rispetto all'aggiornamento dei dati. Non vorresti davvero andare al database e fare un conteggio delle righe per ogni colpo sul sito solo per aggiornare questa cifra in modo che non lo facessero, lo hanno solo messo in cache per un po '.

    
risposta data 08.04.2011 - 19:42
fonte
4

Affinché i siti di grandi dimensioni siano scalabili, devono eseguire il caching in più fasi. Ciò può essere il caching delle pagine, la memorizzazione nella cache delle pagine secondarie e / o la memorizzazione nella cache. Potresti avere una combinazione di tutti loro in effetti. Ad esempio, se la pagina di YouTube viene memorizzata nella cache fino a quando non viene aggiunto un nuovo commento, vedrai un po 'di ritardo fino a quando qualcuno non pubblicherà un commento.

Esistono diversi modi per misurare le visualizzazioni di pagina:

  • Archivialo nel database come un record: facile da inserire, tuttavia è un importante overhead di manutenzione per i record che forniscono solo un conteggio.
  • Archivialo nel database come record e arrotonda periodicamente i conteggi: facile da inserire, l'elaborazione in batch per raccogliere le statistiche che vuoi e si ripulisce da solo.
  • Aggiornamento di una colonna di conteggio nel database: costoso da aggiornare (presupponendo il blocco di riga), nessun sovraccarico di manutenzione, prestazioni negative quando si tratta di più persone che richiedono la stessa pagina allo stesso tempo.
  • Elabora il file di log di accesso quando viene eseguito il rollover: nessun dato aggiuntivo nel database, tutta l'elaborazione viene eseguita in batch offline e le statistiche di riepilogo che desideri vengono aggiornate quando è il momento.

Fuori dagli articoli sopra, tutti tranne un'opzione suggerisce che gli aggiornamenti saranno fatti in lotti. Il numero di visualizzazioni non è davvero un attributo time-critical, quindi è OK. Tuttavia, mantenere le persone in attesa di visualizzare un video su YouTube perché il database di back-end non può mantenere è un'azione critica. Ciò significa che l'aggiornamento di una colonna nel database non funzionerà per un sito grande quanto YouTube. Personalmente non sarei sorpreso se optassero per l'opzione finale. I server Web registreranno un'intera serie di informazioni per ogni visita, inclusi l'IP che stai utilizzando, il modo in cui ti hanno indirizzato alla pagina, ecc. Ha senso solo elaborarli in gruppi e riassumere i risultati secondo necessità.

    
risposta data 08.04.2011 - 20:16
fonte
0

Ciò potrebbe essere dovuto a una serie di motivi. Tutto si riduce agli algoritmi utilizzati da ciascun sito web. A meno che qualcuno qui sia effettivamente uno sviluppatore di YouTube, dubito che abbiate una risposta esatta qui.

    
risposta data 08.04.2011 - 19:21
fonte

Leggi altre domande sui tag