Il mio team deve trovare una soluzione al seguente problema:Come posso garantire la coerenza degli aggregati con alta disponibilità?
La nostra applicazione consente agli utenti di visualizzare le vendite totali per l'impresa, totali per prodotto, totali per regione, totali per regione x prodotto, totali per regioni x divisione, ecc. Hai capito l'idea. Ci sono così tanti valori che devono essere aggregati per ottenere molti di quei totali che non possono essere calcolati al volo - dobbiamo pre-aggregarli per fornire tempi di risposta decenti, un processo che richiede circa 5 minuti.
Il problema, che pensavamo fosse comune ma non trova riferimenti, è come consentire aggiornamenti alle varie vendite senza chiudere gli utenti. Inoltre, gli utenti non possono accettare la coerenza finale - se eseguono il drill-down su un totale di 12, vedono meglio i numeri che ne sommano fino a 12. Quindi abbiamo bisogno di Coerenza + Disponibilità.
La soluzione migliore finora descritta è quella di indirizzare tutte le query a un database ridondante, "B" (ottimizzato per le query) mentre gli aggiornamenti vengono indirizzati al database principale, "A". Quando decidiamo di dedicare i 5 minuti necessari per aggiornare tutti gli aggregati, aggiorniamo il database "C", che è un altro database ridondante come "B". Quindi, le nuove sessioni utente vengono indirizzate a "C", mentre le sessioni utente esistenti continuano a utilizzare "B". Alla fine, avvisando chiunque è andato via usando "B", uccidiamo le sessioni su "B" e ri-aggregiamo lì, scambiando i ruoli di "B" e "C". Tipico scenario di fermata-arresto.
Siamo sorpresi del fatto che non siamo in grado di trovare alcuna discussione al riguardo e siamo preoccupati che stiamo sovrastimando questo problema o forse non è il problema che pensiamo che sia. Qualsiasi consiglio è molto apprezzato.
Abbiamo avuto molti pre-aggregati, ma eravamo contenti della coerenza finale, quindi non abbiamo dovuto inventare trucchi intelligenti. Il tuo approccio proposto sembra fattibile. –
@sergio Grazie!Il tuo ultimo commento mi dà speranza. – RonR