Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This is probably my favorite database to work with currently. Real time, relational document storage. Best of three worlds.


Not to mention the great push-based features!


Relational documents? That sounds like graphs but Rethink is not a graph database (compared to Neo4j, GUN, Orient, Arango, etc).

Do you have a link to explain what you mean?


It can do (performant) joins.

https://www.rethinkdb.com/docs/table-joins/


What would you say is the distinguishing feature of whether something "is a graph database"?

To put it another way, what do the databases you listed have in common with each other that they don't have in common with other NoSQL databases, besides marketing?


A graph database exposes an object model that fits graph terminology: nodes and edges. They (hopefully) are optimized for graph-traversal operations like hopping along a series of edges, which would be painful in a relational model.

In this situation, NoSQL is the marketing term, while a graph database is a clear concept with corresponding performance and capability expectations.


I'm not asking you to explain to me what a graph is.

I've found that it's easier and faster to import and traverse edges in SQLite or PostgreSQL than in some of the systems you listed. I haven't tried RethinkDB but it sounds promising. You use words like "hopefully" and "performance and capability expectations", but distinguishing databases based on their hopes and expectations is not at all a clear concept.

The main difference seems to be whether you call things "nodes and edges" or "documents and references" or "rows and joins" in the documentation.

(edit: removed some negativity, and I'm aware some remains)


The most common and relevant difference is that a graph database has a storage engine that is optimized for graph traversal. For example, in a RDBMS, another row is referenced via a foreign key which involves a lookup to an indexed column, while in a graph database, a node is often referenced by its storage location. This makes graph traversals much cheaper, and is also something that an RDBMS is unable to optimise for because of conflicts with the relational model.

Similarly, the query language is optimised for graph traversal types of queries, in a way that would not be possible in an RDBMS due to the relational model constraints, and also because some of the query operations would be extremely inefficient in an RDBMS storage engine.

> That sounds like graphs but Rethink is not a graph database (compared to Neo4j, GUN, Orient, Arango, etc).

With regards to the listed databases, some are, but the rest are not (and do not claim to be) graph databases.

Note: It's different people replying to you.


FWIW, I should mention that I have tried one DB that seems to qualify as a graph database, in that it actually does seem to import and traverse edges efficiently, which is Blazegraph. You tend to have to search past several other things calling themselves graph DBs to find that one.

(But I'm a bit afraid of using it. Any armchair lawyers want to tell me if code that uses a GPL database has to be GPLed itself?)


Don't worry about the GPL part, e.g. see MySQL as a GPL database in wide use.

As long as you access blazegraph via the sparql or tinkerpop interfaces you will clearly be fine.


The capabilities and performance of graph databases do differ, and many aren't cheap, nor well known, so if you need one, you'll need to shop around.

Btw, Neo4J is definitely a graph database, although it might not be what you need.


I can't speak for the others, but the upcoming version of GUN (where I work) has some incredible performance benchmarks: https://github.com/amark/gun/wiki/100000-ops-sec-in-IE6-on-2... .

Yes, "documents and references" and "nodes and edges" is where things become fairly synonymous which is why I asked about RethinkDB supporting relational documents. I honestly think they are doing themselves a disservice by calling it a "JOIN" since that sounds slow and scary. If they wrapped it in a nice API like ".navigate()" or ".traverse()" I think it would be reasonable for them to advertise as a graph database! Tip to anybody at RethinkDB in case they are listening.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: