Just Dolt
Nike is synonymous with the "Just Do It" ad campaign. Some people think "Dolt" is "DoIt", "Do It" with the space removed. Notice there is no difference in some fonts, like the one we use for this blog. No one would name their database Dolt, as in "a stupid person". Or would they? So we'll riff on Nike's ad campaign a bit in this article. "Just Dolt."
Use Cases
We struggle with use cases here at DoltHub. We built Dolt as a better way to share data. Along the way, customers came along and wanted an OLTP SQL database with Git features, so that is what Dolt became. Dolt is still a great way to share data but it's also a great SQL database.
Anything you can build with MySQL or Postgres you can build with Dolt. What's MySQL's use case? Building software? See our issue?
Dolt really shines when your database can benefit from branches, merges, diffs, or clones. We've written about customers who use Dolt to build better cancer cell simulations, power an application with branches, or add a versioning layer to important spreadsheets. These are just the customers who allowed us to write about their use case. Other customers use Dolt to manage video game configuration, get an immutable audit log of changes to their database, build reproducibility into machine learning models, ensure data quality using a pull request workflow, and much more. Eventually, we think people will realize that all SQL databases should be version controlled to prevent data loss and make development easier, much the same way we think all code should be version controlled. Performance and reliability are getting close, as we signalled with Dolt 1.0.
As I was forming our new use case documentation, I liked posing the problems Dolt solves as questions. See if any of these lines of questioning match problems you are working through. The answer is "Just Dolt."
Data Sharing
- Do you share data with customers?
- Do they ask you what changed between versions you share?
- Do they want to actively switch versions instead of having data change out from under them?
- Or, are customers or vendors sharing data with you?
- Are you having trouble maintaining quality of scraped data?
- When new data is shared or scraped, do downstream systems break?
- Would you like to see exactly what changed between data versions?
- Do you want to add automated testing to data shared with you?
- Would you like to instantly rollback to the previous version if tests fail?
Data and Model Quality
- Are you in the business of creating data and models?
- Do you want to institute human or automated review on data changes for data quality assurance?
- Are you worried about model reproducibility?
- Do different people or teams want to work on slightly different versions of the data?
- Are long running projects hard to pull off because of parallel data changes?
- Would data branches help?
- Do you want the ability to query or roll back to a previous version of the data instantly?
Manual Data Curation
- Are you using spreadsheets to curate production data?
- Is the process of merging and reviewing everyone’s changes getting out of hand?
- Are bad data changes causing production issues?
- Do you want a stepping stone to a more robust solution?
- Do you want to ditch the process of converting spreadsheets to databases?
Version Control for your Application
- Do your customers want branches and merges in your application?
- Do your customers want to review changes in your application before they go live?
- Do you want to add a pull request workflow to your application?
- Do you want to expose audit log functionality in your application?
- Do you want to expose rollback functionality in your application?
Versioned MySQL Replica
- Is your production MySQL vulnerable to data loss?
- If an operator runs a bad query, script, or deployment can your production MySQL can be down for hours or days as you recover data from backups or logs?
- Are you worried your backups aren't working?
- Does internal audit want and immutable log of what changes on your MySQL instance?
- Do you want the ability to copy and sync your production MySQL database for analytics, development, or debugging?
Audit
- Do you need to know who changed what, when, why in your SQL database?
- Do you want an immutable record of changes going back to the inception of your database?
- Is an audit team asking for this information for compliance purposes?
- Do you want to be able to query this audit log like any other tables in your database?
- Do you want the data to be efficiently stored so you can trace changes back to inception?
Configuration Management
- Is your configuration too big and complex for files?
- Are you building a game with lots of assets and configuration?
- Is your configuration more like code than configuration?
- Does configuration have a large production impact?
- Are configuration changes hard to review?
- Are multiple configuration changes hard to merge together when it’s time to ship?
Offline first
- Are you expecting your application to make writes locally while offline?
- Do these writes need to be synced to a central server or other nodes?
- How are you going to detect conflicting writes?
- What are you going to do if you detect them?
- Would the Git model of clone, push, and pull on your data help?
Grab Bag
- Are you worried about a bad query, script or deployment causing unrecoverable data loss?
- Are you implementing soft deletes and thinking there must be a better way?
- Are you implementing slowly changing dimension and thinking there must be a better way?
- Do you want Continuous Integration/Continuous Deployment for your database changes?
- Do you want to test schema changes on branches with production data?
- Do you want to clone the production database to your laptop to debug?
- Are you writing an application that needs to find the one difference between two database tables fast?
Just Dolt.
As you can see, the world's first and only version controlled database can solve many problems software engineers run into many times in their career. The answer is to "Just Dolt". Inspired? Come by our Discord for help getting started. Have an additional use case I didn't mention? Come chat with me on our Discord.