ACID is een acroniem voor de vier belangrijkste eigenschappen van een database: atoomheid, consistentie, isolatie en duurzaamheid. Het wordt vaak geassocieerd met relationele databases, maar een NoSQL (niet-relationele) database kan ook de ACID-regels volgen. ACID-transacties zijn gebruikelijk in veel van de populaire database-engines die op de markt beschikbaar zijn, en ze zorgen ervoor dat lees- en schrijfacties de integriteit van uw data niet verstoren.
Wat is Database ACID?
Een database die de best practices van ACID volgt, heeft de volgende kenmerken:
- Atomiciteit: Voorkom dataverlies, verweesde records en gedeeltelijke transacties met atoomkracht. Een database met atoomkracht biedt "alles of niets"-transacties, zodat u geen data verliest als een deel van een transactie midstream uitvalt.
- Consistentie: Tabelbeperkingen in ACID-databases vereisen dat alle transacties data in een consistent formaat opslaan.
- Isolatie: Een ACID-database zorgt ervoor dat de transacties geen vuile reads of writes opleveren door data te isoleren en transacties één voor één uit te voeren.
- Duurzaamheid: Systeemstoring (bijv. een stroomstoring) kan transacties verstoren, dus een ACID-database zorgt ervoor dat failover dataverlies door een kritieke gebeurtenis voorkomt.
Atomiciteit
Moderne databasetransacties hebben meer dan één stap om een record af te ronden. Een klant kan bijvoorbeeld een order aanmaken, dus een opgeslagen procedure gebruikt een INSERT-statement om een record toe te voegen aan de orders en products_ordered tabellen. Als het toevoegen van een record aan de ordertabel mislukt, dan wilt u geen record toevoegen aan de tabel products_ordered. Dit zou een verweesd record creëren.
Met atoomkracht keert de database alle transacties terug wanneer er een faalt, zodat de data consistent blijven en corruptie wordt voorkomen. Alleen wanneer alle stappen in een transactie met succes zijn voltooid, worden de gegevens opgeslagen. Atomiciteit vermijdt datacorruptie, dataverlies en verweesde records.
Consistentie
Relationele databases hebben beperkingen waardoor alleen specifieke soorten data kunnen worden opgeslagen. NoSQL-databases slaan data op met hun eigen ingestelde formaat. Als u bijvoorbeeld specificeert dat alleen een decimaal getal kan worden opgeslagen in een kolom voor het totaal van de bestelling, dan zal een poging om een string op te slaan resulteren in een storing. Het consistent houden van data biedt ontwikkelaars een bekende waarde wanneer ze met een dataset werken.
Consistentie in een database betekent dat data kunnen worden voorspeld, wat betekent dat u weet of u data voor een bepaald record ophaalt, u een verwacht resultaat krijgt. Aan de hand van het voorbeeld van de ordertabel weet u dat u een decimale waarde zult ontvangen voor elke query die een waarde ophaalt uit de totale kolom van de order.
Isolatie
Vuile lees- en schrijfbewerkingen vinden plaats wanneer een gebruiker een query uitvoert op het specifieke moment waarop de database ook wijzigingen in een waarde aanbrengt. Als u bijvoorbeeld het totaal voor alle bestellingen voor de maand wilt weten, kunt u een onjuist resultaat krijgen als u gegevens leest op het moment dat het totaal van een bestelling wordt bijgewerkt. Hetzelfde kan gebeuren met schrijfacties als data worden gelezen voordat een eerdere updateverklaring kan worden uitgevoerd.
Vuil lezen en schrijven kan uw data beschadigen en de data-integriteit vernietigen. Geïsoleerde transacties voeren overzichten één voor één uit, zodat data consistent en ononderbroken blijven, zelfs met miljoenen dagelijkse transacties. Geïsoleerde transacties kunnen records vergrendelen, wijzigingen aanbrengen en vervolgens records vrijgeven voor de volgende transactie.
Duurzaamheid
Zowel gestructureerde als ongestructureerde databases moeten data consistent en permanent opslaan nadat een transactie is voltooid, zelfs als er een systeemstoring optreedt. Transactielogs en infrastructuurstoringen moeten ook worden geïmplementeerd, maar de database zelf moet in staat zijn om data consistent en zonder enige datacorruptie op te slaan. Database-engines hebben hun eigen strategieën en failover-technieken, maar beheerders moeten erop kunnen vertrouwen om data te herstellen.
Een stroomstoring kan bijvoorbeeld halverwege een transactie onderbreken. Of de beheerder nu transacties moet terugdraaien of data moet herstellen, de database moet de storing kunnen afhandelen. Voor de meeste beheerders wordt failover ook afgehandeld met back-ups en redundantie. ACID kan helpen met de grotere disaster recovery-strategie van een organisatie.
Conclusie
Bedrijfskritische databases hebben ACID-eigenschappen nodig om bedrijfsapplicaties te ondersteunen. ACID-eigenschappen zijn essentieel voor de data-integriteit en om ervoor te zorgen dat uw data door zoveel applicaties als u wilt kunnen worden opgehaald en gebruikt. Beheerders moeten nog steeds back-ups maken en ervoor zorgen dat de databaseserver soepel werkt, maar het hebben van ACID-eigenschappen is van cruciaal belang voor de bedrijfscontinuïteit.