Announcement

Collapse
No announcement yet.

Datensatz sperren oder geht auch .. ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz sperren oder geht auch .. ?

    Hallo zusammen,

    ich hab eine wohl recht bekannte Problemstellung,
    ein ClientProgramm ließt Daten aus der MySQL-DB und
    änder zu einem späteren Zeitpunkt Daten.
    Ich möchte verhindern das er dies tut sofern die Daten die sich zum Zeitpunkt der änderung in der DB befinden nicht mehr mit denen die er eingelesen hat übereinstimmen.

    Beispiel :

    Client 1 ließt Daten ein
    Client 2 ließt dieselben Daten ein
    Client 2 änder die Daten
    Client 1 will die Daten ändern darf es aber nicht


    Um das umzusetzen wollte ich eine CommitID in jeder Zeile speichern, die nach einem schreibzugriff incrementiert wird.

    Jetzt mach ich mir allerdings gedanken darum wie ich das ganz sicher umsetzen kann.
    Sicher in dem Sinn das nicht während 1 schreibt 2 schreiben will und die CommitID noch nicht erhöht wurde etc...

    Daher wollte ich den Befehl in dieser Form schreiben

    UPDATE blub SET a = .. ,b = .. commitid = eingelesenecommit+1 where commitid = eingelesenecommit and where id = ..

    wäre das auf die Problemstellung bezogen sicher?

    Wie würde das ganze aussehen wenn änderungen in mehreren Tabellen gemacht werden müssen?

  • #2
    Originally posted by Tallan View Post
    Sicher in dem Sinn das nicht während 1 schreibt 2 schreiben will und die CommitID noch nicht erhöht wurde etc...
    Das kann nicht passieren. Wenn 2 vor 1 schreibt, dann bekommt 1 die Fehlermeldung dass der Datensatz nicht mehr mit der Datenbank synchron ist. Natürlich darfst Du nicht nach jeder kleinen Änderung einen Commit machen, sondern musst alle Aktionen die einen Block bilden in eine Transaktion zusammenfassen.
    Ich würde evtl. GUIDs verwenden anstatt zu inkrementieren...

    Wenn es das Programm erlaubt könntest Du auch auf ein Tool setzen was Dir diese Arbeit abnimmt. NHibernate hat solch eine Funktionen z.B. schon eingebaut.

    Comment

    Working...
    X