ActorDB is a distributed SQL database. To understand why this is important we have to start with traditional SQL databases.
Note that terms node and server will be used interchangeably.
Traditional SQL databases are monolithic. They work very well in the context of a single server, but are limited to that server. Of course they can work master/slave or master/master, but the entire dataset still needs to be on each server. Even if the dataset is not too large, traditional SQL databases require extremely complex and broad locking mechanisms for transactions. Once the query load is too high or the dataset is too large, some drastic changes need to be made in how you use your database.
Data will need to be denormalized. Code complexity will have to go up. A lot of time will be spent trying to keep your head above water. Eventually if you still keep growing, you have to turn to database sharding. Dramatically increasing complexity of everything that involves using the database.
ActorDB on the other hand allows you to start out with a database that is fully normalised within an actor unit and scale that database horizontally over as many servers as you need. No single points of failure or global locks. Transactions only affect the actors that participate in them.
- - A distributed relational SQL database.
- - Strongly consistent (not eventually consistent).
- - Massively concurrent.
- - With no single point of failure.
- - With no global read or write locks.
- - Horizontally scalable to hundreds of nodes and petabytes of data.
- - Connectable over MySQL protocol and Thrift.
It achieves this with:
- - Raft distributed consensus algorithm.
- - An existing battle tested and stable SQL database engine.
- - Splitting your dataset into small independent chunks. Inspired by the "Actor model".
Key/Value stores generally sacrifice consistency and rich queries to achieve scalability. Document stores have richer query capabilities, but are not as scalable as Key/Value stores. They also often run on database engines less battle tested than other database types.
ActorDB is a relational SQL database, but it requires a different way of organizing your data. A much smaller sacrifice than other new database technologies. It requires a slightly different way of thinking, but is much more powerful than Key/Value databases or document stores. It is both familiar and new.
Our reasoning why we needed to build it is in our blog: Why we built ActorDB