Locking: sinnvolle Strategie

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6858
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Locking: sinnvolle Strategie

Beitrag von af0815 »

charlytango hat geschrieben: Mi 18. Jun 2025, 17:58
Zvoni hat geschrieben: Mi 18. Jun 2025, 15:46 AUTSCH!!
OK, bin ich noch nicht mit konfrontiert worden.
That's why I'm asking here ggg
Bei MS-SQL sind durch die Treiberschicht (FreeTDS meistens) einige Sachen besonders die StoredProcedures nicht besonders gut anzusprechen (Erfahrung mit SQLdb). Da gibt es massive Einschränkungen mit Rückgabewerten etc. Auch multiple Resordsets werden IMHO nicht unterstützt.

Nachdem ich für Linux programmieren musste/durfte, konnte ich natürlich nicht auf ZEOS und dort ADO als Treiberschicht ausweichen. Überhaupt habe ich da wenig aktuelles Wissen, wie ZEOS (vielleicht besser) damit umgeht. Für Spezialfragen ZEOS betreffend kann ich nur auf das dortige Forum verweisen, das sehr rasch und kompetent antwortet. Wenn man echt Probleme mit Englisch hat, einfach das ganze dort dual (1x durch google translate) posten, etliche dort sind deutschsprachig :-)

Vielleicht auch noch ein kleiner Hinweis zu MS-SQL. Der Server läuft auch unter spezifizierten Linux-Versionen sehr gut und auch in der 'freien' Version mit den entsprechenden Einschränkungen. Absolut stabil (jahrelang produktiv im EInsatz) und lässt sich mit den wirklich exzellenten SQL-Tools von M$ hervorragend bedienen und warten. Vor allen sind die Debugging und Informationstools ein echter Hammer (ja, ich habe einige M$-Schulungen durchlaufen, also kenne ich doch einiges von der Pike auf, deswegen auch MS-SQL geschädigt ).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 1096
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Locking: sinnvolle Strategie

Beitrag von charlytango »

Zvoni hat geschrieben: Mi 18. Jun 2025, 11:05 "ID .. irgend eine Art des Prim Keys (vielleicht autoincrement)" --> Definitiv nicht Auto-Increment.
Eher im Sinne von:
Tabellen-Name||ID-Des-Satzes||Was-sonst-Noch

Weil nur OHNE AutoIncrement kannst du in die Situation kommen, dass ein Primärschlüssel-Wert bereits in der Tabelle ist, als solches auch erkannt wird, falls User 2 versucht, denselben Satz zu ändern
Einigen wir uns doch bitte auf ein paar Begrifflichkeiten sonst denken wir aneinander vorbei, was bei euch hier schade wäre, denn ich will ja aure grauen Zellen anzapfen 8)

Ich nenne das logische Konglomerat (zB ein Kontaktfenster einer Person) das aus mehreren Tabellen besteht einmal das Sperrobjekt.

Die Tabelle die das leisten soll ist

TLocking
*************
LockingID .. irgend eine Art des Prim Keys (vielleicht autoincrement)
UserID .. user der sperrt
LockingTheme ... ZB "K" für Kontakte, "F" für Faktura
SperrObjektID ... die zum Sperrobjekt gehörende Prim ID zB einer Person.
LockingTimeStamp .. Wann wurde der Lock eingetragen

LockingType ... experimentel, ich denke an "read" oder "edit"
(vermutlich ist das ohnedies schon obsolet)

irgendetwas ähnliches wie das

Code: Alles auswählen

BEGIN TRANSACTION; 
-- Attempt to acquire the lock by updating the control row 
INSERT into TLocking (UserID,LockingTheme,SperrObjektID)
Values(4711,“K“,<PersID aus der Kontaktetabelle>)
WHERE NOT EXISTS  etc etc

-- Check if the lock was acquired (1 row affected)
IF @@ROWCOUNT = 1
BEGIN
    COMMIT;
END
ELSE
BEGIN
    -- Lock was not acquired, rollback
    ROLLBACK;
    RAISERROR ('Could not acquire lock. Another user holds the lock.', 16, 1);
END
END TRANSACTION;

Joh
Lazarusforum e. V.
Beiträge: 299
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Locking: sinnvolle Strategie

Beitrag von Joh »

Also ich bin eindeutiger Verfechter davon, einzelne Datensätze zu sperren.
Früher habe ich die Sperre einfach beim Ersten editieren gesetzt, heute bin ich dafür, das der Benutzer erst per Auswahl in den Editiermodus gehen muß.
Aber das ist eher meinem Tremor-Kunden geschuldet: irgendwo reingeklickt, irgendwas reingeschrieben, dann gespeichert...


Es stellt sich für mich erstmal die Frage, wie viele User sind betroffen.
Wer editiert was.
Hier schwirrte was von 10 Usern durch den Raum.

Meine Frau würde sagen: lass doch mal die Kirche im Dorf.

Bei 10 Benutzern kenne ich das so:
- Ein paar schreiben Angebote
- Eine/r schreibt Rechnungen
- Eine/r editiert Kunden
- Eine/r editiert Artikel

Kunde 0815 Meyer wird nur von Frau Witt bearbeitet.
Und wenn der Verkäufer doch einen Kunden anlegt, wird dieser Kunde von keinem anderen bearbeitet werden.
Wenn tatsächlich mal 2 Benutzer den gleichen Datensatz bearbeiten wollen: solange die Meldung eindeutig ist, wird der Vorgang zur Seite gelegt und später bearbeitet.
Der Lagerfuzzi liest eh nur und schreibt Listen.

Bei einem Record-Locking kommt sich da eigentlich keiner in die Quere.
Nur weil ich Mittags Kunden Meyer gelockt habe, will
i) kein weiterer dort editieren
ii) wenn doch, heißt es spätestens beim zweiten Mal: wenn du in die Pause gehst: schließ den Vorgang ab.

Auf dem Lager darf auch keiner den einzigen Gabelstapler damit blockieren, das er die Würstchendosen einzeln ins Regal räumt: 6 Lagen à 12 Kartons à 12 Dosen.
just my two Beer

Antworten