phpbar.de logo

Mailinglisten-Archive

Re: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble



Solche Probleme entstehen oft aus dem Datenbankdesign
heraus. Hier muss man sorgfältig prüfen, ob es nicht einfachere
Schutzmechanismen gibt. Prinzipiell wäre im Beispiel die Frage
zu stellen, ob den zwei Nutzer sich mit dem gleichen Nutzernamen
überhaupt vollständig zeitgleich anmelden können. Ich halte den
Fall für eher unwahrscheinlich. Bei hoher Nutzerzahl ist es wohl
eher kritisch, die gesamte Tabelle zu LOCKen. Letztendlich wird
aber jeder Request für sich abgehandelt. Also immer Formular
nach Formular, soweit war deine Beobachtung richtig. Und die
genauen Zeitpunkte sind nie feststellbar. Richtige Datenbanken
(nicht MySQL) kennen dafür COMMIT/ROLLBACK TRANSACTION,
mit denen sich solche Prozesse zusammenfassen lassen.
In ASP kann man alternativ auch die Applikation (das Skript)
locken. PHP / MySQL verzichtet darauf, um performanter zu sein,
was ja auch gelungen ist. Also ist etwas mehr Kreativität gefragt,
für solche Sachen.
1. Ansatz:
Schreibvorgänge niedriger priorisieren:
set SQL_LOW_PRIORITY_UPDATES=1
oder
INSERT LOW_PRIORITY
Dann haben die SELECTs immer Vorrang, was zumindest etwas
das Gleichzeitigkeitsproblem löst.
2. Ansatz
Tabelle LOCKen (aus Handbuch):
      mysql> LOCK TABLES trans READ, customer WRITE;
      mysql> select sum(value) from trans where customer_id= some_id;
      mysql> update customer set total_value=sum_from_previous_statement
                 where customer_id=some_id;
      mysql> UNLOCK TABLES;
WRITE verriegelt die Tabelle nur für Lese!- und Schreibvorgänge. Der nächste
User
wartet also, bis der letzte Schreibprozess abgeschlossen wurde.
3. Ansatz
Lasse die gleichzeitige Eintragung zu und räume die DB
ab und zu auf. Ich mache solche Garbage Collection mit einem
Skript, das etwa alle 50 Aufrufe mal anspringt (per random).

jörg





-----Ursprüngliche Nachricht-----
Von: Armin Steiner <steiner_(at)_dynamic-webpages.de>
> Hi Liste,
>
[...]
>
> Nun musste ich gerade feststellen, das das (zumindest unter
> Windows) anders läuft. Da gibts keine Ampeln.
> Szenario:
> Eingabe Formular, mittels dem man Kundendaten eingeben
> soll. Mittles Abfrage wird überprüft, ob der Eintrag schon
> vorhanden ist oder nicht (wenn ja: Fehler, wenn nein: OK)
> Wenn man aber von zwei Rechnern im WindowsNetzwerk
> gleichzeitig auf die DB zugreift, wird dieser Überprüfungs-
> mechanismus ausgehebelt. Dann sind doppelte Einträge problemlos
> möglich --- GRMBLE-GRRR!!!
>
> Sagt mir jetzt BITTE BITTE, das es sich um einen
> Windows BUG handelt, das das alles unter UNIX nicht
> passieren kann, weils da Ampeln gibt, ja ??! Bitte ....
>
> ... oder ansonsten - wenn ihr den Fehler/Bug/Problem kennt,
> gebt mir nen Tipp ....
> (Richtung LOCK??)
>
> DANKE:-)
>
> mit bestem Gruß
>
...

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive