That's some of the most hand-wavy drivel I've ever read.
I don't disagree with any of that, and it's not a new idea (Lotus Notes and CouchDB come to mind as databases that solve replication through conflict handling), although I'm not seeing a clear description of how this synchronization algorithm actually works. There's a description in the wiki [1], but it's unfinished. (Looking at the code, the entire project looks like quick-and-dirty, unfinished prototype, actually.)
[1] https://github.com/amark/gun/wiki/Conflict-Resolution-with-G...
1. How is this better than CouchDB
2. How does this differ from CouchDB
3. Why did you not implement this on top of CouchDB
The lack of mention suggests the developers either have no clue what already exists, know that their solution can't compete with existing solutions, or don't really care about being better and are just having fun implementing their own system from scratch. None of those answers make me want to take a deeper look.
So pardon my out-of-date ignorance:
1. Depends upon what you want. GUN can do dynamic queries and has realtime push notifications baked right in. What you didn't ask is how GUN is worse. Well, CouchDB is stable and has security - stuff which we're still working on.
2. GUN is a graph database which allows you to have key-value, relational, and document based data. Couch is a document based database. GUN gets embedded into your application server, while CouchDB has to run its own database server which then requires maintenance.
3. Mathematically speaking, any matrix (table) or tree (document) can be represented in a graph. But not all graphs can be represented as a matrix or tree. So building GUN ontop of CouchDB would have come with a lot of overhead, especially since CouchDB does not have dynamic queries.
Hope this helps! Let me know if you have any other questions.
I don't understand how these two claims are not contradictory.
> All conflict resolution happens locally in each peer using a deterministic algorithm.
How exactly does this happen? Via CRDTs? Consensus? How do you handle conflicts?
I'm very skeptical about this sort of largely content-free copy fronting what should be a pretty complicated distributed system.
If you do not want to even run your own app servers, I'm more then happy to let you use my free GUN backend so that way you do not even have to worry about that.
Consensus? Absolutely not. I definitely need to add more documentation and resources on this - in fact I'm doing a talk on how my conflict resolution algorithm works out in Berlin in a few weeks. Check the conference out at: https://2015.distributed-matters.org/ber/ . After that I should have much better materials on this available for people.
Briefly and naively, the way it works is a Vector Clock + Timestamp combo. Timestamps have bad exploits, and Vector Clocks don't work well in ephemeral environments. If you combine the two together they compensate for the vulnerabilities of the other. Every peer acts as a state machine operating inside of an open-closed boundary function (nothing fancy here, this is the same stuff you learned in middle/highschool). This does NOT give you Global Consistency, as different peers might have slightly different boundaries because of clock drift (you can use a separate service to minimize this), but they will all become Eventually Consistent.
This helpful? Any other questions?
Do you have a reference for this? I don't mean to keep sounding like a skeptic, but these are pretty big claims. I'm also genuinely curious about this claim and would really like to look into it further.
With such proliferation of self hosted FireBase, can anyone in the know share their experiences with these solutions?