Understanding Consistency in ACID

In this short essay, we dive deep and understand the “C” in ACID - Consistency.

In this quick read, we will take a detailed look into Consistency, understand its importance, functioning, and how the database implements it.

What is Consistency?

In the context of databases, Consistency is Correctness, which means that under no circumstance will the data lose its correctness.

Database systems allow us to define rules that the data residing in our database are mandated to adhere to. Few handy rules could be

  • balance of an account should never be negative
  • no orphan mapping: there should not be any mapping of a person whose entry from the database is deleted.
  • no orphan comment: there should not be any comment in the database that does not belong to an existing blog.

These rules can be defined on a database using Constraints, Cascades, and Triggers; for example, Foreign Key constraints, Check constraints, On Delete Cascades, On Update Cascades, etc.

Consistency ACID Database

Role of the database engine in ensuring Consistency

An ACID-compliant database engine has to ensure that the data residing in the database continues to adhere to all the configured rules. Thus, even while executing thousands of concurrent transactions, the database always moves from one consistent state to another.

What happens when the database discovers a violation?

Database Engine rollbacks the changes, which ensures that the database is reverted to a previous consistent state.

What happens when the database does not find any violation?

Database Engine will continue to apply the changes, and once the transaction is marked successful, this state of the database becomes the newer consistent state.

Why is consistency important?

The answer is very relatable. Would you ever want your account to have a negative balance? No. This is thus defined as a rule that the database engine would have to enforce while applying any change to the data.

How does the database ensure Consistency?

Integrity constraints are checked when the changes are being applied to the data.

Cascade operations are performed synchronously along with the transaction. This means that the transaction is not complete until the primary set of queries, along with all the eligible cascades, are applied. Most database engines also provide a way to make them asynchronous, allowing us to keep our transactions leaner.

✨ Next up is “I” in ACID - Isolation. Stay tuned.

References

Courses I teach

Alongside my daily work, I also teach some highly practical courses, with a no-fluff no-nonsense approach, that are designed to spark engineering curiosity and help you ace your career.


System Design Masterclass

A no-fluff masterclass that helps experienced engineers form the right intuition to design and implement highly scalable, fault-tolerant, extensible, and available systems.


Details →

System Design for Beginners

An in-depth and self-paced course for absolute beginners to become great at designing and implementing scalable, available, and extensible systems.


Details →

Redis Internals

A self-paced and hands-on course covering Redis internals - data structures, algorithms, and some core features by re-implementing them in Go.


Details →


Arpit Bhayani

Arpit's Newsletter

CS newsletter for the curious engineers

❤️ by 80000+ readers

If you like what you read subscribe you can always subscribe to my newsletter and get the post delivered straight to your inbox. I write essays on various engineering topics and share it through my weekly newsletter.



Writings and Learnings

Blogs

Bookshelf

Papershelf


Arpit's Newsletter read by 80000+ engineers

Weekly essays on real-world system design, distributed systems, or a deep dive into some super-clever algorithm.