php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 24-04-2010, 00:59
FeGm
 Registrierter Benutzer
Links : Onlinestatus : FeGm ist offline
Registriert seit: Aug 2007
Beiträge: 2
FeGm ist zur Zeit noch ein unbeschriebenes Blatt
Standard [MySQL] Eine Tabelle, mehrere Nutzer - Zeilen sperren (lock)?

Guten Abend zusammen,

ich möchte mein Projekt ausbauen und momentan steht das Problem an, was meine Anwendung macht, wenn mehrere Benutzer an einer Tabelle arbeiten. (MySQL InnoDB, PHP 5)

Grob dargestellt:
In der Tabelle sind viele einzelne Einträge, und jeder Benutzer würde jeweils an einem zur Zeit arbeiten. Bisher bestand nicht die Notwendigkeit, zu prüfen ob der Datensatz den man nun bearbeiten möchte bereits von jemand anderem bearbeitet wird. Dies soll/muss jetzt geändert werden.

Mein Ziel ist also, bevor ein Nutzer einen Datensatz bearbeiten kann, zu prüfen ob jemand anders gerade daran arbeitet, und falls das der Fall ist, die Möglichkeit der Bearbeitung zu verwehren bis der erste Benutzer fertig ist.

Ich hatte daher die Möglichkeit bei InnoDB gefunden, wo es möglich ist, mit InnoDB auch einzelne Zeilen in einer Tabelle zu sperren, wie dies sonst mit "Lock Tables" für Tabellen möglich ist.

Da ich mich damit noch nicht umgehend befassen konnte und auch nicht weiß, ob das nötig ist, wollte ich vorher Fragen wie sinnvoll das für einen solchen Anwendungsbereich ist. Oder ob man in der Anwendung selber verwalten sollte, welcher Benutzer gerade was bearbeitet oder ob es gar andere Möglichkeiten gibt?

Wäre nett wenn mir jemand von euch einen Denkanstoß liefern könnte oder von seinen Erfahrungen (kurz) Berichten könnte bezüglich dieser Herausforderung.

Vielen Dank und eine schönes Wochenende,
FeGm
Mit Zitat antworten
  #2 (permalink)  
Alt 24-04-2010, 03:58
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

da Zugriffe auf geLOCKte Tabellen oder Datensätze einfach blockieren, bis diese wieder freigegeben werden, ist diese Methode nur für kurzzeitige Operationen sinnvoll. Sonst würde ein Benutzer den Datensatz auschecken, eine halbe Stunde daran rumfummeln (Kaffeetrinken, da noch ein Anruf und dort noch schnell was für die Hauspost fertig machen) und alle anderen müssen genau so lange warten, bis die Anwendung wieder reagiert.

Die einfachste Variante ist eine allumfassende Where-Klausel beim Update zu benutzen, d. h. es wird nicht nur sowas wie
Code:
where id=3261
beim Update verwendet, sondern es werden alle Spalten mit der vorherigen Version abgeglichen. Dadurch schlägt das Update automatisch fehl, wenn zwischenzeitlich ein anderer Benutzer was verändert hat. Dem aktuellen Benutzer kann das dann von der Anwendung entsprechend signalisiert werden, so dass der die Möglichkeit bekommt, den Konflikt aufzulösen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 24-04-2010, 09:36
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Optimistic concurrency control

In Doctrine wird es Optimistic Locking genannt und durch ein Versions-Feld mit dem Typ Integer realisiert. Bei jeder Änderung wird die Version um 1 erhöht. Bearbeiten also zwei Benutzer die Version 27 eines Eintrags, wird sie beim ersten Speichervorgang auf 28 gesetzt. Wenn jetzt der zweite Benutzer auch speichern möchte, geht das nicht, weil er ja die Version 27 bearbeitet hat, diese aber nicht mehr aktuell ist. Wie dann dieser Fehler behandelt wird, entscheidet der Programmierer.

Geändert von h3ll (24-04-2010 um 09:42 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 24-04-2010, 10:31
FeGm
 Registrierter Benutzer
Links : Onlinestatus : FeGm ist offline
Registriert seit: Aug 2007
Beiträge: 2
FeGm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke das sind schon mal sehr gute Ideen. Mir war nicht bewusst das ein Lock soviel anhält, dachte ich könnte damit schreib Zugriff auf eine Zeile sperren und fertig :/

Danke für die Ideen, werde wohl Optimistic Locking mit Int oder Timestamp vorziehen, da es bei größeren Datenmengen nicht so lastig für die DB ist, diese zu vergleichen. Zusätzlich werde ich mit Ajax regelmäßig prüfen, ob jemand schneller war beim bearbeiten und dies ggf. ausgeben
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Funktion] Mehrere Zeilen als eine Ausgeben knoebi PHP Developer Forum 4 31-08-2007 16:16
[MySQL 4.0] Mehrere Variable in eine Tabelle noxxxyyy SQL / Datenbanken 5 03-05-2005 14:54
Mehrere Zeilen einer MySQL Tabelle ausgeben... avatarX PHP Developer Forum 4 17-03-2005 01:33
Mehrere Zeilen aus MySQL auswählen SimsonRoland PHP Developer Forum 3 03-09-2004 10:01
[suche] online Filmdatenbank für mehrere Nutzer karatekid6000 Apps und PHP Script Gesuche 3 14-11-2003 14:05

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:05 Uhr.