Transaction-Handling überarbeiten

Aufgabeninfo

Projekt: 

Typ: 

Feature-Wunsch

Zielversion: 

Status: 

Geschlossen

Lösung: 

Wird nicht behoben

Erledigt in Version: 

Aktuell ist es so, dass zwar immer und überall mit DB-Transactions gearbeitet wird. Aber ich glaube die Art und Weise wie das geschieht könnte besser sein. Standardmäßig arbeitet SQLite glaube ich immer mit Defered Transactions. Das hat zur Folge, dass 2 Transactions erstellt werden können aber derjenige der als erstes schreibt gewinnt im Endeffekt. Zusätzlich könnte es bei einem länger dauernden DB-Upgrade auch so sein, dass jemand anderes noch Lesend auf bereits veränderte Daten zugreift. Was auch nicht sonderlich praktisch wäre.

Entsprechend müssen die Transactions umgestellt werden. Diese müssen immer immediate sein. Im Falle eines DB-Upgrades sogar exclusive. Damit nicht noch jemand anderes darauf zugreifen kann. Es sei denn die Verbindung würde bereits bestehen. Aber das kann man einfach nicht verhindern.

Die Umstellung auf immediate hätte sogar noch den Vorteil, dass es möglich wäre einen "gleichzeitigen" schreibenden Zugriff von mehreren PCs aus zu ermöglichen. In diesem Falle sollte das Erstellen der zweiten Transaction bereits dazu führen, dass diese fehl schlägt. In diesem Fall müsste das Starten der Transaction dafür sorgen, dass es eine Zeit lang weiter versucht wird eine Transaction zu erstellen. Mit anderen Worten würde er warten bis das Erstellen der Transaction geklappt hat oder ein Timeout erriecht ist. Da das Schreiben sowieso immer asyncron geschieht wäre es sogar egal, ob es eine Sekunde länger dauert oder nicht.

Kommentare

Bei "_SqlConnection

Bei "_SqlConnection.BeginTransaction()" kann man wohl einen Level angeben. Das Ganze noch mit einem optionalen Parameter versehen und schon sollte es klappen.

Die Transactions waren ganz

Aufgabeninfo

Status: 

Erledigt

Lösung: 

Wird nicht behoben

Erledigt in Version: 

Die Transactions waren ganz offensichtlich schon in diesem Modus. Der wurde jetzt noch mal zusätzlich angegeben. Allerdings ist das wechseln in den exklusiven Modus ganz offensichtlich nicht so einfach. Mit anderen Worten. Zu viel Aufwand für die größe der Änderungen.

(Kein Betreff)

Aufgabeninfo

Status: 

Geschlossen