phpbar.de logo

Mailinglisten-Archive

[php] [OT] Lock Tables (MySQL) die richtige Lösung?

[php] [OT] Lock Tables (MySQL) die richtige Lösung?

David Molineus david at molineus.de
Mit Mai 4 21:05:02 CEST 2005


Hallo PHP Liste!

Für folgendes Problem bin ich dabei eine Lösung zu finden:
Zur Erfassung von Computern und zusätzlichen Hard- und 
Softwareinformationen wird auf jedem lokalen Rechner ein Programm beim 
Start des PCs ausgeführt. Dieses übermittelt, wenn notwendig, eine 
INI-Datei mit den Computerdaten, welche von einem PHP Script ausgewertet 
werden.

In der Datenbanken existieren m-n-Beziehung, wo die Verbindungen neu 
eingetragen werden müssen bzw. aktualisiert. Als beispiel verwende ich 
hier mal die Beziehung zwischen computer und software. Um zu prüfen, ob 
eine Verbindung zwischen eingetragener Software und dem Computer 
besteht, werden alle Softwareeinträge aus der Datenbank ausgelesen und 
mit den aktuellen Daten aus der Datei verglichen. Dabei kann es 
vorkommen, dass eine Software noch nicht in der Datenbank steht. Diese 
wird dann eingetragen.

Hier tritt aber mein Problem auf. Es ist davon auszugehen, dass mehrere 
Computer zur gleichen Zeit gestartet werden und somit die Daten 
aktualisieren wollen. Wird die Softwareliste gleichzeitig von zwei PCs 
ausgelesen, die beide die gleiche Software neu installiert bekommen 
haben, wird das Script für beide Computer nun parallel versuchen die 
Software eintzutragen. Dabei wird es unweigerlich zu einer Kollision 
kommen, da ein Script eher eintragen wird und das zweite eine duplikaten 
Eintrag erzeugen würde.

Um das Problem zu lösen habe ich mir überlegt, dass man die Tabelle 
sperren könnte, solange die Daten für einen PC abgelichen werden. Dabei 
habe ich aber einige Fragen zur Verhaltensweise von gesperrten Tabellen:

1. Wird die Tabelle in einer Datenbankverbindung gesperrt, bekommt eine 
weiter zugreifende Verbindung dann eine Fehlermeldung, oder wartet MySql 
dann bis die Verbindung freigegeben wird und führt dann die nächste 
Anfrage durch?

2. Angenommen die zweite Anfrage wird dann ausgeführt, wenn die erste 
die Tabellen wieder frei gibt, kann diese Verzögerung zu Problemen 
führen, wenn ca. 50 Abfragen gleichzeitig versuchen darauf zuzugreifen? 
Oder ist die Verzögerung so gering, dass das wartende Script kein 
Problem dabei hat (max_execution time)?

Ich hoffe ihr habt trotz des langen Textes fertiggelesen  :-) und hoffe, 
dass ihr mir weiterhelfen könnt. Durch die Angaben im MySQL-Manual unter 
http://dev.mysql.com/doc/mysql/de/lock-tables.html werde ich nicht 
wirklich schlau.

Viele Grüße
David


php::bar PHP Wiki   -   Listenarchive