Login/Register | Contact Us | 1+ 978-528-4660

Frequently Asked Questions (FAQ)

The following are frequently asked questions about VoltDB.

1. General Information
1.1. What is VoltDB?
1.2. What is the architecture of VoltDB?
1.3. How is ACID-compliance achieved?
1.4. How is scalability achieved?
1.5. How does VoltDB partition the database?
1.6. How are VoltDB partitions different from sharding a traditional database?
1.7. What is a good use case for VoltDB?
2. Competitive Information
2.1. How does VoltDB differ from sharding MySQL?
2.2. How does VoltDB differ from MySQL used with memcached?
2.3. How does VoltDB differ from a Key-Value Store (such as Cassandra)?
3. Technical Information
3.1. What server platforms does VoltDB support?
3.2. What SQL does VoltDB support?
3.3. Does VoltDB support blobs?
3.4. Does VoltDB support ODBC/JDBC?
3.5. How do you increase the size of a VoltDB database cluster?
3.6. What is the maximum cluster size that VoltDB supports?
3.7. What database management tools are available?
3.8. What database monitoring tools are available?
4. Best Practices
4.1. How do I create an auto-incrementing index column?
4.2. Can I implement a Key-Value Store with VoltDB?
4.3. How can I tune my VoltDB application to maximize throughput?

1. General Information

1.1. What is VoltDB?
1.2. What is the architecture of VoltDB?
1.3. How is ACID-compliance achieved?
1.4. How is scalability achieved?
1.5. How does VoltDB partition the database?
1.6. How are VoltDB partitions different from sharding a traditional database?
1.7. What is a good use case for VoltDB?

1.1.

What is VoltDB?

VoltDB is a SQL RDBMS for database applications that have extreme transaction processing (XTP) workloads and require:

  • Orders of magnitude better performance than conventional DBMS

  • Linear scalability

  • SQL as the DBMS interface

  • ACID transactions to ensure data consistency and integrity

  • High availability 24x7x365

1.2.

What is the architecture of VoltDB?

VoltDB is an in-memory database distributed on a scalable cluster of shared-nothing servers. Transactions are defined as Java stored procedures, using ANSI-standard SQL for data access and using parallel single-threaded processing to ensure transactional consistency while avoiding the overhead of locking, latching, and resource management seen in traditional database systems.

1.3.

How is ACID-compliance achieved?

ACID stands for Atomicity, Consistency, Isolation, and Durability — four characteristics that are considered necessary to ensure that database transactions are processed reliably.

  • Atomicity: VoltDB defines a transaction as a stored procedure, which either succeeds or rolls back before any other transaction is processed.

  • Consistency: VoltDB enforces schema and datatype constraints in all database queries.

  • Isolation: VoltDB transactions are globally ordered and run to completion on all affected partitions without interleaving. (No concurrency within a given partition.)

  • Durability: VoltDB provides replication of partitions (known as K-safety), periodic snapshots, and command logging to ensure the availability of the data.

1.4.

How is scalability achieved?

VoltDB automatically partitions database tables across the available cluster nodes. Both the capacity and performance of the database can be increased by adding nodes to the cluster. VoltDB automatically redistributes the partitions to the new configuration when you reload the data.

1.5.

How does VoltDB partition the database?

VoltDB distributes the rows across the partitions using a hash partitioning scheme. The user identifies, for each partitioned table, which column is used as input to the internal hashing function. Note that not all tables have to partitioned; you can choose to replicate smaller lookup (read-intensive) tables.

1.6.

How are VoltDB partitions different from sharding a traditional database?

In sharding, the database tables are also partitioned. However, the partitions are actually separate, unrelated databases and it is the responsibility of the application code to manage the shards. More importantly, there is no guarantee of data or transactional consistency except whatever logic your application provides. With VoltDB, the database engine provides full ACID-compliance across the entire database and all partitions.

Another cost of sharding is the complexity of managing the individual database instances. Backup, recovery, and all other management tasks must be performed separately for every node. With VoltDB, these management operations are coordinated centrally.

1.7.

What is a good use case for VoltDB?

VoltDB is used today for traditional high performance applications such as capital markets data feeds, financial trade, telco record streams and sensor-based distribution systems. It's also used in emerging applications like wireless, online gaming, fraud detection, digital ad exchanges and micro transaction systems. Any application requiring high database throughput, linear scaling and uncompromising data accuracy will benefit immediately from VoltDB.

2. Competitive Information

2.1. How does VoltDB differ from sharding MySQL?
2.2. How does VoltDB differ from MySQL used with memcached?
2.3. How does VoltDB differ from a Key-Value Store (such as Cassandra)?

2.1.

How does VoltDB differ from sharding MySQL?

VoltDB is designed from the top down to maximize parallelism and to abstract the partitioning from the client application. Sharding MySQL requires the client code to manage and access the individual shards as separate databases.

Horizontal partitioning is integral to VoltDB -- not a performance trade-off forced on application designers in exchange for loss of ACID-compliance, manageability, and increased complexity in the client application. Equally important, for OLTP applications, VoltDB provides significantly greater throughput than MySQL on comparable hardware configurations.

2.2.

How does VoltDB differ from MySQL used with memcached?

Memcached is a distributed in-memory cache. It provides none of the reliability or consistency of an ACID-compliant SQL database. Memcached is often used as a cache in front of MySQL to improve performance of frequent transactions. But this requires the client application to manage the hash algorithms for both memcached and MySQL, as well as all of the transactional consistency and reliability between the two systems and across the cluster.

VoltDB automates all of these functions with none of the penalties, while providing similar or better performance. In addition, caching can help improve read performance for products such as MySQL, but does not help scale write performance. VoltDB scales linearly for both read and write performance.

2.3.

How does VoltDB differ from a Key-Value Store (such as Cassandra)?

Key-Value stores are a mechanism for storing arbitrary data (i.e. values) based on individual keys. Distributing Key-Value stores is simple, since there is only one key. However, there is no structure within the data store and no transactional reliability provided by the system.

VoltDB provides the ability to store either structured or unstructured data, while at the same time providing full transactional consistency, reliability, and standard data access syntax through ANSI SQL. VoltDB can even define a transaction that includes reads and writes across multiple keys. Finally, VoltDB provides comparable or better performance in terms of throughput.

3. Technical Information

3.1. What server platforms does VoltDB support?
3.2. What SQL does VoltDB support?
3.3. Does VoltDB support blobs?
3.4. Does VoltDB support ODBC/JDBC?
3.5. How do you increase the size of a VoltDB database cluster?
3.6. What is the maximum cluster size that VoltDB supports?
3.7. What database management tools are available?
3.8. What database monitoring tools are available?

3.1.

What server platforms does VoltDB support?

The target platform for VoltDB is CentOS V5.6. However, the product is designed for compatibility with any 64-bit POSIX-compliant Linux platform. Development kits are also available for Ubuntu (9.04 and later) and Macintosh (OS X 10.6). Source code and build scripts are available for those who want to build the software on other platforms.

3.2.

What SQL does VoltDB support?

VoltDB supports a basic subset of ANSI-standard SQL, including the CREATE INDEX, CREATE TABLE, and CREATE VIEW statements for schema definition and SELECT, INSERT, UPDATE, and DELETE for data manipulation. Additional SQL syntax will be added over time as the needs of users and customers dictate.

See the Using VoltDB manual for details on the specific SQL syntax that the current version of VoltDB supports.

3.3.

Does VoltDB support blobs?

Yes. The VARBINARY datatype provides variable length storage for arbitrary strings of binary data and operates similarly to VARCHAR strings.

3.4.

Does VoltDB support ODBC/JDBC?

VoltDB includes support for the JDBC interface, including access to ad hoc queries, stored procedures, and metadata information about the database schema.

3.5.

How do you increase the size of a VoltDB database cluster?

The size of the database cluster is defined when you compile the application catalog and start the database. To increase the cluster size, you simply need to:

  1. Save the current database contents to disk (using the @SnapshotSave system procedure).

  2. Edit the deployment file, specifying the increased number of cluster nodes (in the hostcount attribute).

  3. Restart the database cluster, using the new deployment file.

  4. Reload the data from disk (using the @SnapshotRestore system procedure).

3.6.

What is the maximum cluster size that VoltDB supports?

People often think of performance as a comparative value proportional to cluster size. And although it is true that VoltDB's throughput scales linearly, it is also true that VoltDB's initial performance on a single node is 30 to 50 times greater than any comparable database product. As a consequence, it is possible to achieve throughput rates of over a million transactions a second on a cluster as small as twelve nodes or less. Something unheard of (and in many cases, impossible) with other DBMS.

That said, VoltDB is regularly tested on and tuned for clusters of 3 to 12 nodes and has been successfully run on a cluster of 20 nodes. Although there is no architectural limit to the cluster size, if you are considering running a cluster larger than 20 nodes, please contact VoltDB. We would be very interested in discussing your requirements.

3.7.

What database management tools are available?

The VoltDB Enterprise Edition includes a browser-based management tool called the VoltDB Enterprise Manager. The VoltDB Enterprise Manager helps you deploy and control a VoltDB database in a cluster environment. You can start and stop the database, update the schema and stored procedures, and manage disk-based snapshots of the data from a single console interface. See the VoltDB Management Guide for details.

3.8.

What database monitoring tools are available?

The VoltDB Enterprise Manager provides performance and activity monitoring of multiple databases, in addition to its management and control functionality. The console provides real-time statistics on the number of records in each partition, as well as measurements of throughput and latency. For those using the Ganglia monitoring tool, the VoltDB Enterprise Manager also exports performance data to Ganglia automatically.

For those using the VoltDB Community Edition, VoltDB Web Studio is bundled with the server software and lets you examine the database structure and monitor performance of an individual database.

4. Best Practices

4.1. How do I create an auto-incrementing index column?
4.2. Can I implement a Key-Value Store with VoltDB?
4.3. How can I tune my VoltDB application to maximize throughput?

4.1.

How do I create an auto-incrementing index column?

VoltDB does not currently support AUTO_INCREMENT as a constraint on table columns. If you want to ensure a unique column value, you can create a separate table where each row holds a table name and its current incremented value, such as the following:

CREATE TABLE AUTOINCREMENT (
    TABLE_NAME VARCHAR(50) NOT NULL,
    CURRENT_VALUE BIGINT DEFAULT 1 NOT NULL );

You can then create a stored procedure that accepts a table name as the argument, increments CURRENT_VALUE, and returns the result. Use the returned value as input to the stored procedure that inserts the row that needs a unique column value.

4.2.

Can I implement a Key-Value Store with VoltDB?

It is not only possible to implement a Key-Value Store in VoltDB, there are several advantages to using VoltDB for this purpose. One of the example applications provided with the VoltDB software, voltkv, demonstrates how to create a key-value store in VotlDB. This example also illustrates how you can benchmark and tune the application to your needs.

4.3.

How can I tune my VoltDB application to maximize throughput?

The first three rules for making a VoltDB application perform optimally are:

  • Design your application so the most frequent transactions are single-partitioned.

  • Use asynchronous stored procedure invocations. If the client application waits for a response from each stored procedure invocation, it will never be able to queue enough transactions to fulfill the capacity of the VoltDB server. By making asynchronous calls, your application avoids creating a performance bottleneck at the client.

  • Have the client application open connections to every node of the VoltDB cluster. By doing this, transactions are spread across the cluster nodes, avoiding bottlenecks at a single database connection.

Other ways to maximize perform include queueing multiple SQL queries before issuing an ExecuteSQL call (rather than executing each query separately) and make sure the last ExecuteSQL call includes the flag TRUE as an argument so the stored procedure can close the database transaction as part of the last call rather than as a separate step.

Last updated: September 8, 2011.