Count the databases your team runs. If you got to one, congratulations. Most of us get to three or four, and not because we wanted to:
- the web app was written for MySQL,
- the reporting tool wants PostgreSQL,
- the vendor product you bought last year ships with SQL Server,
- the CMS is still on MariaDB.
Four installers, four backup scripts, four monitoring setups, four upgrade days.
I have been working on a database server called Raft DB that tries to give that back: one install that speaks all of those protocols, so you keep your drivers and your SQL and change only the address in the connection string.
What it looks like
After the install, each protocol has its usual port:
| Client | Port |
|---|---|
| MySQL / MariaDB | 3306 |
| SQL Server (T-SQL) | 1433 |
| PostgreSQL | 5432 |
| Raft DB native protocol, HTTP API, web studio | 7480 |
(If a port is taken, the installer uses the next free one and prints which.) And you connect with the tools you already have:
mysql -h 127.0.0.1 -P 3306 -u admin -p
psql "host=127.0.0.1 port=5432 user=admin dbname=postgres"
sqlcmd -S 127.0.0.1,1433 -U admin -C
Same for the drivers behind your app (JDBC, ODBC, .NET, Python, PHP, Node.js) and the ORMs on top of them. The front-ends run side by side, so your MySQL app, your PostgreSQL reporting tool and the SQL Server vendor product can use the same install at the same time.
What is underneath
One engine: JSON documents with a schema, a write-ahead log, row versions so readers get a consistent snapshot, and replication using the Raft consensus algorithm (hence the name). The front-ends are separate programs in front of it, one per dialect.
If you are starting something new you do not have to use anybody's dialect: there is a native protocol and an HTTP API, connectors for 16 languages, and a web studio at http://127.0.0.1:7480/ to look at the data.
The honest part
I would rather you hear these from me than find them on a Friday.
Each dialect sees its own databases. Create a table through the MySQL port and \dt in psql will not show it. They share the engine, the disk, the replication and the studio, not the tables. If a tool in one dialect has to read what an app in another dialect wrote, go through the native HTTP API, which can read all of it.
Compatibility is partial, and different per dialect. Every front-end has an "Errors and limits" page that lists what is refused or different. Some things will not come at all, for example add-ons written in native code. Read that page for your dialect before you move anything real.
MySQL and MariaDB share one front-end. It serves one of the two dialects at a time, chosen in a setting. The other front-ends run next to it regardless.
It is version 0.0.1. Pre-release. Windows (Intel/AMD and ARM) and Linux (x86-64 and ARM64) only, no macOS yet. It is free to use and closed source.
Try it, and tell me what breaks
Download: https://raftdb.com (one installer for Windows, one script for Linux, both for Intel/AMD and ARM). Connectors, docs and the limits pages are there too, and there is a short project page at https://github.com/developerfowlguard/raftdb.
The most useful thing you can do is point one real client of yours at it, run what your app actually runs, and report what does not work. I especially want to hear about drivers and ORMs I did not test.
Raft DB is independent software and is not affiliated with, endorsed or sponsored by Oracle, MariaDB, Microsoft or the PostgreSQL project. MySQL and Oracle are registered trademarks of Oracle and/or its affiliates; MariaDB is a trademark of MariaDB plc; Microsoft and SQL Server are trademarks of the Microsoft group of companies; PostgreSQL is a trademark of the PostgreSQL Community Association of Canada. The names are used only to say which protocols Raft DB works with.
Top comments (0)