--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
For more options, visit https://groups.google.com/d/optout.
Gremlin Server will be based on websockets and does one thing: process remotely submitted Gremlin scripts and return results. That's it. No REST. No Dog House. No RexPro (though I suppose RexPro most closely aligns with websockets).
I'm on the fence especially regarding the decision of removing the HTTP (REST) interface. I understand wanting to simplify the whole Tinkerpop stack, but a REST API a good way to get people started with a graph database without having them to learn a new programming language (be it Java or Groovy). For people who don't program in this language, the alternative to an HTTP API would be to maintain binding for lots of languages, which wouldn't be realistic to expect from the TinkerPop team, nor the community.
Regarding the Dog House, I would go the other way and try to make it more useful; hook up a simple d3.js ("force layout") script to display the graph (requires batch operations to be first-class in Rexster), allow to add nodes and vertices with a few clicks. Among other things, it'd allow a more direct relationship to the graph for users including when it comes to debugging. It'd be a sort of simple equivalent of phpMySQL, but... more glamorous with the graph visualization (as long as the graph is a small one)... and that would work with any gremlin-based database (an not a single vendor like MySQL fo phpMySQL).
One point that hasn't been raised on this thread is regarding the choice of the websocket protocol. Why not just go at the TCP level? (From what I understand, MySQL protocol packets are TCP packets)
The websocket protocol contains all sort of things that were required for practical reasons on the web (passing through proxies, handshake with HTTP CONNECT, ports 80 and 443) but it's less clear why they're needed at all as part of a binary protocol to discuss with a graph database. If I understand correctly each websocket datagram also has a little overhead which has no good reason to exist in your context.
--
You received this message because you are subscribed to a topic in the Google Groups "Gremlin-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/gremlin-users/jpVPCzs3-T8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to gremlin-user...@googlegroups.com.
David, thanks for introducing yourself and joining the conversation. My post to this topic was actually my first post to this group as well. I respect your opinions and probably would have shared your views when I first started working with Graph Databases. However, my opinions have changed over the past couple of years...
I'm on the fence especially regarding the decision of removing the HTTP (REST) interface. I understand wanting to simplify the whole Tinkerpop stack, but a REST API a good way to get people started with a graph database without having them to learn a new programming language (be it Java or Groovy). For people who don't program in this language, the alternative to an HTTP API would be to maintain binding for lots of languages, which wouldn't be realistic to expect from the TinkerPop team, nor the community.
I agree that a REST API sounds like a good way to get people started, but in practice I assure you that it's not. Instead of teaching people how to properly interface with a graph database, it teaches them how to do things incorrectly and encourages bad habits that are not scalable (ie. making numerous API requests in order to achieve a single complex interaction).
Consider the hypothetical situation where a REST API is present for a relational database. Instead of learning SQL, you just send a REST API request to pull records from one table.
A REST API is not a good way to interact with a graph database
Regarding the Dog House, I would go the other way and try to make it more useful; hook up a simple d3.js ("force layout") script to display the graph (requires batch operations to be first-class in Rexster), allow to add nodes and vertices with a few clicks. Among other things, it'd allow a more direct relationship to the graph for users including when it comes to debugging. It'd be a sort of simple equivalent of phpMySQL, but... more glamorous with the graph visualization (as long as the graph is a small one)... and that would work with any gremlin-based database (an not a single vendor like MySQL fo phpMySQL).
I pretty much agree, but really I don't think the user interface needs to be in the TinkerPop stack. Third-party user interfaces built on top of TinkerPop would be fine, and would improve TinkerPop development by increasing development focus on what is important.
In fact, David you have some great ideas regarding that interface and the experience necessary to develop it. I'm open to contribute. Maybe you and I should start a project on Github?
One point that hasn't been raised on this thread is regarding the choice of the websocket protocol. Why not just go at the TCP level? (From what I understand, MySQL protocol packets are TCP packets)
The websocket protocol contains all sort of things that were required for practical reasons on the web (passing through proxies, handshake with HTTP CONNECT, ports 80 and 443) but it's less clear why they're needed at all as part of a binary protocol to discuss with a graph database. If I understand correctly each websocket datagram also has a little overhead which has no good reason to exist in your context.
Websocket rather than TCP would make it possible for client-side applications to talk directly to the database.
--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
I feel that it can only be because the REST API is not well designed.
So far, every single Gremlin query I've come across was a one-liner (like "g.V('name','hercules').out('father').out('father').name"). This maps quite naturally to URLs without too much work. As a 30sec draft, it could look like:
http://localhost:8182/graphs/graphOfTheGods/query/V:name,hercules/out:father/out:father/name
I can only agree that the current /vertices and /edges approach is not graph-like and feels like a SQL-Table-way of modeling the world that is inappropriate with graphs. It doesn't mean a REST API is bad idea.
(by the way, is it possible to implement what I described above as a Rexster extension? I haven't looked at that too much yet)
Regarding, "numerous API requests in order to achieve a single complex interaction", I agree with you that batch operations should be part of the API by default. I hope my above example is convincing enough that it's possible and shouldn't require too much work from Gremlin.
Hopefully, my example also shows that the REST API can teach how to properly interact with graphs (pick some nodes to begin with and traverse the graph given some rules).
By the way, will the "TinkerPop format" relate to the binary format?
As a newcomer not speaking Java or Groovy, if there is no binding for my language, then I have to either make one (à la node-java or for the binary format) or wait for one, or learn Java/Groovy (with all the tooling like Maven, etc.). All these solutions are quite a step for a newcomer. And even if a binding exists, its completeness and stability are often unknown.Regarding the Dog House, I would go the other way and try to make it more useful; hook up a simple d3.js ("force layout") script to display the graph (requires batch operations to be first-class in Rexster), allow to add nodes and vertices with a few clicks. Among other things, it'd allow a more direct relationship to the graph for users including when it comes to debugging. It'd be a sort of simple equivalent of phpMySQL, but... more glamorous with the graph visualization (as long as the graph is a small one)... and that would work with any gremlin-based database (an not a single vendor like MySQL fo phpMySQL).I pretty much agree, but really I don't think the user interface needs to be in the TinkerPop stack. Third-party user interfaces built on top of TinkerPop would be fine, and would improve TinkerPop development by increasing development focus on what is important.
This doesn't really help adoption and newcomers.
--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
David Bruant,
Welcome to the conversation and to TinkerPop. Definitely appreciate the feedback.
I feel that it can only be because the REST API is not well designed.
So far, every single Gremlin query I've come across was a one-liner (like "g.V('name','hercules').out('father').out('father').name"). This maps quite naturally to URLs without too much work. As a 30sec draft, it could look like:
http://localhost:8182/graphs/graphOfTheGods/query/V:name,hercules/out:father/out:father/name
I can only agree that the current /vertices and /edges approach is not graph-like and feels like a SQL-Table-way of modeling the world that is inappropriate with graphs. It doesn't mean a REST API is bad idea.
(by the way, is it possible to implement what I described above as a Rexster extension? I haven't looked at that too much yet)
You've only scratched the surface of Gremlin.
Path-based Gremlin does map quite well to a URL (and we've considered that in the past), but you won't get very far with that for most real use cases.
See a few more complex example in the Gremlin wiki or stackoverflow:
It would be interesting to see how you would express some of that in a REST API, but I don't think you are necessarily suggesting that.
Some of those examples show that not all Gremlin are neat one-liners. In fact in most cases, you will find that real-world Gremlin tends to be somewhat distant from that.
Regarding, "numerous API requests in order to achieve a single complex interaction", I agree with you that batch operations should be part of the API by default. I hope my above example is convincing enough that it's possible and shouldn't require too much work from Gremlin.
Hopefully, my example also shows that the REST API can teach how to properly interact with graphs (pick some nodes to begin with and traverse the graph given some rules).
I agree that having a REST API that compiles to a path-based gremlin expression helps folks unfamiliar with Gremlin get started and even thinking in "Gremlin way". However, I think that API will get increasingly complex as you add in other elements of "getting started" such that people will have to learn a "REST language". If you have to learn a language, why not just learn Gremlin and gain full expressiveness from the start, which you will have to do anyway.
As a newcomer not speaking Java or Groovy, if there is no binding for my language, then I have to either make one (à la node-java or for the binary format) or wait for one, or learn Java/Groovy (with all the tooling like Maven, etc.). All these solutions are quite a step for a newcomer. And even if a binding exists, its completeness and stability are often unknown.Regarding the Dog House, I would go the other way and try to make it more useful; hook up a simple d3.js ("force layout") script to display the graph (requires batch operations to be first-class in Rexster), allow to add nodes and vertices with a few clicks. Among other things, it'd allow a more direct relationship to the graph for users including when it comes to debugging. It'd be a sort of simple equivalent of phpMySQL, but... more glamorous with the graph visualization (as long as the graph is a small one)... and that would work with any gremlin-based database (an not a single vendor like MySQL fo phpMySQL).
I pretty much agree, but really I don't think the user interface needs to be in the TinkerPop stack. Third-party user interfaces built on top of TinkerPop would be fine, and would improve TinkerPop development by increasing development focus on what is important.
This doesn't really help adoption and newcomers.
Ah...Dog House...good ol' Dog House. The primary contributors to TinkerPop are not UI developers and while we are capable of such work, it's not really enjoyed and creates a body of code that comes with a high cost in terms of maintenance and testing. It would be great to see a UI developed around the TinkerPop stack, but I don't think the TinkerPop itself will be able to carry that burden. It will have to come out of the community.
As a newcomer who doesn't know the JVM ecosystem super-well, you are providing good insight into what people might think when they first encounter TinkerPop3. That's my biggest takeaway from this discussion. Based on your feedback, I have to question if we are doing enough to help get people started.
It's a bit early to say just what we will have in that regard but that's the reason for these RFCs (this one in particular).
I will say that for javascript guys, we might have a more cohesive story than we have had in the past (i.e. easier to get started, better integration, etc.). In recent weeks, I've had it in my mind that we need to make javascript a first class citizen in TinkerPop3, given the Java 8 commitment to Nashorn. I'm not sure who can say what the implications of Nashorn will be anymore than we can predict the speed of Java 8 adoption, but I can say that I find the idea interesting and wonder if we shouldn't try to be on the forefront of that for TinkerPop3. It would great to hear more from the javascript community on their thoughts in this area if they are so inclined.
Thanks again for your feedback. It was quite helpful.
--
Using js in place of Groovy would be a nice add-on. Although the closure syntax is more verbose than Groovy, it would be a great add because of the number of Javascript developers out there (its a must-know second language for all web developers regardless of primary language, as well as being a primary language itself via node.js).
My current project is also a node.js project, although we are using Titan with the TinkerPop stack on top, and access the database via "stored procedures" within Rexster's Gremlin extension.
You received this message because you are subscribed to a topic in the Google Groups "Gremlin-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/gremlin-users/jpVPCzs3-T8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to gremlin-user...@googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "Gremlin-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/gremlin-users/jpVPCzs3-T8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to gremlin-user...@googlegroups.com.
Is there a migration guide for Rexster user to port to Gremlin Server?
Does Gremlin Server support SSL?
--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/gremlin-users/f75a8f28-a1dc-4fe4-ba26-8c4f2c29f9b3%40googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "Gremlin-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/gremlin-users/jpVPCzs3-T8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to gremlin-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/gremlin-users/CAA-H438uyLLcRwpsaiBORJ60h0X5qpH3c0Vu-3GM%2BbUbWG6B_g%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/gremlin-users/CAFVomr6jB7bRn4N6L-sqgX3mfzuAxRk65sCPE6UJvKJV%2B7WehA%40mail.gmail.com.