Tipps mySQL Daten achreiben



  • Moin Moin zusammen,

    ich hab eine for Schleife welche folgendes macht..

    for(int i = 0; i<12; i++){
    		//printf("SD: %d, groupAction: %d\n",i, groupAction[i]);
    
    		SDstate[i] = groupAction[i];
    
    		sprintf(buf, "UPDATE tStatus SET status=%d WHERE id=%d", groupAction[i], i+1); 
    		if (mysql_query(con, buf)) {
    		   	finish_with_error(con);
    		}
    		usleep(5);
    	}
    

    es handelt sich dabei um einen Status von Lampen.

    diese Schleife wird ausgeführt wenn jemand z.b alle Lampen aufeinmal ausschalten....

    und das dauert dann aber ab und zu echt lange...
    Was kann ich tun um das ganze schneller zu machen?

    Zur Hardware.. Es handelt sich um einen PI3



  • Ich weiß nicht was PI3 ist, oder was "echt lange" für dich heißt, aber wenn *das* "echt lange" dauert (ein paar Sekunden? Minuten? Monate?), dann ist ein PI3 vermutlich ein 6502 in einem Toaster, mit einer IP over Avian Carriers-Anbindung?

    Du könntest nur die Felder updaten, die sich geändert haben. Oder vielleicht hilft das: http://stackoverflow.com/questions/3432/multiple-updates-in-mysql



  • Vermutlich fängt jeder mit der Datenbankprogrammierung so an, irgendeinen string zusammenzuklöppeln und den dann als Query an die DB zu schicken.

    Das ist aber Quark.

    Du musst Dich mit prepared Statements anfreunden.



  • RASPBERRY PI 3 !

    Lange heißt einige Sekunden.



  • Glaube ich dir nicht. 12 simple UPDATEs dauern keine einige Sekunden.



  • Es muss aber noch gesagt werden dass ich noch eine WebGUI dazu habe, die jede 300ms die DB ausliest.



  • Da wird dir so keiner helfen können. Das Problem ist nicht diese Schleife, das muss was anderes sein.

    Dass sich nur Unregistrierte mit wenig hilfreichen Antworten melden ist auch ein gutes Zeichen dafür, dass die Frage Kacke ist.


Log in to reply