ACID transactions are incredibly helpful.

ACID transactions are the simplest and strongest programming model available to handle concurrency. They have been the underpinning of SQL databases for decades and we believe will play an increasingly prominent role in NoSQL as the market and technology mature.

Interested in learning more? Read our transaction manifesto →

DISCLAIMER: The information below is based on our analysis of publicly-available data from product websites. Neither our analysis nor data from product websites is always correct. If you have more accurate information, please contact us and include any links. Our goal is to clear up confusion around an already-confusing subject.

A true ACID transaction…

A true ACID transaction consists of reads and writes on arbitrary pieces of data, durably logged to disk, and strongly isolated (serializably) from other clients' transactions.

The FoundationDB Key-Value Store provides true ACID guarantees like traditional SQL databases…

  • FoundationDB The FoundationDB Key-Value Store is a distributed database with true ACID transactions, scalability, and fault tolerance.
  • MySQL MySQL provides true ACID transactions on a single machine, but sharding, caching, and failover will likely violate them as you try to scale.
  • PostgreSQL PostgreSQL provides true ACID transactions on a single machine, but sharding, caching, and failover will likely violate them as you try to scale.
  • Oracle Database Oracle Database provides true ACID transactions (albeit with an isolation level that falls a bit short of true serializability). Fault tolerance and some scalability are available at a cost by using Oracle RAC.

A few other distributed databases share this capability…

  • Spanner Spanner is a distributed database with true ACID transactions. Spanner uses 2PC across Paxos replica sets and an exotic hardware clock design to provide ACID guarantees. It is a Google internal project and not publicly available.
  • Marklogic MarkLogic is a distributed database with true ACID transactions and fault tolerance. Transactions local to a node are executed locally while cross-node and XA transactions use a 2PC strategy.
  • VoltDB VoltDB is a distributed database with true ACID transactions. It accomplishes global transactions via a 2PC lock on the entire database. Global transactions are limited to "hundreds or thousands per second," making them too slow for common use.

Many more claim ACID and fall short…

  • Cassandra Cassandra does not provide true ACID transactions. Cassandra 2.0 provides compare and set, but misleadlingly labels them as "lightweight transactions." See our blog post for more details.
  • Aerospike Aerospike does not provide true ACID transactions. Just like Cassandra 2.0, Aerospike only provides compare and set, and misleadingly labels it as ACID.
  • HyperDex Warp Hyperdex Warp does not provide true ACID transactions. It provides ACI transactions and a degree of fault tolerance, but doesn't make transactions Durable to disk, so in some situations committed transactions can be lost. It does support global transactions but latency scales poorly with number of writes.
  • RavenDB RavenDB does not provide true ACID transactions. It uses a weak form of isolation called "snapshot isolation". It provides global transactions via an external coordinator, but use is discouraged (see here). Index updates are not Atomic.
  • NuoDB NuoDB does not provide true ACID transactions. The documentation states that NuoDB allows "... some write anomalies that would not occur if the transactions were run in a single series". Additionally, it appears to provide even weaker guarantees during fault conditions.
  • Clustrix Clustrix does not provide true ACID transactions. It uses a weak form of isolation called "Repeatable read." The documentation states that serializable isolation is "not currently available to end user transactions."

And other NoSQL databases purposefully avoid them.

  • MongoDB MongoDB accurately describes the Compare and Set functionality that they provide.
  • Riak Riak provides an "eventual consistency" model and states that it is incompatible with ACID properties.
  • HBase HBase provides Compare and Set, which they call "checkAndPut."

The database world does not need more confusion.

There are already a lot of complex concepts in a database product, especially a distributed one. The industry needs to work hard to be honest and straightforward instead of using new marketing terms that confuse consumers.

Let's keep the definition of ACID clear: A true ACID transaction consists of reads and writes on arbitrary pieces of data, durably logged to disk, and strongly isolated (serializably) from other clients' transactions.

Learn more about our Key-Value Store.

Key-Value Store →