Mailinglisten-Archive |
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