> Limitations
> Transactions are not supported
Is there something I am badly misreading? How come is a so fundamental feature not supported? Maybe it is just a limitation in the python driver?
rqlite does support a form of transactions -- you can send a set of SQLite statements, and either all will be successful, or none will be. You can even send a BEGIN statement, and a SQLite transaction will be opened (and you can COMMIT later). However, due to the nature of Raft, restarting the cluster in the middle of an open transaction will not clear the transaction -- and most folks probably don't expect this. That's why I need to think more before advocating use of traditional transactions with rqlite -- distributed transaction functionality is easy to get wrong, so requires careful thought. You can use SQLite transactions, but you must be careful. That's why drivers don't tend to support it yet.
https://github.com/rqlite/rqlite/blob/master/DOC/DATA_API.md...
> the behavior of a cluster if it fails while such a manually-controlled transaction is not yet defined
Do you envision manually-controlled transactions working seamlessly one day? If not, have you thought about what guarantees are feasible/you hope to provide?
where table.transaction_id = transaction.id and transaction.committed = true
You would begin a transaction by inserting a new row and then updating it to committed when done.With some metaprogramming you may be able to do this all transparently.
Both are possible and have been done before.
rqlite is very simple to deploy, run, and manage -- in fact, simplicity-of-operation is a key design goal. It's also lightweight and easy to query. It's a single binary you can drop anywhere on a machine, and just start it, which makes it very convenient. It takes literally seconds to configure and form a cluster, which provides you with fault-tolerance and high-availability. With rqlite you have complete control over your database infrastructure, and the data it stores.
https://github.com/rqlite/rqlite/blob/master/DOC/FAQ.md#why-...
Have you thought about how rqlite could fit into this design space?