Between relay and react-native, we have the potential for a game-change in application architecture. A single repository could easily host frontends for each application target, (iOS, Android, web) along with a backend written in Relay/GraphQL. What's more, static analysis using flow/TypeScript could provide type checking across all applications, all the way back to the storage backend. Exciting stuff.
I recently noticed that I want something like a graph database for an application that screams for an SQL database, a strict schema and strict constraints.
The reason: SQL, even PostgreSQL with userdefined functions, is not strict enough for me. As soon as a consistency rule involves multiple tables, things. There are some nice SQL tricks with duplicating columns across those tables, whose consistency is ensured by putting them as additional columns into foreign keys. But for my taste this is too much trickery, and this approach has its limits as well.
I hope that one day the Graph databases will be combined with strict schemas that go far beyond XML schema, JSON schema and SQL database constraints. Also I hope that expressing those constraints should be easier, not harder, to read when applied to a graph database.
> I hope that one day the Graph databases will be combined with strict schemas that go far beyond XML schema, JSON schema and SQL database constraints.
The graph database model is driven largely by a desire for better navigational convenience at the expense of weaker schemas compared to RDBMS models. So, while you can wish for anything, I don't see that that's likely to happen. RDBMSs start ahead of graph databases when it comes to stronger schemas, and there's no reason that any stronger schema techniques would be more applicable to graph databases than to RDBMSs.
Good points, but note that I came from the other side: I drafted a concept of how to formulate the strictest schemas that I would like to apply in the application. Then I realized that the underlying model resembles much more a graph model than a relational model.
I agree that today's graph databases are meant to be used for weaker schemas, I believe that they are conceptually a better fit for strict schemas than relational databases are.
But probably we need a third term for those ultra-strict databases. From the "look and feel", this new type would almost certainly look more similar to a graph db than a relational db.
I thought the purpose of Relay is to get you to use a graph db. I think of GraphQL as a layer that sits between the REST API and web application, allowing you to specify custom queries that interact with the REST API behind the scene, so your REST layer can be application agnostic and you won't have to hardcode any application specific transformations between your REST API and your web or mobile or xbox etc app.
> I recently noticed that I want something like a graph database for an application that screams for an SQL database, a strict schema and strict constraints.
You may be interested in (soon to be released) EdgeDB: http://edgedb.com/
Alas, there is no RSS/Atom feed. If that site had one, I would have thrown it into my RSS reader. (I hesitate to throw my email address into such sites, sorry.)
BTW, will there be an Open Source version of the DB?
Recently I'm experimenting a lot with Strict graph database schemas. This resulted in this library: https://github.com/renesca/renesca-magic , supporting multiple inheritance, hyperrelations and some more features.
Recently I forced my coworker to use a real graph data structure in a LoB app. Nearly everything I've worked on ends up being an ad-hoc graph eventually, and as they say using the right data structures is half the battle.
I havnt really spent too much time looking at Relay, so forgive me if this is a dumb question, but if you want to use the Relay paradigm do you not have to change your backend-apis to return GraphQL formatted JSON ?
Yes, but GraphQL is just a thin layer so you can call your existing API's from GraphQL. For example you could start with GraphQL calling an existing HTTP service and go from there.
The sheer amount of code required here just to get the trivial example set up is ... a little daunting.
I mean, if facebook are using it heavily, then one can presume it works nicely at scale, but they don't seem to be doing amazingly well at the "make the easy things easy" side of things (yet).
Yeah, I wanted to try Relay for a small project a month ago, but getting started seems really time consuming, and the documentation was pretty poor, with just a contrived sample. The architecture seems great, I hope they improve the doc now that it's out of the tech preview.
Soo, if I understood well, first they create a class and then they create a global variable reusing the same name of the class, in order to create and object that expands the class?
This Facebook people know how to make me uncomfortable. But I guess I could get used, the same way I got used to JSX...
If I recall correctly, this is simply a decorator. Using ES7, you could write the createContainer call using the new decorator syntax and avoid this uncomfortableness.
They create a class, then they wrap the class in a class.
A class in javascript is just a variable, after all.
I think, personally, I'd've called the initial class ScoreGuts or something, or gone with a different syntax that returned the class as a value, but ... eh. It's really not that big a deal.
> I think, personally, I'd've called the initial class ScoreGuts or something
Well, maybe the point is that the original class becomes "useless" once it has been "decorated"; so it doesn't make sense that it has its own name. But it's is also true that, once you get used to program using FP style, mutating variables like this feels "weird".
I was confused because I didn't realize that, actually, a class in ES6 is just a variable. Also, I am not used to the decorator pattern. Now it makes sense.
It's even worse - classes in ES6 are just functions (their constructors); 'obj = new Class()' is just sugar for 'obj = {}; Class.bind(obj)()'. So if you leave off the "new", you'll end up clobbering whatever 'this' defaults to, which is usually the global window object.
I'm just finishing my first relay/react app. This stack is amazing. It will blow REST away. This time next year I'd be surprised if people are still creating REST servers for greenfield projects. Seriously, it's a game changer.
The speed of iteration is fantastic since you don't need to constantly create new endpoints/fiddle with the data your server provides every time you want to pull in a little extra data. You also get pagination basically for free.
I can recommend sangria for the graphql server - a strongly typed language gives you better confidence, and it's built on akka-http so it'll be performant too.
I feel that client-side pub/sub over WebSockets is a more natural solution to the problem of binding front-end views to server-side data.
For browser compatibility reasons, I do see the necessity for Relay (HTTP being much more widely supported than WebSockets) but Relay is definitely not the end-game.
46 comments
[ 3.0 ms ] story [ 98.8 ms ] threadThe reason: SQL, even PostgreSQL with userdefined functions, is not strict enough for me. As soon as a consistency rule involves multiple tables, things. There are some nice SQL tricks with duplicating columns across those tables, whose consistency is ensured by putting them as additional columns into foreign keys. But for my taste this is too much trickery, and this approach has its limits as well.
I hope that one day the Graph databases will be combined with strict schemas that go far beyond XML schema, JSON schema and SQL database constraints. Also I hope that expressing those constraints should be easier, not harder, to read when applied to a graph database.
The graph database model is driven largely by a desire for better navigational convenience at the expense of weaker schemas compared to RDBMS models. So, while you can wish for anything, I don't see that that's likely to happen. RDBMSs start ahead of graph databases when it comes to stronger schemas, and there's no reason that any stronger schema techniques would be more applicable to graph databases than to RDBMSs.
I agree that today's graph databases are meant to be used for weaker schemas, I believe that they are conceptually a better fit for strict schemas than relational databases are.
But probably we need a third term for those ultra-strict databases. From the "look and feel", this new type would almost certainly look more similar to a graph db than a relational db.
You may be interested in (soon to be released) EdgeDB: http://edgedb.com/
(Disclaimer: I'm one of the devs behind it).
Alas, there is no RSS/Atom feed. If that site had one, I would have thrown it into my RSS reader. (I hesitate to throw my email address into such sites, sorry.)
BTW, will there be an Open Source version of the DB?
As for emails - we won't disclose them to anyone, or fire emails more often than 1 in 3-4 weeks.
[0]: https://github.com/graphql/express-graphql
A nice talk / use case given here:
https://www.youtube.com/watch?v=S0s935RKKB4
Now Relay and GraphQL have been officially released and moved out of tech preview.
I mean, if facebook are using it heavily, then one can presume it works nicely at scale, but they don't seem to be doing amazingly well at the "make the easy things easy" side of things (yet).
This Facebook people know how to make me uncomfortable. But I guess I could get used, the same way I got used to JSX...
A class in javascript is just a variable, after all.
I think, personally, I'd've called the initial class ScoreGuts or something, or gone with a different syntax that returned the class as a value, but ... eh. It's really not that big a deal.
> I think, personally, I'd've called the initial class ScoreGuts or something
Well, maybe the point is that the original class becomes "useless" once it has been "decorated"; so it doesn't make sense that it has its own name. But it's is also true that, once you get used to program using FP style, mutating variables like this feels "weird".
Lol!
Consider it like:
Does it seem cleaner if you use the stateless functions from React 0.14? http://facebook.github.io/react/blog/2015/09/10/react-v0.14-...I was confused because I didn't realize that, actually, a class in ES6 is just a variable. Also, I am not used to the decorator pattern. Now it makes sense.
That's definitely much nicer than the old way.
The speed of iteration is fantastic since you don't need to constantly create new endpoints/fiddle with the data your server provides every time you want to pull in a little extra data. You also get pagination basically for free.
I can recommend sangria for the graphql server - a strongly typed language gives you better confidence, and it's built on akka-http so it'll be performant too.
For browser compatibility reasons, I do see the necessity for Relay (HTTP being much more widely supported than WebSockets) but Relay is definitely not the end-game.