Sto lavorando a un'applicazione che implica l'esecuzione molto alta di query di aggiornamento / selezione nel database.
Ho una tabella di base (A) che avrà circa 500 record per un'entità per un giorno. E per ogni utente nel sistema, una variazione di questa entità viene creata in base ad alcune delle preferenze dell'utente e sono memorizzate in un'altra tabella (B). Questo viene fatto da un cron job che viene eseguito a mezzanotte tutti i giorni.
Quindi se ci sono 10.000 utenti e 500 record nella tabella A, ci saranno 5 milioni di record nella tabella B per quel giorno. Conservo sempre i dati per un giorno in queste tabelle ea mezzanotte archivo i dati storici su HBase. Questa configurazione funziona correttamente e non ho problemi di prestazioni fino ad ora.
Ultimamente sono stati apportati alcuni cambiamenti ai requisiti aziendali e ora alcuni attributi nella tabella di base A (per 15-20 record) cambieranno ogni 20 secondi e in base a ciò devo ricalcolare alcuni valori per tutti quei record di variazione in tabella B per tutti gli utenti. Anche se cambiano solo 20 record master, devo eseguire il ricalcolo e aggiornare 200.000 record utente che impiegano più di 20 secondi e, a quel punto, si verificherà il prossimo aggiornamento, con il risultato che tutte le query Select vengono accodate. Sto ricevendo circa 3 richieste di ottenere / 5 secondi dagli utenti online che si traducono in 6-9 richieste di selezione. Per rispondere a una richiesta API, utilizzo sempre i campi nella tabella B.
Posso acquistare più potenza di elaborazione e risolvere questa situazione, ma sono interessato ad avere un sistema correttamente dimensionato in grado di gestire anche un milione di utenti.
Qualcuno qui può suggerire un'alternativa migliore? Il database relazionale nosql + mi aiuta qui? Ci sono piattaforme / datastore che mi permettono di aggiornare i dati frequentemente senza bloccare e allo stesso tempo mi danno la flessibilità di eseguire query selezionate su vari campi di un'entità?