Skip to content

Commit 481a29e

Browse files
committed
add transacties en concurrentie
1 parent 9dfedc3 commit 481a29e

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

Diff for: samenvatting.md

+55-2
Original file line numberDiff line numberDiff line change
@@ -710,10 +710,63 @@ Twee roosters zijn __view equivalent__ als
710710
- en de laatste write moet hetzelfde is
711711

712712
## Concurrentiecontrole
713+
Het is niet altijd mogelijk om een rooster te serializeren of dit te testen. Daarom worden er enkele regels (protocols) gebruikt om serializeerbaarheid te verzekeren.
714+
713715
### Vergrendeling (locking)
714-
### Tijdstempels en multiversie-technieken
716+
717+
Een slot beperkt toegang tot een element.
718+
719+
Het eenvoudigste soort slot is een __binair slot__ dat meer twee toestanden heeft (wel/geen toegang).
720+
Bij een binair slot moet iedere transactie wachten tot het slot vrij is en het slot vrij geven als de transactie klaar is.
721+
722+
Een __read/write lock__ of __gedeeld/exclusief slot__ heeft drie toestanden en kan lezen en schrijven apart beperken. Een transactie mag altijd lezen als er het de staat van het slot gedeeld is. Om de schrijven moet de transactie exclusieve toegang hebben.
723+
724+
Met deze regels alleen wordt geen serialiseerbaarheid gegarandeerd.
725+
726+
__Twee fasen vergrendeling__ is een protocol waarbij een transactie eerst al zijn locks op vraagt voor een lock vrij te geven. Er zijn dus twee fases de expanding phase en de shrinking phase.
727+
728+
Een __deadlock__ is een situatie waarbij twee locks op elkaar wachten waardoor niets kan gebeuren.
729+
730+
Een variant van twee fasen vergrendeling neemt locks alvorens iets te schrijven. Dit vermijd deadlocks maar is niet altijd mogelijk. Omdat het volgende doel van een lock kan afhangen van een andere waarde.
731+
732+
### Tijdstempels en Multiversie-technieken
733+
734+
Ook tijdstempels (timestaps) zijn een techniek om deadlocks te voorkomen.
735+
736+
Een mogelijkheid is om enkel de oudste transactie te laten wachten op en lock.
737+
738+
Men kan ook gewoon wachten niet toelaten maar de transactie afbreken als die geen lock krijgt en later herstarten.
739+
740+
Een transactie zou ook alleen maar mogen wachten als die transactie waar op gewacht wordt niet aan het wachten is. Dit is __voorzichtig wachten__.
741+
742+
Er kan ook een __timeout__ zijn die een transactie afbreekt als die te lang moet wachten.
743+
744+
Een andere optie is om aan __deadlock detectie__ te doen. Hierbij worden deadlock niet voorkomen maar een van de processen wordt afgebroken als er een deadlock voordoet. Maar __starvation__ is hierbij een probleem als steeds hetzelfde proces afgebroken wordt.
745+
746+
Men kan ook deadlocks voorkomen door geen gebruik te maken van locks en enkel van tijdstempels.
747+
748+
Bij __multiversie__ concurrentiecontrole worden meerdere versies van een waarde bijgehouden, zo kan een oude versie nog gelezen worden.
749+
715750
### Optimistische concurrentiecontrole
751+
752+
Bij optimistische concurrentiecontrole wordt de transactie op een kopie van de data uitgevoerd en later uitgevoerd als het serialiseerbaar is. Zoniet wordt de transactie gewoon herstart.
753+
716754
### Granulariteit van items
717-
### Concurrentiecontrole in SQL
755+
Als we spreken over het lezen, schrijven of het nemen van een lock op een item kunnen we ons afvragen over wat we juist spreken.
756+
757+
Bij het kiezen van dit item hebben we dus een keuze we spreken over __granulaiteit__
758+
759+
- Database (grove granulariteit)
760+
- bestand
761+
- blok
762+
- record
763+
- veld (fijne granulariteit)
764+
765+
Hoe groter het item hoe minder mogelijk, hoe fijner het item hoe meer overhead.
766+
767+
__Intention locks__ zijn locks die een lock op lager nivewu toelaat.
718768

719769
## Herstel
770+
### Technieken voor onmiddellijke aanpassing
771+
### Technieken voor uitgestelde aanpassing
772+
### Schaduwpaginering

Diff for: samenvatting.pdf

3.36 KB
Binary file not shown.

0 commit comments

Comments
 (0)