Today, we launched Dolt 1.0, signaling that the world's first and only version controlled SQL database is ready for your production workloads.
We started DoltHub in August 2018 with the idea that data sharing was too hard and we needed a tool to fix it. In October 2018, Brian added the Git command line to Noms, and Dolt was born.
Dolt is the world's first version controlled SQL database. Imagine if Git and MySQL had a baby. We launched Dolt 0.9.7, our first public release, in August 2019. Since then, we've published approximately 270 versions of Dolt. Through those 270 releases we learned a lot about what you all need in a version controlled SQL database. Dolt 1.0 is the sum of all those lessons. Dolt will still change but what we have is stable enough, compatible enough, and fast enough to warrant a 1.0 release.
Welcome to production Dolt: Dolt 1.0.
$ dolt sql -q "select dolt_version()"
| dolt_version() |
| 1.0.0 |
What Does 1.0 Mean?
Dolt 1.0 means four things:
- Forward Storage Compatibility
- Production Performance
- MySQL Compatibility
- Stable Version Control Interface
Forward Storage Compatibility
Dolt 1.0 will be backwards compatible with all further 1.X versions.
The original Dolt storage format was inherited from Noms. It was a great way to get started. However, the flexibility of Noms came with performance trade offs.
At the beginning of 2021, we set out to build a storage format specifically for an Online Transaction Protocol (OLTP) database based on everything we learned from building our initial versions of Dolt. The new storage format is an order of magnitude faster and supports ACID transactions. It is a solid foundation to build on.
We launched the new storage format six months ago and moving to it required a backwards incompatible migration using
dolt migrate. With Dolt 1.0 we are committing to this storage format. There will be no more backwards incompatible migrations in the 1.X releases of Dolt.
Dolt 1.0 has production level query performance
Dolt is MySQL compatible so we can use MySQL performance as a benchmark. As mentioned, the new storage format is designed for performance on OLTP workloads. Currently, Dolt 1.0 measures 1.9X slower than MySQL, 1.3X on writes and 2.3X on reads, on a standard suite of Sysbench database performance tests.
MySQL is very fast, with most queries returning in the 0-10ms range. So, with Dolt you are unlikely to notice much of a performance difference in your applications.
Dolt will continue to get better on performance beyond 1.0. As you can see, we've made significant progress since we started measuring. We are actively working on read performance now trying to break the 2X barrier.
Moreover, all version control operations have been optimized for production workloads. Calculating the diff between two commits or producing the audit log of a cell will perform in your production applications.
Dolt 1.0 is 99.9% MySQL compatible
Dolt measures 99.87% MySQL compatible on a suite of mostly Data Manipulation Language (DML) correctness tests. Out of a suite of almost 6M synthetic tests, Dolt fails to match MySQL results on only 6,833.
The MySQL database Sakila is a synthetic database used to show off MySQL's features. Everything in Sakila works in Dolt except for fulltext indexes. Fulltext indexes are on the Dolt road map for 2023.
Dolt's commitment to compatibility extends to binlog replication. You can run Dolt 1.0 as a versioned MySQL replica. Every write to your primary MySQL is replicated to your Dolt replica and becomes a Dolt commit. Use Dolt's version control features in case of emergency or for faster development.
For a more complete compatibility picture, see our excellent documentation on the subject. Dolt is a drop in replacement for MySQL.
Stable Version Control Interface
Dolt 1.0 version control interfaces will not change
Dolt relies on the MySQL standard for SQL interface design and the Git standard for version control interface design. We needed to invent the Git to SQL interface.
The Dolt Command Line Interface (CLI) attempts to mimic the Git command line interface exactly. When you would have run
git add, you run
dolt add. When you would have run
git commit, you run
dolt commit. We even match the arguments. We've added some additional subcommands like
dolt sql and
dolt sql-server. The Dolt CLI is now stable with backwards incompatible changes signaled by the 1.X version number.
In SQL, we use custom system tables and functions for version control read operations. We use custom procedures for version control writes. These system tables, functions, and procedures are now stable with backwards incompatible changes signaled by the 1.X version number.
You can safely write your applications using these version control interfaces.
Welcome to production Dolt: Dolt 1.0. Upgrade Today and version control your database.