DB concurrency - Checksum vs Timestamp

we zijn in de overgang naar een nieuw databasesysteem. De database is van het type ISAM en de API biedt geen manier om te detecteren of een record is gewijzigd door een andere gebruiker.

Daarom moet ik deze functionaliteit aan de kant van de klant implementeren. Ik ben momenteel bezig met het berekenen van een controlesom met behulp van de voor en na recordbuffers en het vergelijken van het resultaat.

Mijn vraag is, aangezien de kans bestaat dat voor twee verschillende records dezelfde checksumwaarde kan worden berekend, zou het dan beter zijn om in plaats daarvan een tijdstempelveld te hebben?

Hoe wordt de record veranderde detectie normaal behandeld?

Dank je.

0
Een controlesom wordt gebruikt om te bepalen of gegevens mogelijk geldig zijn, dat wil zeggen een creditcardnummer of een bibliotheekkaartnummer. Als de controlesom geldig is, is het kaartnummer mogelijk geldig. In dit geval is het gebruik van een controlesom om te bepalen of een record is gewijzigd, niet waarvoor een controlesom is bedoeld.
toegevoegd de auteur John Sobolewski, de bron

1 antwoord

Beter zou niet een tijdstempel zijn, wat onbetrouwbaar is, maar een integer veld versie , die uw clientcode kan gebruiken om gelijktijdige wijzigingen in DB te detecteren.

Dit wordt 'optimistische vergrendeling' genoemd, wanneer uw transactie geen DB-bronnen blokkeert totdat het tijd is om DB bij te werken. Op dit moment heeft het vergrendeld benodigde DB-resources (bijvoorbeeld tabellen), leest het de versie van DB en controleert of het verwachte waarde heeft. Zo ja, dan is het veilig om de database bij te werken samen met het versienummer in DB. Als dit niet het geval is, betekent dit dat er een gelijktijdige update is en de transactie moet worden afgebroken.

Natuurlijk, als je veel abortussen zou hebben, betekent dit dat je "Pessimistische vergrendeling" nodig hebt, waarbij je app middelen blokkeert voor de hele transactie. Als uw DB-stuurprogramma dit niet ondersteunt, hebt u een ander gedeeld slot nodig, zoals een mutex. Deze aanpak verlaagt de doorvoer in de meeste gevallen, omdat gelijktijdige transacties moeten wachten totdat één transactie vergrendelde bronnen vrijmaakt.

0
toegevoegd
Bedankt voor die Victor. Hoe kan ik dit versienummer genereren? is het slechts een getal dat wordt verhoogd telkens wanneer een record wordt bijgewerkt?
toegevoegd de auteur There is no spoon, de bron
Ja, meestal is het slechts een nummer.
toegevoegd de auteur Victor Sorokin, de bron