What is NoSQL, and why do you need it?
By now, much has been written about the lower cost associated with running clusters of commodity servers. Much has also been written about the added flexibility of breaking free from schemas that are not well suited to modern tools and applications. All this is in addition to the operational simplicity of being able to automatically handle machine failures, balancing workloads, adding new machines, and many other operational tasks.
According to Nick Lavezzo, FoundationDB founder, “by reducing the need for exotic hardware, caching layers, and manual sharding, your architecture stays simple and easy to manage.”
Not to be taken out of context, but according to FoundationDB, “developers love ACID.”
What is ACID, you ask?
ACID (Atomicity, Consistency, Isolation, Durability), according to Wikipedia, is a set of properties that guarantee that database transactions are processed reliably. In the context of databases, a single logical operation on the data is called a transaction.
- Atomicity requires that each transaction is 'all or nothing,' failing to write the transaction if any portion of it fails. In other words, if one part fails, it all fails and nothing is written to the database.
- Consistency ensures that any transaction and associated data which is written to the database is valid—based on a predefined set of rules.
- Isolation means that the execution of transactions are in complete isolation from each other, though they may occur serially.
- Durability means that once a transaction has been committed, regardless of loss of power, crash, or other exception, it will remain committed.
ACID transactions are the best programming model for dealing with the challenge of having many clients simultaneously read and write the same data, according to FoundationDB. And while other NoSQL databases compromise ACID, FoundationDB preserves it.
ACID enables abstraction, the foundation of good software engineering. Without the A in ACID, abstractions fail when they need to atomically change multiple pieces of data in the database. The approach that they take is to build abstraction on core 'layers.'
FoundationDB scales to support millions of fully-transactional operations per second on a distributed cluster of commodity servers. Additionally, they support a diverse set of applications and data models through simple layers which map different data models onto FoundationDB’s ordered keys and values.
The idea here is that applications built on these layers will inherit the attributes of the core data base (i.e., performance, data consistency, operational resilience, etc). According to FoundationDB, their product is, “built on a distributed shared-nothing architecture, [and] has been engineered and extensively tested to automatically handle machine failures, network problems, data balancing, adding new machines and many other operational tasks.”
FoundationDB suggests that you don't need to accept stale reads, non-durable writes, desynchronized indexes, or having to code specialized logic to deal with eventual consistency. With true ACID transactions, when FoundationDB says it did something, it really did it.
Why are there so many NoSQL DBs?
The short answer is that they specialize. Each does one thing well. So, there has to be...one for every kind of data model. Most NoSQL databases that attempt to support ACID transactions usually have to make some fundamental compromises and end up supporting only local transactions on a single key, for example. FoundationDB supports global transactions over any number of keys.
The bottom line is that FoundationDB differs from other NoSQL databases in that FoundationDB supports ACID transactions. With FoundationDB you get high performance while maintaining the benefits of NoSQL; specifically, a distributed architecture that scales to meet your needs.
“The market is long-overdue for a NoSQL data platform that doesn’t sacrifice ACID transactions to achieve high scalability—our testers have been enthusiastically telling us they’ve been waiting for a solution like ours for years,” said Nick Lavezzo, co-founder of FoundationDB.
Developed over a 3-year period including a year-long alpha testing program, FoundationDB is now freely available and ready for production use. FoundationDB supports Linux®, Mac® OS X®, and Microsoft® Windows® and includes APIs for C, Python, Ruby, Node.js and Java®.
Beta 1 is available as a free download from www.foundationdb.com.
Check it out and let me know what you think.