# NewSQL Databases Assessment: CockroachDB, MariaDB Xpand, and VoltDB
## 4 NewSQL Databases: CockroachDB, MariaDB Xpand, and VoltDB
### VoltDB  
VoltDB is an in-memory SQL database for modern applications with the ability to manage data at an unprecedented scale, volume, and accuracy [38]. The idea behind VoltDB is to be faster than traditional relational DBMSs on a certain class of applications. VoltDB is based on ACID properties upon a distributed architecture designed for scalability and high availability. This system was designed in 2010 and its architecture is a shared-nothing, in-memory, and distributed relational database [6]. This solution makes use of horizontal scalability, which allows scaling data by adding more nodes (instances of machines) to the cluster [38]. For high availability, VoltDB provides four features that ensure the data remain consistent in the face of external or internal failures:  
* Snapshots;
* Command Logging;
* K-safety;
* Database Replication.  
Figure 5 shows how VoltDB partitions work within the cluster.  
Figure 4: MariaDB Xpand v6.0.3 graphical user interface.  
Each VoltDB partition acts autonomously by allowing the cluster to manage parallel transactions [39]. When a procedure requires data from multiple partitions, one node acts as a coordinator and distributes the necessary work to the other nodes.  
Figure 6 shows an example of the VoltDB user interface.  
Figure 6 presents the user interface, which is divided into three parts, where each one is responsible for a specific task [40]:  
Figure 5: VoltDB architecture components.  
Figure 6: VoltDB v11.3 deployment manager interface.  
1. Shows the number of nodes associated with the current database. It allows to add or remove nodes from the database;
2. Configuration properties of the current database;
3. VoltDB displays CPU, memory, latency, and transaction metrics to help the user analyze the execution of the database. The main advantages of VoltDB are the following [41; 42]:  
* In-memory storage: It uses synchronous replication for durability;
* Designed for online/operational transaction processing, OLTP;
* Optimized performance: Each execution engine is single-threaded. It removes latches, locks, and buffer pool management in order to eliminate overhead and legacy architecture systems;
* VoltDB allows to scale without much difficulty;
* Distributed database: In this case, the tables are partitioned, with one partition per node;
* VoltDB uses Java stored procedures to eliminate client-server round-trips;
* VoltDB provides several options for backing up database data and schema;
* High availability: VoltDB contains three capabilities, namely K-safety, network fault tolerance, and live node rejoin. The major limitations of VoltDB are the following:
* Not optimized for OLAP, since VoltDB is focused on OLTP, and is not good at solving problems that require large database column scans;
* Not optimized to return an excessive amount of data from stored procedures;
* The database must fit into the available memory of the system;
* Not optimized to work with complex queries and huge tables;
* No support for foreign keys and check constraints;
* No Windows version available. VoltDB is a fast in-memory database that provides high availability and fast query response. On the other hand, VoltDB does not support the Windows operating system.