I'm getting started with graph databases. I want to migrate a social networking application from sql to Janus Graph database. I plan to build the application using Python Django framework.
I also plan to scale the application using using IBM's ComposeForJanusGraph in the future.
Problems I face:
1) I'm following the tinkerpop documentation for gremlin_python and I face several issues with the syntax because I couldn't find any good documentation. Only documentation I found here is also very short and not that helpful of how to do a CRUD. (For example how to create a new database, how to configure the search or storage database, how to create a node, how to create an edge, how to query for a vertex with a specific edge is not documented well clearly. None of them works when I try myself.)
2) Is there anything I should know before I learn and build it?
I couldn't find any good documentation. Only documentation I found here is also very short and not that helpful
Gremlin is Gremlin is Gremlin. It doesn't matter if it's Python or Java or C# or Javascript - it's all just Gremlin. Therefore, the documentation for Gremlin using Python is "short" because it simply shows how you initiate your GraphTraversalSource that allows you to spawn Traversal instances. From there, you have access to all the standard steps that Gremlin offers:
http://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps
and therefore the remainder of the documentation basically applies to your needs. The main bit of trickery to consider is that some step names conflict with Python reserved words - in those case, the step is post-fixed with a underscore and thus, the in() step for Java becomes in_() in Python.
For example how to create a new database, how to configure the search or storage database,
You won't find this in TinkerPop documentation really. How you create/configure a TinkerPop Graph implementation is specific to the graph database that you choose. You typically won't do that in Python. You will resort to the approach provided by your graph. If your graph is JanusGraph on IBM Compose, you should consult their documentation. You will only connect to that graph once established with gremlin-python.
how to create a node, how to create an edge,
It's just Gremlin. Gremlin has steps for mutating a Graph so to add a vertex and and to add an edge so to create two vertices and an edge between them I can string together a single traversal that does that:
g.addV('person').property('name','cegprakash').as('c').
addV('question').property('title','Using gremlin-python Janus for social networking application').as('q1').
addV('question').property('title','Working of CCD algorithm for Inverse Kinematics').as('q2').
addE('asks').property('votes',0).from('c').to('q1').
addE('asks').property('votes',1).from('c').to('q2').iterate()
how to query for a vertex with a specific edge is not documented well clearly.
Again, it's just Gremlin and there are plenty of examples.
g.V().has('person','name', 'cegprakash').
out('asks').
has('votes',gt(0))
So the above, says to find a vertex with the name "cegprakash", then traverse all the outgoing edges labelled "ask" with a "vote" property that has values greater than zero.
Is there anything I should know before I learn and build it?
If you haven't worked with graphs before, just start simple. Use TinkerGraph and the Gremlin Console to get familiar with the Gremlin language and then start looking into how JanusGraph is configured and operated under Compose. At that point you'll have a good basis for digging into how your application will actually work and if necessary asking more specific questions.
Related
How can I conect a conduit on a family instance that has a surface connector using API ? I am doing good connecting with "normal" connectors but when the family has only surface connectors, it's not possible.
I would just use the normal connection functionality, as demonstrated by the discussions of all the different ways to create a rolling offset. Also check out the CreateAirHandler SDK sample. It creates such a connector, but does not show how to attach to it in the project. Presumably because there is nothing special about it :-)
i have tried both the native api and fluent api for datastax graph in java.
i found fluent api more readable since it resembles java's OOP.
Native api has less readability in java since basically strings are being appended to create the entire gremlin script. but on the plus side a single call is made to execute the entire gremlin script
i wanted to know which is the best api to go with in case i need to add a large number of edges and vertices in one transaction and what are the performance issues which can occur in either case
Going forward I would recommend using the Fluent API over the String-based API. While we still support the string-based API in the DataStax drivers, most of our work and improvements will be using the fluent API.
The primary benefits of the Fluent API is that you can use the Apache TinkerPop library directly to form Traversals, it doesn't need to go through the groovy scripting engine (like the String-based API does).
In terms of loading multiple vertices/edges in one transaction, you can do that with Apache TinkerPop, and it will be much more effective than the String-based API because that all doesn't need to be evaluated through the gremlin-groovy engine. Also any future work around batching will likely be done in the Fluent API (via Apache TinkerPop), see JAVA-1311 for more details.
I am starting with titan and i am really loosing in it. I created my own graph databse model with tables(Vertices) and relations(Edge). Well, now I want to create my DB, but I cannot find any good tutorial. How to build scripts? Do you have same example how to create own verticles and edges?
Thx.
If you are new to graphs and new to Titan, start here:
http://s3.thinkaurelius.com/docs/titan/0.5.4/getting-started.html
If you don't follow that then recognize that Titan implements the Blueprints interfaces (i.e. TinkerPop) and thus is accessible via the Gremlin graph traversal language:
https://github.com/tinkerpop/gremlin/wiki/Getting-Started
There are plenty of resources available that explain how these things work. Consider looking at GremlinDocs as well as Sql2Gremlin as well.
I am fairly new to Azure and mobile services, and all the examples and tutorials I can find for the table and API scripts are fairly simplistic.
If I have some processes that are fairly complex and rely on pulling information from many different tables and processing contingent on that data, should I be doing that somewhere other than the API scripts? I am new to node.js as well so maybe that's the problem but I was wondering if there is a more appropriate place for business logic, such as some bridge I need to add to my stack?
There are a lot of examples of how to use MSSql object which is used to query tables and Node in general available. A healthy search will reveal just about anything you need. Since you said you are new to Node.js consider using the .NET backend instead. It is based on Entity Framework and there are lots of Entity framework examples out there for you too. Finally, there are some really good examples of complex logic being used in the back ends in the sample code available: http://azure.microsoft.com/en-us/develop/mobile/ios-samples/ (pick your client OS) and here: http://azure.microsoft.com/blog/topics/mobile/ and here: http://blogs.msdn.com/b/azuremobile/
Let us know if you have specific questions!
I've created a neo4j graph using Java, and it's sitting in an embedded database. What I want to do is write a web page which accepts user input, creates the graph using Java, and then returns the result to the web page, where it is traversed and displayed in a chart fashion.
I'm not sure where to start with this in terms of framework and how to query from root to all nodes in the graph. I was thinking of using play-framework.
What should I be looking for in terms of documentation to work out querying the graph using play, for example?
Thanks!
You also can use Spring Data Neo4j, probably the most convenient and most stable Java solutoin right now, see http://www.springsource.org/spring-data/neo4j