zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Datenbank Verständnis Problem

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 25.07.2011, 20:53
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Ich würde es anders machen. In deinem Fall kann es passieren, dass ein solcher Datensatz nie mehr freigegeben wird, weil beispielsweise die Session beendet ist oder der Benutzer einfach den Browser schließt bzw. auf Abbrechen klickt und keine Änderung vornimmt. Ersteres und letzteres könnte man lösen. Doch du hast immer noch das Problem des Browser schließens.

Meiner Meinung hat der Kaffeetrinker halt Pech. Wenn er den Beitrag aufruft und dann meint er müsse erst noch einen Kaffee trinken gehen, dann muss er auch damit rechnen, dass seine Änderungen nicht mehr beachtet werden. Es würde also die erste Änderung berücksichtigt und der Kaffeetrinker würde eine entsprechende Meldung erhalten. Seine Änderungen würden nicht berücksichtigt.

Man kann zusätzlich informieren, dass der Eintrag bereits von (mindestens) einem Benutzer bearbeitet wird. Das ist gar nicht so schwer. Aber auch das muss man dann wieder lösen. Man braucht also bei jedem weiteren Aufruf des Beitrags eine Überprüfung ob der Kaffeetrinker noch bearbeitet oder nicht. Hierfür müsste man ein geeignet Zeitfenser finden, beispielsweise die Zeit bis zum "Session-Timeout".
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 25.07.2011, 21:25
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

chorn hat es ganz gut skizziert. Ich würde auf keinen Fall schon beim Aufruf irgendwas locken, damit blockiert man das System oder zumindest Teile, das halte ich für eine schlechte Lösung, auch wenn es einfacher zu realisieren ist.

Die Transaktion muss auch nicht über den gesamten Verlauf erfolgen, der Abruf am Anfang hat ja nicht zwangsweise auch einen Schreibvorgang zur Folge. Es reicht beim Speichern zu prüfen, ob es in der Zwischenzeit Änderungen gab, wenn nein dann commit, wenn ja dann rollback. Wer zuletzt speichern will hat halt pech und muss seine Änderungen kontrollieren/überarbeiten, genau wie bei der Versionsverwaltung.
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 25.07.2011, 22:25
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Argh, bitte klärt mich auf, ich sehe immer noch keine Notwendigkeit für Transaktionen, geschweige denn ein Szenario, wo Transaktionen helfen könnten diese Probleme zu beheben.

Ich komme mir so vor, als ob ich gar nichts mehr sehen können dürfte, so groß wie das Brett vor meinem Kopf sein muss.

Ich meine, wenn es darum geht, dass eine Bearbeitung eine Aktualisierung von mehreren Datensätzen zur Folge hat, dann ist das klar, aber wenn ich nur einen Datensatz in einer Tabelle habe, dann ist doch ein simples UPDATE-Query genauso atomar, wie eine Transaktion, oder nicht?

Ich meine, wenn zwei UPDATEs für den gleichen Datensatz reinkommen, dann hat erstmal das zweite UPDATE gewonnen, aber wenn ich z.B. "WHERE `lastModified` = 'XXXX'" (was auch immer der alte timestamp war) in die Bedingung aufnehme, dann ist die zweite Änderung nicht mehr erfolgreich und man kann entsprechend darauf reagieren.

Oder geht es hier darum, dass man innerhalb einer Transaktion den Datensatz zunächst per (z.B.) SELECT ... FOR UPDATE abfragen und locken kann, um dann sicher sein zu können, dass der Datensatz seit diesem Lesevorgang und dem dann folgendem Update nicht mehr geändert werden kann?
Mit Zitat antworten
  #14 (permalink)  
Alt 26.07.2011, 00:08
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von mantiz Beitrag anzeigen
Oder geht es hier darum, dass man innerhalb einer Transaktion den Datensatz zunächst per (z.B.) SELECT ... FOR UPDATE abfragen und locken kann, um dann sicher sein zu können, dass der Datensatz seit diesem Lesevorgang und dem dann folgendem Update nicht mehr geändert werden kann?
Genau so habe ich mir das gedacht, nur ohne das Locken. Wenn der Commit fehlschlägt gibts ja eh den Rollback, warum also selbst locken?
Mit Zitat antworten
  #15 (permalink)  
Alt 26.07.2011, 00:13
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von inta Beitrag anzeigen
Genau so habe ich mir das gedacht, nur ohne das Locken. Wenn der Commit fehlschlägt gibts ja eh den Rollback, warum also selbst locken?
Ah, OK.

Ist das so? Ich dachte, dass die Datensätze, die selektiert werden, explizit für das folgende UPDATE gelockt werden müssten. Wenn das nicht so ist, dann geht das natürlich so.

Danke, dann kann ich das Brett nun endlich abnehmen.
Mit Zitat antworten
  #16 (permalink)  
Alt 26.07.2011, 15:50
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Da ich mich auch den halben Thread über gefragt habe, was Transaktionen bringen sollen:

Der einzige Zweck der Transaktion besteht darin, dass ich beim Abspeichern des Datensatzes sicherstellen kann, dass zwischen dem Prüfungsvorgangs („Es wurde nichts verändert, während ich den Datensatz bearbeitet habe“) und dem tatsächlichen Aktualisieren des Datensatzes keine Änderung am Datensatz erfolgen kann.

Passt das so?
Mit Zitat antworten
  #17 (permalink)  
Alt 26.07.2011, 16:22
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Jop, so hab' ich das jetzt auch verstanden.

Was aber halt nur Fall 2 von den ursprünglichen Fällen abdeckt. Um Fall 1 muss man sich trotzdem selbst kümmern, z.B. indem das Datum der letzten Änderung beim Auslesen für das Formular zwischengespeichert und beim Save-Request mit übergeben wird. Sonst hat man da ja überhaupt keinen Anhaltspunkt, um festzustellen, ob der Datensatz in der Zwischenzeit geändert wurde.

Das war mein eigentliches Verständnisproblem, ich dachte erst, dass inta meinte, dass man diesen Schritt durch Transaktionen vermeiden könnte, was sich mir aber überhaupt nicht erschließen wollte.
Mit Zitat antworten
  #18 (permalink)  
Alt 26.07.2011, 16:26
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Ja, das trifft es ganz gut. Ich finde das ist ein sehr wichtiger Grund für Transaktionen, da sie helfen den Datenbestand konsistent zu halten. Ich halte Locks für weitaus problematischer, vor allem wenn sie über einen längeren Zeitraum aktiv bleiben.
Mit Zitat antworten
  #19 (permalink)  
Alt 26.07.2011, 16:33
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von mantiz
Das war mein eigentliches Verständnisproblem
Dito. Ich habe sogar einen Bekannten angehauen, ob er schon mal von requestübergreifenden Transaktionen gehört hat beziehungsweise ob er glaubt, dass die für sowas einen Sinn ergeben.

Zitat:
Um Fall 1 muss man sich trotzdem selbst kümmern, z.B. indem das Datum der letzten Änderung beim Auslesen für das Formular zwischengespeichert und beim Save-Request mit übergeben wird.
Oder vielleicht eine Checksumme über alle Felder des Datensatzes, um den unwahrscheinlichen Fall abzudecken, dass jemand in derselben Sekunde speichert, in der ich auslese.

PHP-Code:
$checksum md5($row['col1'] . $row['col2'] . $row['col3'/* ... */); 
Wird aber irgendwann auch Overkill.

Zitat:
Zitat von inta
[…]
Volle Zustimmung.
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 26.07.2011, 16:35
$("#mettbröttchen");
XHTMLforum-Mitglied
 
Registriert seit: 28.09.2010
Ort: Bremen
Beiträge: 448
zeji wird schon bald berühmt werden
Standard

Bin da jetzt mit Ajax noch nicht so ganz auf dem Laufenden, aber wäre es nicht auch denkbar mit Ajax alle x Min die Datenbank abzufragen und dem Kaffeetrinker dann eine nette kleine Mitteilung anzuzeigen, dass sich da was geändert hat?
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Text neben Navigationsleiste andi01 CSS 6 08.06.2011 17:54
HTML mit PHP Code aus Datenbank auslesen + ausführen Garlandt Serveradministration und serverseitige Scripte 14 01.05.2011 13:45
Mitwachsender Content und Footer Problem Bentham CSS 5 19.09.2010 12:49
IE 7: Zoom Problem, Höhen Problem, Text problem Cu Chullain CSS 4 02.09.2010 14:56
Problem mit Background-Color im FireFox to.ni CSS 2 31.08.2004 12:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:51 Uhr.