• User Newbie

    Scalabilità di un'applicazione (eccessive richieste al DB)

    Salve a tutti,
    forse dovrei spostare il post nella sezione Php - MySql (magari mi suggeriscono un altro metodo), però mi sembra più adatto a gente esperta di sistemi e server.

    Ho realizzato un'applicazione in ambiente LAMP, adattandone il layout per il mobile, che permette a migliaia di automobilisti di farsi localizzare dagli utenti su una mappa e comunicare in automatico gli spostamenti (in pratica si vede il marker sulla mappa che si muove).
    Il funzionamento è il medesimo:
    Calcolo Latitudine e Longitudine e ogni 2/3 secondi invio questi dati al DB in modo tale che ogni utente riesce a localizzarlo sulla mappa.
    Funziona, e anche bene, però purtroppo se moltiplico questa operazione per migliaia di automobilisti ecco che il DB non regge più, se sommo anche le richieste di letture al DB (fatte da parte degli utenti che consultano la mappa per vedere la posizione degli automobilisti) il numero diventa mostruoso per un DB gestito da un singolo server (parliamo di decine di migliaia di richieste al secondo se non di più).

    Come potrei risolvere per scalare/replicare?

    Grazie


  • Super User

    Potresti soppiantare Mysql con MariaDb, anche se avrei abbinato a questo database una soluzione più adatta a livello di webserver con nginx al posto di apache...


  • User Attivo

    Potresti fare un cluster di n nodi per la "lettura" del db visto che è l'operazione più pesante magari utilizzando storage su SSD.


  • Moderatore

    Stai usando Mysql con quale motore? MyISAM?

    Considera per l'update di una riga locka un'intera tabella.

    Potresti cominciare col considerare Innodb o Tokudb. Inoltre verificare per bene le query e se è possibile ottimizzarle ( a volte fanno scherzi che non ci si aspetterebbe ).

    Se ciò non basta, considera un passaggio a PostgreSQL o Firebird. Se tutto ciò non bastasse, dovrai cominciare a considerare soluzioni cluster.

    Inoltre, è necessario un dbms sql? Potresti, se possibile, optare per un nosql.


  • User Newbie

    @coolnetwork said:

    Potresti fare un cluster di n nodi per la "lettura" del db visto che è l'operazione più pesante magari utilizzando storage su SSD.

    In realtà l'operazione più pesante è quella di scrittura... Gli automobilisti scrivono la loro posizione sul DB ogni 2 secondi circa (migliaia di operazioni di scrittura al secondo). Non ho mai letto di soluzioni di replica in cui ci siano più Master dedicati alla scrittura. Tu ne sai qualcosa?


  • User Attivo

    Più master dedicati alla scrittura con MySQL non puoi farlo a meno di non gestire il tutto con un engine che non sia né innodb né myisam (si chiama NDB).
    puoi inziare con una soluzione MASTER-SLAVE e splittare le queries di lettura solo sullo slave.

    Poi andrei a verificare le impostazioni del my.cnf per ritarare il tutto.

    Dipende tutto dal budget che hai per il progetto.