NuoDB is a distributed database management system, which supports SQL. It is designed for hybrid cloud application. It offers scale-out performance, continuous availability, region distribution, multi-tenancy and no knobs administration, which most cloud application requires. And it also provides transactional consistency and durability, which normal databases demand. NuoDB can scale out without sharding. It distribute tasks over multiple processors to avoid bottlenecks. Unlike traditional shared-disk or shared-nothing architecture, NuoDB provides a new peer-to-peer messaging to route tasks to nodes. NuoDB split its architecture into two layers: a transactional tier and a storage tier. These two layers help to scale the data out in the cloud.
NuoDB was started in 2008 as NimbusDB. It changed its name to NuoDB in 2011. The company was founded by Barry S. Morris and Jim Starkey. In 2012, NuoDB added platform support for Solaris. In May 2013, NuoDB presented a migration assistant to migrate databases from Windows SQL Server onto NuoDB. In 2017, NuoDB added more functional supports for AWS.
Read Committed Snapshot Isolation
The default isolation level in NuoDB is snapshot isolation. In NuoDB, it defines the visibility of records into 2 domains. One is the most recent committed version of a record (MOST_RECENT). The other one is the snapshot version (SNAPSHOT_VERSION), which means that this version was the most recent committed at some point in time. Snapshot Isolation is achieved by the visibility of SNAPSHOT_VERSION, and Read Committed is achieved by MOST_RECENT. MOST_RECENT can be achieved by having the updates in other nodes immediately visible to the transactions in the current node. While in SNAPSHOT_VERSION, when a transaction starts, the transactions that is committed before determines the visibility of the data. So you will never see any updates from other transactions while the database is executing your transaction. These two visibility are all supported by the MVCC in NuoDB.
The durability of NuoDB is maintained by the SM (storage manager). In order to track the database state, SM maintains a journal of all the updates. The journal is simply an append-only set of diffs. Since the SM does not know anything about the transaction, the journal should be using physical logging.
NuoDB uses Durable Distributed Cache for elastic scale out. NuoDB is split into two parts. One is the Transaction Engines. The other one is the Storage Managers. Transaction Engines give Cache, which are in-memory databases for fast transaction processing. Storage Managers give durability which provides durable storage management with scale-out storage. So NuoDB can be considered as a hybrid database.
Multi-version Concurrency Control (MVCC)
In order to provide ACID semantics, NuoDB chooses to use MVCC to deal with conflicts. MVCC considers all data as versioned. It treats a update or a delete as an operation that creates a new version of data. In NuoDB, MVCC is implemented in the TE(Transaction Engine). TEs are actually caches, and these caches hold different versions of data. These versions of data include all the versions that may be needed by the current transaction. A version is said to be pending until the related transaction commits successfully. In NuoDB, when two transaction wants to make updates on the same object, the database will choose the TE where the atom (the place the object is stored) of the object is located as the newest version. MVCC also helps NuoDB to provide Snapshot Isolation model.
In NuoDB, tables are partitioned by storage groups. Storage groups let users to decide where to store the data and how many copies of data should be stored. These policies will be established according to the user requirement for redundancy, continuous availability, and separate processing purposes. NuoDB uses two level mapping between a verison of a tuple and physical storage to define the policy. The first mapping maps a table, which is horizontally partitioned, partition to a storage group. The second mapping maps the storage to one or more storage managers, which represent physical storage units in the database.