Testing consistency of rqlite
github.com
github.com
> 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?
EDIT: Looks like no: "rqlite is about replicating a set of data, which has been written to it using SQL. The data is replicated for fault tolerance because your data is so important that you want multiple copies distributed in different places, you want be able to query your data even if some machines fail, or both."
dqlite is library, written in C, that you need to integrate with your own software. That requires programming. rqlite is a standalone application -- it's a full RDBMS (albeit a relatively simple one). rqlite has everything you need to read and write data, and backup, maintain, and monitor the database itself. rqlite and dqlite are completely separate projects, and rqlite does not use dqlite. In fact, rqlite was created before dqlite.
https://github.com/rqlite/rqlite/blob/master/DOC/FAQ.md#how-...
Hmm, perhaps a bit of confusion from the title. It sounds like they ran the Jepsen suite of tests against rqlite, which is great, but not done _by_ Jepsen / Kyle (https://jepsen.io). Others have done this themselves too and that's fine, but half the of the problem is correctly implementing the tests which has been done incorrectly by others in the past.
Their implementation is up on GitHub, I'm sure they would be interested in any feedback on it.
https://github.com/wildarch/jepsen.rqlite
(To be clear, I wasn't involved with this testing, I just heard about it today and found it interesting)
From https://news.ycombinator.com/newsguidelines.html: "Please use the original title, unless it is misleading or linkbait; don't editorialize."