Dati individuali per ogni utente, in base a migliaia di aggiornamenti nel sistema

3

Ho un servizio di notizie con migliaia di utenti.

Ogni utente può iscriversi a una serie di tag e siti che vorrebbero seguire singolarmente.

A un tag o un sito sono allegati articoli.

Un utente può potenzialmente avere 1-500 di questi che desidera seguire.

Ogni utente deve avere una pagina in cui vengono presentati questi articoli, in base ai tag e ai siti che l'utente segue.

La frequenza di aggiornamento in termini di articoli è di circa 2000 al giorno.

Ogni volta che un articolo viene creato / aggiornato / cancellato, è necessario aggiornare la singola pagina di ciascun utente in base ai tag e ai siti che seguono.

Credo che potremmo eseguire un calcolo di background su ogni dato di pagina degli utenti quando aggiorniamo la serie di articoli. Quindi popoliamo ogni "bucket" di utenti con i dati a cui solo l'utente deve essere esposto. Ma dal momento che lo facciamo 2000 volte / 24 ore deve essere performante.

Non sono sicuro su come questo si ridurrà e su come andrà a finire, e vorrei qualche contributo in merito come questo potrebbe essere fatto in una materia semplice ma performante.

Usiamo Redis come archivio dati se questo ti aiuta in alcun modo.

    
posta frostings 22.11.2016 - 10:03
fonte

1 risposta

4

La mia prima reazione a questi requisiti sarebbe quella di sviluppare un sistema pub / sub . Ogni volta che viene apportata una modifica a un articolo, un evento verrà pubblicato in tal senso.

Gli abbonati che si interessano di tali eventi possono iscriversi a loro. Ogni abbonato può aggiornarsi contemporaneamente con tutti gli altri abbonati, in modo tale che una sorta di architettura debba scalare verticalmente.

Gli eventi dovrebbero probabilmente andare in coda in modo che i picchi possano essere smussati e in modo che gli abbonati possano ottenere aggiornamenti anche se sono online per un po '.

    
risposta data 22.11.2016 - 10:16
fonte

Leggi altre domande sui tag