VanillaDB

VanillaDB is a single node, multi-threaded relational database engine that partially supports the SQL-92 standard.

History

VanillaDB is an academic project developed by National Tsing Hua University starting from 2016. This project is launched for teaching and researching purpose, because most relational database systems nowadays conduct too many optimizations and are too complicated to understand for beginners. VanillaDB can also be used for database researchers to test their new algorithms.

As yet, VanillaDB has became the testbed for some research work, teaching project for some database courses, and the core engine for some advanced database systems like ElaSQL.

Query Interface

Custom API SQL Stored Procedures

VanillaDB offers various query interfaces, such as SQL, JDBC, stored procedures and native query interfaces(Native API).

Joins

Nested Loop Join Index Nested Loop Join

VanillaDB only supports implicit joins in the FROM clause with Nested Loop Join, but it can also determine the join field in the WHERE clause to perform an Index Nested Loop Join.

Concurrency Control

Two-Phase Locking (Deadlock Detection)

VanillaDB allows several transactions running in parallel under control of strict two-phase locking protocol in multiple granularities: file, block and record. To cope with deadlocks, VanillaDB supports time-limit deadlock detection, which forces transactions to rollback when they wait too long for a lock.

Query Compilation

Not Supported

Logging

Physiological Logging

VanillaDB implements write ahead logging (WAL) to create physiological logs under No-Force/Steal buffering policy, and the logging granularity is value-level. Meanwhile, VanillaDB implements ARIES recovery algorithm to recover database system from crash.

Storage Architecture

Disk-oriented

VanillaDB is a disk-oriented database, block-level data is loaded into buffer managers before it can be manipulated. In VanillaDB, each transaction maintains its own buffer manager in memory.

Foreign Keys

Not Supported

Indexes

B+Tree Hash Table

VanillaDB supports both hash index and B-tree index, and users can specify which one to use in CREATE INDEX clause.

Data Model

Multi-Value

VanillaDB is a relational database to store data with user-defined schema. However, some integrity constraints of relational model aren't well-supported, e.g., it doesn't support primary key.

Query Execution

Tuple-at-a-Time Model Materialized Model

VanillaDB supports both pipelined (iterative) and materialized scanning. Specially, materialized scanning is used in ORDER BY and GROUP BY. When creating a query plan, VanillaDB estimates the cost of scanning trees and chooses the best one.

Views

Virtual Views

VanillaDB allows user to create views, but the length of a view definition is restricted to at most 100 characters. Views are managed by Catalog Manager as metadata, which means only the properties of each view are stored, such as its definition and creator.

System Architecture

Shared-Everything

VanillaDB runs on single node, which means CPU cores, memory and disk storage are all shared by transcations.

Isolation Levels

Read Committed Serializable Repeatable Read

VanillaDB supports transactions at different isolation levels concurrently, each transaction can specify its isolation level at creation time and the default transaction level is Serializable.

Storage Organization

Sorted Files

VanillaDB stores databases as several files in existing file system, managed by the storage engine. Databases are separated into different directories, and each table with catalog and index information is a file under the database directory.

The storage engine offers both file-level interface and block-level interface to access the data. It also implements two types of I/O mode that can be configured by users, including Java New I/O and Jaydio(direct I/O, Linux only).

Storage Model

N-ary Storage Model (Row/Record)

VanillaDB uses row-oriented store to store records, which means all fields inside a record are stored contiguously. Records can't span more than one page, and each page with records is organized as the slotted page.

Checkpoints

Non-Blocking

VanillaDB supports non-quiescent checkpointing. It stops accepting new transactions but still allows current running transactions to continue when checkpointing is ongoing. Checkpointing will be done periodically, and active transactions at that time will be recorded in the log.

Stored Procedures

Not Supported

The official documentation claims that stored procedures are supported. But actually only the query interface of stored procedures is implemented, the execution part remains unimplemented now.

VanillaDB Logo
Website

http://www.vanilladb.org/

Source Code

https://github.com/vanilladb/vanillacore

Developer

National Tsing Hua University

Country of Origin

TW

Start Year

2016

Project Type

Academic, Open Source

Written in

Java

Operating Systems

All OS with Java VM

Licenses

Apache v2