Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Ottimizare script

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    105

    Ottimizare script

    Ciao a tutti !

    Mi è venuto un dubbio!
    Ho uno script (php) che seleziona gli utenti inseriti in un database ( Mysql ) , li cicla e compone automaticamente un messaggio (recuperando dei dati da altre due tabelle diverse ).
    Il msg viene inviato ad un gateway che lo gira in SMS e lo invia.


    Con molti record da ciclare e l’invio dei msg, il server lavora parecchio, e in teoria è più facile che si pianti! Vero o Falso? Sto dicendo delle cretinate?


    Se lo script si blocca durante l'esecuzione sono nella M....... , Cosa mi consigliate di fare? Se si blocca come faccio a sapere a chi è arrivato il msg e a chi no?
    E meglio dividere il la tabella in blocchi, cioè far ciclare i record con la condizione LIMIT 0,1000

    Grazie !

  2. #2
    Quello che dici è vero e le tue preoccupazioni sono fondatissime.

    1) Lo script ce la fa a ciclare tutto in 30 sec? (a meno che tu non abbia aumentato il tempo a disposizione degli script)

    2) La soluzione è molto semplice ma devi vedere se puoi applicarla. Aggiungi un campo e lo chiami send (o come vuoi tu). Il campo deve essere di tipo INT e di lunghezza 1.
    Il valore di def sarà 0 (l'utente non ha ricevuto il msg).
    Man mano che gli sms vengono inviati lo script provvede a modificare il campo in 1 (L'utente ha ricevuto il msg)
    In pratica lo script fa questo:

    1) Estrae dal db solo gli utenti dove send corrisponde a 0
    2) Li conta
    3) Se il risultato è maggiore di 1 comincia ad inviare gli sms ed a modificare il campo da 0 a 1
    4) Se non ci sono utenti con il campo settato a zero significa che a tutti gli utenti è sato mandato il ms e quindi devi provvedere a modificare di nuovo il campo da 1 a 0 (in questo modo il nuovo msg verrà inviato a tutti)

    CONSIGLIO
    Puoi anche inserire un link che ti permetta di cambiare lo "status" senza che vengano inviati msg.

    In questo modo saprai a chi è stato inviato il msg e a chi no. Semplice!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    Originariamente inviato da mircov

    1) Estrae dal db solo gli utenti dove send corrisponde a 0
    2) Li conta
    io estrarrei N record alla volta (usando LIMIT) in modo da non dover tornare ad una situazione di stallo nel caso i record presenti siano veramente tanti
    <?php echo ' Emiliano Gabrielli (aka AlberT) ',"\n",
    ' socio fondatore e membro del direttivo del GrUSP ',"\n",
    ' AlberT_at_SuperAlberT_it - www.SuperAlberT.it ',"\n",
    ' IRC: #php,#AES azzurra.com ',"\n",'ICQ: 158591185'; ?>

  4. #4
    Non torni ad una situazione di stallo estraendo solo determinati record!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  5. #5
    Originariamente inviato da mircov
    Non torni ad una situazione di stallo estraendo solo determinati record!
    no, solo se supponi che i record in cui il tuo flag sia 1 siano pochi ... che non è un assunto generale!
    <?php echo ' Emiliano Gabrielli (aka AlberT) ',"\n",
    ' socio fondatore e membro del direttivo del GrUSP ',"\n",
    ' AlberT_at_SuperAlberT_it - www.SuperAlberT.it ',"\n",
    ' IRC: #php,#AES azzurra.com ',"\n",'ICQ: 158591185'; ?>

  6. #6
    Anche se va in stallo cmq ha processato tot righe. In queste righe il flag quindi passerà da 0 a 1.
    Rilanciando lo script con lo stesso messaggio ne modificherà ancora fin quando non finiranno e saranno tutti settati a 1. A quel punto lo script stesso provvederà a modificare il campo da 1 a 0.
    Il link che permette di modificare diettamente i campi da 1 a 0 serve come sicura nel senso che se i record sono veramente tanti e lanciando lo script si dovesse bloccare mentre sta modificando il campo da 1 a 0 (nel caso in cui lo script non abbia trovato campi con send = 0) allora cn il link si può modificare i campi manualmente e non in automatico. Dopo averlo fatto si potrà tranquillamente lanciare lo script e mandare il msg in tutta tranquillità.
    A me sembra migliore rispetto a quella del LIMIT perchè molto più automatizzata. Con il limt saresti cmq costretto a stare lì vicino a eseguire lo script su tot record. Così invece fa tutto lo script e si dovrà intervenire manualmente solo nel caso in cui si dvesse bloccare il pc (Cosa che non è affatto scontata)
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    105
    CONSIGLIO
    Puoi anche inserire un link che ti permetta di cambiare lo "status" senza che vengano inviati msg.
    Non ho ben capito questa cosa

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    105
    Risolto in questo modo:
    I dati degli utenti si trovano in tre tabelle diverse e possono eserci dei doppioni perciò ho deciso di creare 2 programmi anziche 1solo.


    PRIMO SCRIPT
    Creo una tabella temporanea (CREATE TABLE) dove inserisco direttamente il messaggio da inviare e il campo SEND
    Seleziono gli utenti della tabella 1con DISTINCT telefono.
    Inserisco i dati nella tabella temporanea.
    Faccio allo stesso modo con le altre due tabelle.
    FINE PRIMO SCRIPT

    Creando la tabella temporanea ho la possibilità di controllare manualmente se ci sono errori.


    SECONDO SCRIPT
    Seleziono gli utenti della tabella temporanea con DISTINCT telefono.
    Inizio il ciclo e l'invio del messaggio
    Se il msg è stato inviato SEND 0 diventa 1 (come diceva mircov)
    FINE SECONDO SCRIPT

    Se tutti i campi sono a SEND 1 elimino la tabella e tanti saluti.

    Non ho ancora capito il link a cosa serve?

  9. #9
    Originariamente inviato da mircov
    Anche se va in stallo cmq ha processato tot righe. In queste righe il flag quindi passerà da 0 a 1.
    Rilanciando lo script con lo stesso messaggio ne modificherà ancora fin quando non finiranno e saranno tutti settati a 1. A quel punto lo script stesso provvederà a modificare il campo da 1 a 0.
    Il link che permette di modificare diettamente i campi da 1 a 0 serve come sicura nel senso che se i record sono veramente tanti e lanciando lo script si dovesse bloccare mentre sta modificando il campo da 1 a 0 (nel caso in cui lo script non abbia trovato campi con send = 0) allora cn il link si può modificare i campi manualmente e non in automatico. Dopo averlo fatto si potrà tranquillamente lanciare lo script e mandare il msg in tutta tranquillità.
    A me sembra migliore rispetto a quella del LIMIT perchè molto più automatizzata. Con il limt saresti cmq costretto a stare lì vicino a eseguire lo script su tot record. Così invece fa tutto lo script e si dovrà intervenire manualmente solo nel caso in cui si dvesse bloccare il pc (Cosa che non è affatto scontata)
    e chi ha mai detto di fare una solo query con LIMIT ?
    codice:
    do {
      query_con_LIMIT();
    }
    while(num_rows()>0)
    non si impalla ed è automatico (poi giochi col numero da mettere come LIMIT per ottimizzare le prestazioni
    <?php echo ' Emiliano Gabrielli (aka AlberT) ',"\n",
    ' socio fondatore e membro del direttivo del GrUSP ',"\n",
    ' AlberT_at_SuperAlberT_it - www.SuperAlberT.it ',"\n",
    ' IRC: #php,#AES azzurra.com ',"\n",'ICQ: 158591185'; ?>

  10. #10
    alza il buffer di mysql..
    invece che 10000 record in 1 minuti riesci a farne 10000000 in pochi secondi(si, ho un pochino esagerato..)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.