Projects are in increasing level of sophistication and later projects build off the work of earlier projects. In each project, you'll not only get to learn how to develop a database component, but you'll also get to study benchmarking results to improve your intuition about various design decisions and configuration options.

Simple Socket Server and Client

We start our development of databases by first developing a simple socket server and client in Java

Basic In-Memory Key/Value Store

Implement a basic, in-memory key/value store and experiment with different mechanisms for handling concurrent data writing and reading

Disk-Based Storage Engine for Read-Only Key/Value Data

We develop a persistent storage engine for random reads of key/value data and start exploring the challenges in working with disks

Log-Structured Merge-Tree for Persistent Reads and Writes

Extend our read-only storage engine to support persistent reads and writes of key/value data using a log-structured merge-tree

Partitioned Storage Engine for Enhanced Concurrent Performance

We apply partitioning to our log-structured merge-tree key/value store to allow for concurrent writes and reduce lock contention

Write-Ahead Logging for Durable Key/Value Persistence

Write-ahead logging is developed to add durability to our key/value storage engine and we quantify its impact on performance

Document Storage Engine for Semi-Structured Data

Our key/value storage engine is extended to support documents of semi-structured objects (e.g., JSON)

Multivalue LSMTree Storage Engine

Our log-structured merge-tree key/value store is extended to support multiple values for each key for use in developing secondary indexes

More projects are actively being developed so check back soon for additions.