

Which modern databases support ACID transactions? - spullara
https://foundationdb.com/acid-claims

======
lcampbell
> MySQL provides ACID transactions on a single machine

That made me chortle. If you can't roll back an `ALTER TABLE` command (e.g.,
to back out of a failed schema migration), you don't really have good ACID
semantics. Here's a list of other fun MySQL commands that sidestep
transactions: [http://dev.mysql.com/doc/refman/5.5/en/implicit-
commit.html](http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html)

~~~
jpitz
MySQL isn't the only engine that does this.

[http://docs.oracle.com/cd/E17952_01/refman-5.1-en/implicit-c...](http://docs.oracle.com/cd/E17952_01/refman-5.1-en/implicit-
commit.html)

Edit - I was wrong!

Not only did I link to the wrong docs, but Oracle fixed what I considered to
be a longstanding bug.

Thanks to those who pointed it out.

For a very, very long time, Oracle has enforced implicit transaction
boundaries around DDL, and it is about time that finally changed.

~~~
lcampbell
Those docs look like they're MySQL docs, not Oracle Database docs.
Stackoverflow suggests[1] that as-of Oracle Database 11g Release 2, DDL
changes are isolated within the current transaction.

\--

[1] [http://stackoverflow.com/questions/4692690/is-it-possible-
to...](http://stackoverflow.com/questions/4692690/is-it-possible-to-roll-back-
create-table-and-alter-table-statements-in-major-sql)

------
MichaelGG
VoltDB uses a partitioned data model. For OLTP apps that fit within that
model, it's incredibly fast and there's no global transaction. For
transactions that span partitions, yes, there is a lock. If your app fits the
model (and a lot of transaction processing does), then it's quite amazing. For
instance, one model I've played with is updating customer balances in
realtime. If I partition everything on CustomerId, then I can insert new
charges and update balances at extremely high rates (over 50Ktps per node, at
least).

If your app requires (edit: a significant amount of) transactions that have no
locality, that is multiple arbitrary rows might be updated in any transaction,
VoltDB might not be for you.

If I understand Spanner, it, too, has a somewhat-partitioned model, with
parent/child relationships, correct?

~~~
jhugg
Two things to point out as a VoltDB engineer.

1) VoltDB's global transactions are much slower than its partitioned
transactions, but it's relative. It can still do hundreds or thousands per
second.

2) Making this number faster for common cases is ongoing work. In upcoming
4.0, multi-partition consistent reads will get about a 10x performance boost
if they're bottlenecked on transaction overhead. This allows us to do up to
50k/sec global reads while doing 500k/sec partitioned writes. Expect
improvements for global writes in 2014.

------
lafar6502
I'm afraid there were more 'databases' created in last 2 years than in all
earlier history of human civilization. This suggests authors of some of these
products have yet to discover what ACID means and how many problems they
didn't even think of have already been solved many years ago.

------
bradwestness
Making no mention of Microsoft SQL Server seems like a pretty big oversight.

~~~
rblatz
Didn't you get the memo? By modern they meant not MS.

~~~
bunderbunder
All the more peculiar, then, that they list RavenDB.

------
lsh123
We use MySQL-Galera and it has full ACID guarantees in cluster/multi-site/DR
environment.

Unfortunately the article is not a complete overview of the existing DBs
landscape and has too much marketing in other places as well.

~~~
voidmain
I know very little about Galera replication, but its FAQ states that it
provides only snapshot isolation.

You are certainly correct that we have not provided a complete overview of the
DB market! That is a very ambitious project. We built this page largely to
call out the use of "ACID" terminology by vendors that don't actually provide
it.

~~~
lsh123
I personally think that "provides only snapshot isolation" and "provides ACID
transactions on a single machine, but sharding, caching, and failover will
likely violate them as you try to scale" are very different statements. The
different isolation modes does not violate ACID transactions and only describe
the semantic in more details. I would make a claim that majority of
applications can use _any_ isolation mode with ACID transactions as long as
application developers understand what exactly going on.

~~~
voidmain
Isolation levels describe the _degree of compliance_ with the I in ACID. Full
compliance is called serializable isolation. Are there valuable uses for lower
degrees of isolation? Yes, and a good database should allow applications to
selectively reduce isolation. But the inability to support serializable
isolation greatly limits the power and composability of a system.

Galera looks like an extremely useful tool, and a big improvement on usual
(and extremely dangerous) ad hoc failover. Besides the limited isolation
level, though, it only really solves failover. Typical large scale database
deployments will sacrifice even more ACID properties by sharding (which loses
A, C, and I for shard-spanning transactions) and frequently by incoherent
caching (which sacrifices isolation for reads that use the cache).

------
daigoba66
> RavenDB uses a weak form of isolation called "snapshot isolation". ... Index
> updates are not Atomic.

If MVCC
([http://en.wikipedia.org/wiki/Multiversion_concurrency_contro...](http://en.wikipedia.org/wiki/Multiversion_concurrency_control))
is "weak", then are they claiming read/write locks are better?

Also, to nitpick, RavenDB's reads/writes in the document storage engine are
entirely atomic. A lucene index is maintained in a secondary store which is
eventually consistent. But as a document store supports ACID transactions.

~~~
voidmain
As we disclaim on the page itself, we aren't experts on all of these
databases, so it's possible that we've made a mistake. We are relying on the
documentation of other products (but on the specific documented claims rather
than whether they throw around the term "ACID").

'Snapshot isolation' is a level of isolation guarantee, not an implementation
technique. It means that a transaction will read values consistently at one
point in history and then write values at a later point, even though the read
values may change in between. To give a classic example, pure snapshot
isolation doesn't allow you to soundly transfer $100 from Alice's account to
Bob's account. FoundationDB uses MVCC and optimistic concurrency, but provides
serializable isolation.

Besides this, and the asynchronous indexing that you mention, RavenDB uses an
"XA" type technique for cross-node transactions which relies on the durability
of an external transaction coordinator. Various public statements of the
developers lead me to think that they don't find this arrangement more
trustworthy than I do.

"Local" transactions on a single document don't qualify as ACID transactions;
that's one of the primary messages of the page you are linking to.

------
SCdF
Worth mentioning (if it's not obvious) that this is written by the
FoundationDb guys, on their site, and so will clearly show a bias toward their
product (surprise!, it does!).

There is still some interesting information here, but there are some notable
missing players here (MSSQL) who I presume are missing because not including
them paints Foundation in a better light.

------
zshprompt
Where is Datomic?

~~~
bmm6o
And MSSQL?

~~~
oconnor663
Presumably SQL Server fits somewhere up at the top with MySQL/Postgres/Oracle?

~~~
nlavezzo
Yep.

------
zafirk
Google Cloud Datastore -
[https://developers.google.com/datastore/](https://developers.google.com/datastore/)
and Google Cloud SQL [https://developers.google.com/cloud-
sql/faq](https://developers.google.com/cloud-sql/faq)

------
webmaven
Firebird should be added to the ACID compliant list as well:
[http://www.firebirdsql.org/file/documentation/papers_present...](http://www.firebirdsql.org/file/documentation/papers_presentations/html/paper-
fbent-acid.html)

------
lvca
OrientDB (www.orientdb.org) Graph Database supports ACID transactions since
the first version. It has SQL, Document Database features and it's
distributed. Did FoundationDB inspire to OrientDB?

------
hugofirth
Am I wrong in thinking that
[Neo4j]([http://www.neo4j.org/](http://www.neo4j.org/)) supports fully ACID
compliant transactions?

~~~
gizmogwai
By default, Neo4J is not ACID compliant as it works mainly in memory, which
fails the Durability part of ACID. I am not event sure that if you would
configure it to be in sync with its stored replica, it would pass ACID test
due to how Java handle the files internally.

~~~
hugofirth
Fair enough - my experience with Neo is at this point shallow at best. I had
seen it in the feature spec is all. Should they be claiming they are if they
aren't however?

------
rpedela
I thought PostgreSQL's replication was ACID-compliant?

~~~
gizmogwai
It can, if configured accordingly. The article is missing a lot of point for
other DB's too. Not a very good reference.

------
brettinlj
It would be nice to see a "NewSQL" database like Clustrix in this comparison.
From my understanding of their white papers the transactions are ACID.

~~~
voidmain
We have been told by people who should know that Clustrix does not provide
serializable transactions, but since this claim is unspecific and not based on
publically available information we haven't put it on the page.

~~~
brettinlj
Apparently as per their docs
([http://docs.clustrix.com/plugins/viewsource/viewpagesrc.acti...](http://docs.clustrix.com/plugins/viewsource/viewpagesrc.action?pageId=1769594))
this is true specific to end-user transactions: "Note: serializable isolation
not currently available to end user transactions."

The Serializeable isolation level is used for data moves within the cluster
according to the table referencing isolation levels and row visibility rules.

------
hardwaresofton
What about RethinkDB?

~~~
utopkara
From RethinkDB FAQ
([http://www.rethinkdb.com/faq/](http://www.rethinkdb.com/faq/)) "RethinkDB is
not a good choice if you need full ACID support or strong schema enforcement —
in this case you are better off using a relational database such as MySQL or
PostgreSQL."

~~~
lafar6502
heh, this applies to all 'new' databases - if you aren't sure which one to
choose, you're usually better off staying with a relational. You'll be
bleeding edge in few years when SQL is forgotten and then re-discovered.

