Modern applications store a lot data and demand high availability of access to it. To cope with this increasing need, developers have long struggled with scaling, sharding and synchronizing multiple instances of traditional databases.