zwei skripte, zwei ports, eine datenbank - konfliktpotential?



  • heda

    folgende situation: webserver nimmt normal per port 80 verbindungen an und schreibt daraufhin etwas in eine datenbank. quasi gleichzeitig kommt eine verbindung an einem anderen port an und will genau an der stelle die datenbank auslesen, an der das erste skript was geschrieben hat.. ich kenn mich mit threads etc nur sehr grob aus, deshalb die frage, ob sich die beiden skripte beißen können? immerhin haben heutige server multicore prozessoren...

    hm.. klingt vielleicht dumm die frage, aber ich kenn mich wie gesagt in dem umfeld nicht aus... 🙂

    danke schonmal!



  • Ob es Konflikte gibt, hängt davon ab, ob das Skript beim Schreiben die Datenbank immer in einem konsistenten Zustand lässt.

    Wenn das eine Skript erst A und dann B schreibt ohne beides in eine Transaktion zu packen, dann kann es passieren, dass das andere Skript A aber nicht B sieht. Anders gesagt, dann lässt das Schreib-Skript die Datenbank in einem inkonsistenten Zustand, und das führt zu Problemen bei gleichzeitigem Lesen.



  • ok, leuchtet schonmal ein.

    wäre ein mysql_query insert befehl, der einen datensatz in die tabelle schreibt,
    eine transaktion?
    oder sollte ich beim auslesen der datenbank per "skript zwei" einfach den eintragszeitpunkt abfragen, und wenn seitdem nicht eine gewisse zeitspanne vergangen ist, dieser eintrag nicht mit ausgelesen wird..?! das wäre jetzt die sichere alternative... einen halben eintrag aus der datenbank auszulesen würde ich gerne vermeiden... ich glaube, so mache ich es, sonst mache ich mir noch zu viele sorgen.. 🙂

    danke erstmal für die antwort!



  • pommes schrieb:

    wäre ein mysql_query insert befehl, der einen datensatz in die tabelle schreibt,
    eine transaktion?

    Ja. Ein einzelner insert-Befehl ist garantiert atomar. Sobald du aber mehr als ein einziges insert machst, musst du alle inserts in eine Transaktion packen, um keine inkonsistenten Zustände zu bekommen.

    pommes schrieb:

    oder sollte ich beim auslesen der datenbank per "skript zwei" einfach den eintragszeitpunkt abfragen, und wenn seitdem nicht eine gewisse zeitspanne vergangen ist, dieser eintrag nicht mit ausgelesen wird..?! das wäre jetzt die sichere alternative...

    Nein, das wäre gar nicht sicher. Überleg dir es mal mit Stift und Papier, du umgehst damit die Probleme überhaupt nicht.



  • also ich hab mir jetzt zeit gelassen beim nachdenken und steige nicht dahinter, warum ich die probleme mit meinem ansatz nur umgehen würde... kannst du bitte nochmal anschieben?


Anmelden zum Antworten