Projects
I'm really interested in databases, specifically in the context of distributed systems. Much of my work is focused on building better databases and related tooling from first principals.
Problems with Databases
Software engineers can choose from a variety of database software, from conventional relational databases to widely distributed key-value stores. Even though there are many systems available, each one has its engineering trade-offs. Unfortunately, if a given technology does not fit all of the use cases for a system, one may resort to connecting various databases together and incur the enormous headaches of keeping them synchronized and consistent.
Problem #1: Not enough data structures
Relational databases, for example, generally provide two data structures: a table (which I like to think of as a list of structs) and an index (usually a B+ tree). Tables are a fantastic choice for many types of transactional data (i.e. orders and invoices) but are terribly suited for others (i.e. hierarchical relationships and social network graphs). Forcing developers into a very constrained set of data structures from the start is a bad idea, yet we've been using RDBMS systems for decades.
Many NoSQL database solutions exist to solve a to subset of the above-mentioned problems, but they present their own challenges. For example, Redis is a popular data structure store that presents a variety of data structures but abandons data validation and structured schema entirely.
More coming soon...
Project List
Here are some of the projects I've been working on:
- Schemer – Lightweight and robust data encoding library for Go
- Block – Go library to manage a file of fixed-size blocks
- MinerDB
For now, please feel free to check out my GitHub page.