Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Programmablauf synchron? [Verständnisfrage]

  Alt 31. Aug 2009, 18:07
Zitat von Dragon27:
Ich glaube, dass AbsoluteDB keine Anfragen paralell ausführen kann, oder? Ist ja nur eine Datei...
Damit hat das nichts zu tun, MSSQL hat auch nur eine Datei (ok, und eine für die Logs). Das Problem ist:

Prozess A will in einer Tabelle einen Wert um eins erhöhen, Prozess B will das auch (die gleiche Stelle).
A liest den Wert (z.B. x=10), erhöht ihn (x=11). Weiter kommt er nicht, denn B will auch mal. B liest also (x=10) und erhöht ihn (x=11).
Nun ist A wieder dran und speichert die 11. B tut das auch und alle sind zufrieden. Alle? Also ich nicht.

Wenn A nun seine ganze 'Transaktion' exklusiv ausgeführt oder wenigstens die Tabelle gesperrt hätte, dann wäre ich zufrieden:
A sperrt die Tabelle, liest den Wert (z.B. x=10), erhöht ihn (x=11). Weiter kommt er nicht, denn B will auch mal. B will also lesen, darf nicht und sagt 'na gut, ich warte, bis die Tabelle wieder frei ist'.
Nun ist A wieder dran und speichert die 11 und entsperrt die Tabelle. B wacht auf, liest (x=11) und erhöht (x=12) und speichert. So sieht das schon besser aus.

Zu deiner Frage:

Entweder sorgst Du dafür, das aus deinem Programm nur streng sequentiell Operationen auf den Daten durchgeführt werden, oder Du machst das parallel (was u.U. weeesentlich schneller ist), kapselst deine Transaktionen aber. Dafür gibt es in so gut wie jedem DBMS, vermutlich auch ADS, entsprechende Mechanismen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat