JanusGraph
Start a cluster on your local machine. Check that you are able to connect to YugabyteDB using by doing the following.
Connected to local cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.9-SNAPSHOT | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh> DESCRIBE KEYSPACES;
system_schema system_auth system
cqlsh>
2. Download JanusGraph
$ wget https://github.com/JanusGraph/janusgraph/releases/download/v0.2.0/janusgraph-0.2.0-hadoop2.zip
$ unzip janusgraph-0.2.0-hadoop2.zip
$ cd janusgraph-0.2.0-hadoop2
- Start the Gremlin console by running
./bin/gremlin.sh
. You should see something like the following.
$ ./bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: janusgraph.imports
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.spark
plugin activated: tinkerpop.tinkergraph
- Now use the CQL config to initialize JanusGraph to talk to Yugabyte.
- Open the YugabyteDB UI to verify that the
janusgraph
keyspace and the necessary tables were created by opening the following URL in a web browser:http://localhost:7000/
(replacelocalhost
with the ip address of any master node in a remote depoyment). You should see the following.
4. Load sample data
gremlin> GraphOfTheGodsFactory.loadWithoutMixedIndex(graph,true)
==>null
gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
For reference, here is the graph data loaded by the Graph of the Gods. You can find a lot more useful information about this in the JanusGraph getting started page.
- Retrieve the Saturn vertex
gremlin> saturn = g.V().has('name', 'saturn').next()
==>v[4168]
- Who is Saturn’s grandchild?
gremlin> g.V(saturn).in('father').in('father').values('name')
==>hercules
- Queries about Hercules
6. Complex graph traversal examples
- Who are Pluto’s cohabitants?
gremlin> pluto = g.V().has('name', 'pluto').next()
==>v[8416]
// who are pluto's cohabitants?
gremlin> g.V(pluto).out('lives').in('lives').values('name')
==>pluto
==>cerberus
// pluto can't be his own cohabitant
==>cerberus
gremlin> g.V(pluto).as('x').out('lives').in('lives').where(neq('x')).values('name')
gremlin>
- Queries about Pluto’s Brothers.
// where do pluto's brothers live?
gremlin> g.V(pluto).out('brother').out('lives').values('name')
==>sea
==>sky
// which brother lives in which place?
gremlin> g.V(pluto).out('brother').as('god').out('lives').as('place').select('god', 'place')
==>[god:v[4248],place:v[4320]]
==>[god:v[8240],place:v[4144]]
// what is the name of the brother and the name of the place?
gremlin> g.V(pluto).out('brother').as('god').out('lives').as('place').select('god', 'place').by('name')
==>[god:neptune,place:sea]
==>[god:jupiter,place:sky]
Geo-spatial indexes - events that have happened within 50 kilometers of Athens (latitude:37.97 and long:23.72).
// Show all events that happened within 50 kilometers of Athens (latitude:37.97 and long:23.72).
gremlin> g.E().has('place', geoWithin(Geoshape.circle(37.97, 23.72, 50)))
==>e[4cj-36g-7x1-6c8][4120-battled->8216]
==>e[3yb-36g-7x1-9io][4120-battled->12336]
// For these events that happened within 50 kilometers of Athens, show who battled whom.
gremlin> g.E().has('place', geoWithin(Geoshape.circle(37.97, 23.72, 50))).as('source').inV().as('god2').select('source').outV().as('god1').select('god1', 'god2').by('name')