sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL række læselås

Dette er en egenskab ved transaktionsisolering. Der er skrevet meget om det, og jeg vil varmt anbefale oversigten i Designing Data-Intensive Applikationer . Jeg syntes, det var den mest nyttige beskrivelse til at forbedre min personlige forståelse.

Standardpostgres-niveauet er LÆS KOMMITTERET som gør det muligt for hver af disse samtidige transaktioner at se en lignende (midler til rådighed), selvom de burde være afhængige.

En måde at løse dette på ville være at markere hver af disse transaktioner som "SERIALIZABLE" konsistens.

Dette bør håndhæve korrektheden af ​​din ansøgning til en pris på tilgængeligheden, dvs. i dette tilfælde vil den anden transaktion ikke få lov til at ændre registreringerne og vil blive afvist, hvilket ville kræve et forsøg igen. For en POC eller en lavtrafikapplikation er dette normalt et helt acceptabelt første skridt, som du kan sikre korrekthed lige nu.

Også i den ovennævnte bog synes jeg, at der var et eksempel på, hvordan ATM's håndterer tilgængelighed. De tillader denne løbstilstand og brugeren at overtrække, hvis de ikke er i stand til at oprette forbindelse til den centraliserede bank, men begrænser det maksimale udtræk for at minimere eksplosionsradius!

En anden arkitektonisk måde at løse dette på er at tage transaktionerne offline og gøre dem asynkrone, så hver bruger påberåbt transaktion publiceres i en kø, og så ved at have en enkelt forbruger af køen undgår du naturligvis eventuelle raceforhold. Afvejningen her er den samme, der er en fast gennemstrømning tilgængelig fra en enkelt arbejder, men det hjælper med at løse korrekthedsproblemet lige nu :P

Låsning på tværs af maskiner (som at bruge redis på tværs af postgres/grpc) kaldes distribueret låsning og har en god del skrevet om det https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html




  1. Python:MySQL:Håndtering af timeouts

  2. SQL Server kommandolinje backup erklæring

  3. Hvordan får jeg PHP og MySQL til at fungere på IIS 7.0?

  4. Forbinder SQL-udvikler til Oracle 12c