Embeddable, replicated and fault tolerant SQL engine based on Sqlite
github.com
github.com
On a moderate use case (< 20 write operations per s) I kept getting timeouts so I first devised a quick fix system using RQ jobs passing writes to a single process and migrated to postgres as fast as I could.
Does this software help with concurrent write operations?
With exclusive access using a single connection in WAL mode, I can insert tens of thousands of rows per second on flash storage no problem.
Something that is not widely announced is the fact that SQLite serializes all writes by default, so you should share the same connection instance as often as possible.
* no tuning (pg_hba, memory, WAL options etc etc.)
* presumably fixed memory consumption (if similar to sqlite)
* raft gives you usable failover out of the box, whereas with postgres, you need additional (and complex) solutions
* less operational complexity
Good summary, I generally agree. rqlite installation is also very easy, thanks to Go. Single, statically-linked binary you can just drop on your machine. rqlite also has a really simple build process (another explicit goal -- just execute 'go build') making it easy to build it yourself -- giving you a high-level of control over the actual software you run.
https://github.com/rqlite/rqlite/blob/master/CONTRIBUTING.md...
"rqlite is very simple to deploy, run, and manage. It's lightweight. It's a single binary you can drop anywhere on a machine, and just start it. This makes it very convenient. It takes literally seconds to configure and form a cluster. With rqlite you have complete control over your database infrastructure, and the data it stores. That said, it's always possible it's too simple for your needs."
https://github.com/rqlite/rqlite/blob/master/DOC/FAQ.md#why-...
Using the application to send the time, although not idea could be used as a workaround, but attempting to use non-deterministic functions in triggers becomes a lot harder.
1. https://github.com/rqlite/rqlite#limitations 2. https://www.sqlite.org/deterministic.html
"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-...
Both dqlite and rqlite seem to use raft which requires an online quorum (I assume).
[edit] I know CRDTs would be a potential solution, but I haven't seen any readymade, simple DB based on them.
Similar things could probably be said about mongodb. If your data is small enough, it probably doesn't matter.
Overtime CouchDB has been removing more and more functionality and features that made CouchDB great IMHO (e.g couchapps), the 2.x (IIRC) made a lot of changes and totally broke a large application and made it too challenging to update so we stayed on a 1.x version (whatever version was last before the big couch merge.) we're moving off of Couch entirely in the future.
I'd have a look at Couchbase if you're looking for replication features too.
I could say we pick couchdb just because of their sync and pouchdb. For our main db we use postgres.
If it sounds like something that might be useful to you, I'd love to talk about your needs.
Mind you, I want CRDTs to work for RDBMSes -- the promise of CRDTs is fantastic. But do they? I suspect they do not.