Bug #220
chiusai questionari vengono "persi" se il db e' sovraccarico
100%
Descrizione
durante un forte evento sismico, tra chi cerca di:
- compilare un questionario;
- effettuare ricerche, non precompilate (la prima pagina);
- iscriversi;
il database si "blocca" a causa delle troppe connessioni simultanee.
Per non perdere almeno i dati occorre memorizzarli altrove in attesa che il db torni nuovamente disponibile.
Aggiornato da Diego Sorrentino oltre 6 anni fa
- % Completato modificata da 0 a 20
- passare tutto a uno script che tiene i nuovi questionari in memoria, in attesa che il db torni fruibile e sperando che la macchina non vada in errore;
- mettere tutti i nuovi questionari in memcached, ma c'e' il problema degli indici che poi andrebbero cmq tenuti a parte e, inoltre, sperare la macchina non vada in errore;
- memorizzarli in una sorta di buffer circolare, ma c'e' il problema della gestione degli "indici occupati", di memoria da condividere (a meno di non trasformarlo in un servizio) e, anche qui, sperare che la macchina non vada in errore.
- il web-service xml-server.php riceve il nuovo questionario e salva il comando sql su file, in una directory predefinita e con nome file casuale
- un servizio, in continua esecuzione, a intervalli regolari controlla la presenza di tali file e, in caso il db sia disponibile, li invia al DB e li cancella, altrimenti aspetta senza modificare nulla
Aggiornato da Diego Sorrentino oltre 6 anni fa
e' stata modificata completamente la memorizzazione dei questionari compilati, modificato da salvataggio REAL-TIME a QUASI-REAL-TIME:
PRIMA¶
Un utente inviava al server un questionario e questo, dopo una serie di controlli veniva memorizzato direttamente nel DB.Le sessioni con il DB che venivano aperte erano:
- controllo e "correzione" dati (mysqli::real_escape_string());
- conferma iscritto
- controllo coordinate (per i questionari pervenuti da android == DEPRECATO)
- salvataggio (condivideva la stessa sessione nel punto 1)
DOPO¶
Al questionario pervenuto, strutturato in un array viene:- aggiunto il campo contenente l'orario di compilazione;
- serializzato (php::serialize());
- salvato su disco in una directory predefinita, con un nome file causale ma univoco, con prefisso quest_.
- controlla se nella directory dei questionari sia presente qualche nuovo file;
- prende e deserializza il contenuto, quindi l'array con i dati del questionario (php::unserialize());
- esegue la procedura per il calcolo degli score MCS/EMS e applica il controllo della moda;
- salva il questionario su db (oppure sposta il file in una directory dedicata agli errori)
nella nuova configurazione viene attivato un unico collegamento al database, con cui vengono effettuati tutti i controlli e il salvataggio del questionario.
La sessione e' sicuramente piu' lunga e il salvataggio dei questionari non e' realtime ma si riduce ancor piu' il peso sul db.
Aggiornato da Diego Sorrentino oltre 6 anni fa
- Stato modificata da Nuovo a In lavorazione
- % Completato modificata da 20 a 90
Aggiornato da Diego Sorrentino oltre 6 anni fa
- Stato modificata da In lavorazione a Chiuso
- % Completato modificata da 90 a 100
applicata la modifica sul Terremoto web e aggiornata la relativa pagina sul wiki Non vengono salvati i questionari
Aggiornato da Diego Sorrentino oltre 6 anni fa
- Modifica #222: Spostare in memcache i contatori della pagina web Correlata a aggiunto
Aggiornato da Diego Sorrentino oltre 6 anni fa
- Modifica #223: Riduzione/eliminazione connessioni al db per i questionari compilati dagli iscritti Correlata a aggiunto