/neo4j-gremlin-bolt

Primary LanguageJavaApache License 2.0Apache-2.0

neo4j-gremlin-bolt

This project allows the use of the Apache Tinkerpop Java API with the neo4j server using the BOLT protocol.

Build status

Build Status Coverage Status Maven Central

Requirements

  • Java 8.
  • Maven 3.0.0 or newer.

Usage

Add the Neo4j Apache Tinkerpop implementation to your project:

Maven

    <dependency>
        <groupId>com.steelbridgelabs.oss</groupId>
        <artifactId>neo4j-gremlin-bolt</artifactId>
        <version>{version}</version>
    </dependency>

*Please check the Maven Central for the latest version available.

License

neo4j-gremlin-bolt and it's modules are licensed under the Apache License v 2.0.

Features

  • Apache Tinkerpop 3.x Online Transactional Processing Graph Systems (OLTP) support.
  • neo4j implementation on top of the BOLT protocol.
  • Support for Graph partitioning, out of the box implementation for All labels and Any label partitions.

Graph API

Connecting to the database

    // create driver instance
    Driver driver = GraphDatabase.driver("bolt://localhost", AuthTokens.basic("neo4j", "neo4j"));
  • Create id provider instances, see providers for more information.
    // create id provider instances
    vertexIdProvider = ...
    edgeIdProvider = ...
    // create graph instance
    try (Graph graph = new Neo4JGraph(driver, vertexIdProvider, edgeIdProvider)) {
        
    }

Working with transactions

    // create graph instance
    try (Graph graph = new Neo4JGraph(driver, vertexIdProvider, edgeIdProvider)) {
        // begin transaction
        try (Transaction transaction = graph.tx()) {
            // use Graph API to create, update and delete Vertices and Edges
            
            // commit transaction
            transaction.commit();
        }
    }

Enabling Neo4J profiler

  • Set logger INFO level to the package: com.steelbridgelabs.oss.neo4j.structure.summary

  • Enable profiler to the Graph instance.

    // create graph instance
    try (Neo4JGraph graph = new Neo4JGraph(driver, vertexIdProvider, edgeIdProvider)) {
        // enable profiler
        graph.setProfilerEnabled(true);
        
    }

The library will prefix CYPHER statements with the PROFILE clause dumping the output into the log file, example:

2016-08-26 23:19:42.226  INFO 98760 --- [-f6753a03391b-1] c.s.o.n.s.summary.ResultSummaryLogger    : Profile for CYPHER statement: Statement{text='PROFILE MATCH (n:Person{id: {id}})-[r:HAS_ADDRESS]->(m) RETURN n, r, m', parameters={id: 1306984}}

+----------------------+----------------+------+---------+-----------+
| Operator             + Estimated Rows + Rows + DB Hits + Variables |
+----------------------+----------------+------+---------+-----------+
| +ProduceResults      |              0 |    1 |       0 | m, n, r   |
| |                    +----------------+------+---------+-----------+
| +Expand(All)         |              0 |    1 |       2 | m, n, r   |
| |                    +----------------+------+---------+-----------+
| +Filter              |              0 |    1 |       1 | n         |
| |                    +----------------+------+---------+-----------+
| +NodeUniqueIndexSeek |              0 |    1 |       2 | n         |
+----------------------+----------------+------+---------+-----------+

Working with Vertices and Edges

Create a Vertex

Create a new Vertex in the current graph call the Graph.addVertex() method.

  // create a vertex in current graph
  Vertex vertex = graph.addVertex();

Create a new Vertex in the current graph with property values:

  // create a vertex in current graph with property values
  Vertex vertex = graph.addVertex("name", "John", "age", 50);

Create a new Vertex in the current graph with a Label:

  // create a vertex in current graph with label
  Vertex vertex1 = graph.addVertex("Person");
  // create another vertex in current graph with label
  Vertex vertex2 = graph.addVertex(T.label, "Company");