A misconception that I held for a really long time was that systems that use SQL (Structured Query Language) are by definition relational databases, and systems that don’t (e.g., MongoDB, Cassandra) are non-relational. It’s easy to understand whether a database uses SQL or not, but what does it mean when we say a database is relational? At a minimum, relational databases expose data in the form of “relations,” another word for tables with rows and columns.
SQL is an abomination, but the relational model is the right thing to use for core business data. There are many reasons, but here's a simple one: once you have a function that takes a set of arguments, what you need is sets of those arguments. That's what a relation is: a set of key-value sets, with the same keys so you can do the same things to them.
I can use a SQL database (particularly Postgres, which does it far and away the best) to store non-relational data just great.
But the likes of Mongo store the data in a way that is inefficient to treat as relations, so although you might be able to use a relational query language with Mongo, the performance will be awful.
What the world needs is a database that offers relational and non-relational storage, but doesn't use SQL. I suggest Datalog for querying relations and non-relations alike. Give me Mongo, but let me have "documents" that are relations (you could see them as a JSON array of objects all having the same keys and same value types for each key) and I'll listen.
Until then, Postgres is the best general-purpose data store because it does both relational and non-relation very well (it is slower at storing non-relational data if you index it, but its indexing is so good that it's considerably faster than Mongo at retrieving it from a complex query. As a generalization).
besides the fact that choosing the right DB heavily depends on the user case,
what you think about ArangoDB as a general purpose DB, implementing various paradigms :
key value
strict entity relations
document store
graph queries
transactions
schema validation
Couchbase
[Implement relational data model and programming based on hash-map (NoSQL)](https://github.com/linpengcheng/PurefunctionPipelineDataflow/blob/master/doc/relational_model_on_hashmap.md)
SQL is an abomination, but the relational model is the right thing to use for core business data. There are many reasons, but here's a simple one: once you have a function that takes a set of arguments, what you need is sets of those arguments. That's what a relation is: a set of key-value sets, with the same keys so you can do the same things to them.
I can use a SQL database (particularly Postgres, which does it far and away the best) to store non-relational data just great.
But the likes of Mongo store the data in a way that is inefficient to treat as relations, so although you might be able to use a relational query language with Mongo, the performance will be awful.
What the world needs is a database that offers relational and non-relational storage, but doesn't use SQL. I suggest Datalog for querying relations and non-relations alike. Give me Mongo, but let me have "documents" that are relations (you could see them as a JSON array of objects all having the same keys and same value types for each key) and I'll listen.
Until then, Postgres is the best general-purpose data store because it does both relational and non-relation very well (it is slower at storing non-relational data if you index it, but its indexing is so good that it's considerably faster than Mongo at retrieving it from a complex query. As a generalization).