This project allows the use of the Apache Tinkerpop Java API with the neo4j server using the BOLT protocol.
- Java 8.
- Maven 3.0.0 or newer.
Add the Neo4j Apache Tinkerpop implementation to your project:
<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.
neo4j-gremlin-bolt and it's modules are licensed under the Apache License v 2.0.
- 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.
- Create driver instance, see neo4j-java-driver for more information.
// 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.
// create graph instance
try (Graph graph = new Neo4JGraph(driver, vertexIdProvider, edgeIdProvider)) {
}
- Obtain a Transaction instance from current Graph.
// 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();
}
}
-
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 |
+----------------------+----------------+------+---------+-----------+
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");