Sto lavorando su un'applicazione che prevede l'esecuzione molto elevata 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 ogni giorno a mezzanotte.
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 e a mezzanotte archivio i dati storici su HBase. Questa configurazione funziona bene e finora non ho riscontrato problemi di prestazioni.
Di recente 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 nella tabella B per tutti gli utenti. Anche se cambiano solo 20 record master, devo eseguire il ricalcolo e aggiornare 200.000 record utente che richiedono più di 20 secondi e, a quel punto, si verifica il successivo aggiornamento che alla fine fa sì che tutte le query Select vengano messe in coda. Ricevo circa 3 richieste di ricezione / 5 secondi dagli utenti online, che si traducono in 6-9 Seleziona query. 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 adeguatamente ridimensionato in grado di gestire anche un milione di utenti.
Qualcuno qui può suggerire un'alternativa migliore? Il database relazionale nosql + mi aiuta qui? Esistono piattaforme / archivi dati che mi consentono di aggiornare i dati frequentemente senza blocco e allo stesso tempo mi danno la flessibilità di eseguire query selezionate su vari campi in un'entità?