At the NoSQL Now conference in San Jose, I presented the case for why I believe future generations of NoSQL databases will need to support ACID transactions in order for developers to more easily build, deploy and scale applications.
I also noticed that customers are starting to ask about ACID transactions, and that more NoSQL vendors are talking about the transactional or ACID capabilities of their products.
Unfortunately, as a rule, the transactional capabilities that NoSQL vendors tout apply only to a degenerate type of transaction involving only a single data element (such as a document or a row). This degenerate case is sometimes known as a compare-and-set (CAS) operation. In fact, Cassandra 2.0 was announced just yesterday and is receiving a good amount of attention, as it now supports “lightweight” transactions via CAS. These “transactions” aren’t really comparable to the ACID transactions provided by relational databases and systems like Spanner and FoundationDB.
In contrast, FoundationDB supports true high-performance global ACID transactions involving multiple data elements spanning nodes. (The other exception is MarkLogic, which can support global transactions by falling back to a traditional low-performance locking and two-phase-commit strategy.)
It’s hard to overstate how much more useful global transactions are than CAS operations. In my presentation, I explained that when true global ACID transactions and NoSQL come together, it opens up a huge range of possibilities. Transactions allow developers to reason locally rather than globally about their code and to easily build robust applications. With transactions, developers can easily build strong abstractions and multiple data models on top of the underlying data model.
I also spoke about the history of NoSQL, common misunderstandings of the CAP theorem, approaches to and challenges in trying to build and test an ACID database, and the details behind improving performance and testability by developing our own programming language, Flow, which adds actor model concurrency to C++.
You can check out my full presentation via Slideshare or the watch the recording below: