Come dovrei architettare il mio back-end in base a queste esigenze?

0

Non ho ancora iniziato a costruire il mio back-end, ma ho bisogno di farlo adesso.

Le mie esigenze sono le seguenti:

  • Il database deve contenere milioni di informazioni sui giochi (solo informazioni che possono essere memorizzate in un tipico db come match_id, vittoria o perdita, id eroe #, id oggetto # ecc ...)
  • Deve essere in grado di eseguire un calcolo di divisione base basato su determinati parametri, come i giochi che contengono un ID eroe # e questo deve essere il più veloce possibile dal momento che non voglio che il mio utente attenda 5 minuti per un query DB.
  • Una volta al giorno devi chiamare l'api e aggiornare il db con migliaia di milioni di nuovi giochi che sono stati giocati nelle ultime 24 ore.

Questi sono gli aspetti più importanti del mio back-end. Sulla base di questo, come lo costruiresti?

Stavo pensando di usare MySQL ma alcune persone con cui ho parlato suggerivano Postgres. Alcune persone hanno anche suggerito di usare Heroku per questo bisogno di back-end, e Firebase? So che ci sono molte opzioni disponibili per me. Penso che il mio PIÙ GRANDE BISOGNO sia la velocità. Ho bisogno di fare le query FAST AS POSSIBLE in modo che il mio front end non sia molto lento in attesa di informazioni.

modifica: ulteriori informazioni a riguardo.

Questo è solo un semplice DB contenente dati di base sul gioco di Dota 2. Sto ottenendo informazioni sulla partita dalla steam apap e inserendola nel mio db. Quindi eseguo un semplice calcolo di divisione basato su alcuni parametri come i giochi che hanno un particolare eroe in essi. Le sue informazioni basilari non sono come un vero gioco. Solo ID # e cose del genere.

    
posta alber 18.07.2016 - 09:49
fonte

2 risposte

1

PostgreSQL sarebbe leggermente migliore, perché il suo design è più orientato al carico di lavoro analitico, diversamente da MySQL, progettato per il carico di lavoro transazionale. Questo è se vuoi fare i calcoli direttamente nel database. Ottenere statistiche sui giocatori è l'analisi dei dati.

L'ovvio inconveniente (anche se non così importante) di PostgreSQL è la sua minore popolarità, cioè. è più difficile trovare una community in cui discutere dei problemi specifici di PostgreSQL.

Dovresti sapere che Heroku è una piattaforma di applicazioni cloud, ma il gioco è fatto. L'uso di Heroku da solo non migliorerà improvvisamente la tua architettura e renderà la tua applicazione scalabile.

Quello che stai davvero cercando è il caching. Dopo aver eseguito analisi statistiche sui dati attualmente disponibili, è necessario memorizzare i risultati nella cache in modo che non debbano essere ricalcolati ogni volta. Durante la chiamata dell'API, questa cache dovrebbe essere liberata, le statistiche dovrebbero essere ricalcolate e reinserite nella cache.

Ma anche allora, non sai ancora quale sarà il collo di bottiglia più grande. Quello che ti suggerisco di fare è creare un database fittizio, riempirlo con milioni di record fittizi e provare a eseguire una query su di esso. La query che probabilmente userete. In questo modo puoi eseguire il benchmark del database senza avere ancora l'applicazione.

Un altro approccio consiste nell'aggiornare i dati in sequenza. Chiama l'API più volte al giorno e aggiorna (cache invalidate e reinserisci) solo le statistiche per i giocatori che sono interessati dal batch ricevuto.

    
risposta data 18.07.2016 - 10:17
fonte
0

Invece di eseguire i calcoli a mano potrebbe essere utile (a seconda della complessità delle query ovviamente) utilizzare un server OLAP. Alcuni server OLAP supportano la creazione di cubi MOLAP o HOLAP con aggregati precalcolati che miglioreranno in modo significativo le prestazioni della query (ad esempio link ).

    
risposta data 18.07.2016 - 13:41
fonte

Leggi altre domande sui tag