Voglio iniziare a contare il numero di volte in cui una pagina web viene visualizzata e quindi è necessario un qualche tipo di contatore semplice. Qual è il miglior metodo scalabile per fare ciò?Qual è il modo migliore per implementare un campo contatore in MySQL
Supponiamo che ho una tabella Frobs dove ogni riga corrisponde a una pagina - alcune opzioni evidenti sono:
Avere un unsigned int NumViews campo nella tabella Frobs che ottiene aggiornati su ogni vista utilizzando
UPDATE Frobs SET NumViews = NumViews + 1
. Semplice ma non così bravo nel ridimensionamento come ho capito.Avere una tabella separata FrobViews dove viene inserita una nuova riga per ogni vista. Per visualizzare il numero di visualizzazioni , è quindi necessario eseguire un semplice
SELECT COUNT(*) AS NumViews FROM FrobViews WHERE FrobId = '%d' GROUP BY FrobId
. Ciò non comporta alcun aggiornamento, quindi è possibile evitare il blocco della tabella nelle tabelle MyISAM; tuttavia, le prestazioni di lettura ne risentiranno se si desidera visualizzare il numero di visualizzazioni su ciascuna pagina.
Come si fa?
C'è qualche buon consiglio qui: http://www.mysqlperformanceblog.com/2007/07/01/implementing-efficient-counters-with-mysql/ ma mi piacerebbe sentire le opinioni della comunità SO.
Attualmente sto utilizzando InnoDb, ma sono interessato alle risposte sia per InnoDb che per MyISAM.