GraphQL as a “data contract”
GraphQL has the added benefit to allow changing the storage backend (e.g. from Mongo to Elastic) when needed, so that we can keep the same APIs on web/mobile frontend. This can be useful when you are at the prototying stage of an app, when you are experiment with different backend.
columnar data (e.g. cassandra/pandas) vs record data (e.g. relational databases): use columnar databases or libraries when you have too many aggregations, and they are more important than a single record.
Use JSON-oriented databases when you have a no-defined schema and many information related to a single resource (e.g. LinkedIn profile: person, schools, experiences). But if you have many links between that information, than use a relational database.
Graph databases are ideal when you have many-to-many relationships