Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Dgraph | 19,088 | 3 | 4 | a day ago | 174 | January 05, 2022 | 268 | other | Go | |
Native GraphQL Database with graph backend | ||||||||||
Janusgraph | 4,766 | 64 | 29 | a day ago | 18 | May 31, 2022 | 482 | other | Java | |
JanusGraph: an open-source, distributed graph database | ||||||||||
Graphscope | 2,296 | 1 | a day ago | 54 | July 06, 2022 | 201 | apache-2.0 | Rust | ||
🔨 🍇 💻 🚀 GraphScope: A One-Stop Large-Scale Graph Computing System from Alibaba 来自阿里巴巴的一站式大规模图计算系统 图分析 图查询 图机器学习 | ||||||||||
Incubator Hugegraph | 2,206 | 1 | 5 days ago | 5 | January 19, 2021 | 236 | apache-2.0 | Java | ||
A graph database that supports more than 100+ billion data, high performance and scalability (Include OLTP Engine & REST-API & Backends) | ||||||||||
Gremlin | 1,835 | 171 | 37 | 6 years ago | 8 | September 17, 2014 | 21 | other | Java | |
A Graph Traversal Language (no longer active - see Apache TinkerPop) | ||||||||||
Tinkerpop | 1,717 | 146 | 72 | 3 days ago | 50 | July 21, 2021 | 20 | apache-2.0 | Java | |
Apache TinkerPop - a graph computing framework | ||||||||||
Blueprints | 1,305 | 370 | 67 | 6 years ago | 8 | September 17, 2014 | 20 | other | Java | |
A Property Graph Model Interface (no longer active - see Apache TinkerPop) | ||||||||||
Nlp Knowledge Graph | 1,298 | 23 days ago | mit | |||||||
自然语言处理、知识图谱、对话系统三大技术研究与应用。 | ||||||||||
Awesome Graph | 794 | 2 years ago | 4 | |||||||
A curated list of resources for graph databases and graph computing tools | ||||||||||
Graph | 749 | a month ago | 83 | apache-2.0 | Ruby | |||||
Practical Gremlin - An Apache TinkerPop Tutorial |
Cypher for Gremlin is a toolkit for users of Apache TinkerPop™ that allows querying Gremlin databases with Cypher, the industry's most widely used property graph query language defined and maintained by the openCypher project.
Cypher query is translated to one of Gremlin representations (Gremlin Groovy string, Traversal object or Gremlin bytecode):
Gremlin Console plugin that enables client-side translation of Cypher queries or communication with a Cypher-enabled Gremlin Server (click to play/view source):
Gremlin Server client wrapper that can send Cypher queries to a Cypher-enabled Gremlin Server or translate Cypher queries to Gremlin on client side, and send translated query to servers:
String cypher = "MATCH (p:person) WHERE p.age > 25 RETURN p.name";
Cluster cluster = Cluster.open(configuration);
Client gremlinClient = cluster.connect();
// Server has Gremlin Server plugin installed
// Send Cypher to server
CypherGremlinClient cypherGremlinClient = CypherGremlinClient.plugin(gremlinClient);
List<Map<String, Object>> cypherResults = cypherGremlinClient.submit(cypher).all();
// Client side translation
// Send Gremlin to server
CypherGremlinClient translatingGremlinClient = CypherGremlinClient.translating(gremlinClient);
List<Map<String, Object>> gremlinResults = translatingGremlinClient.submit(cypher).all();
assertThat(cypherResults).isEqualTo(gremlinResults);
Implementation of Neo4j API interfaces for users familiar with Neo4j:
Driver driver = GremlinDatabase.driver(uri);
try (Session session = driver.session()) {
StatementResult result = session.run("MATCH (n) RETURN count(n) as count");
int n = result.single().get("count").asInt();
assertThat(n).isEqualTo(0); // 0
}
Gremlin Server plugin that enables Cypher query processing on Gremlin Server. For example connect using Gremlin-JavaScript 3.4.2+ by setting processor
to cypher
:
// npm install [email protected]
const gremlin = require('gremlin');
const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', processor: 'cypher'});
const cypherQuery = 'MATCH (n) RETURN n.name'
const results = await client.submit(cypherQuery);
for (const result of results) {
console.log(result);
}
See examples for Gremlin-Java, Gremlin-Groovy, Gremlin-Python and Gremlin.Net
For Gremlin Console Plugin and Gremlin Server Client
its possible to combine Cypher and Gremlin in single query. Traversal can start with cypher
step that allows to run Cypher
query (which will be translated to Gremlin and works withRemote
) then continue traversal using other Gremlin steps:
CypherTraversalSource g = graph.traversal(CypherTraversalSource.class);
GraphTraversal<Map<String, Object>, String> query = g
.cypher("MATCH (n) RETURN n")
.select("n")
.outE()
.label()
.dedup();
The toolkit is composed of:
With Cypher for Gremlin you can use the following Cypher language features:
MATCH
and OPTIONAL MATCH
WHERE
, ORDER BY
, SKIP
, and LIMIT
sub-clausesRETURN
, WITH
, and UNWIND
projections, including basic support for list and path comprehensionsCREATE
, MERGE
, SET
, REMOVE
, and (DETACH) DELETE
CASE
expressionsUNION (ALL)
operationsCALL
proceduresIt is not guaranteed that all instances and combinations of the listed features will work. However, in addition to integration tests, correctness of translation is verified by the Cypher Technology Compatibility Kit (TCK). The TCK is an openCypher artifact and contains a comprehensive set of test scenarios validating different features of the Cypher language.
Coverage of TCK M13 (excluding Temporal Types) on TinkerGraph:
You are very welcome to report any issues with the translation that you encounter.
Cypher for Gremlin is tested on following Gremlin implementations:
neptune
flavor
cosmosDb
flavor
Each Gremlin implementation has its own level of Gremlin support and Gremlin step implementation specifics. In some cases, queries need to be adapted for target implementation using flavor.
Because of these specifics, Cypher support varies on different implementations. Refer to wiki for more details.
The translation process uses a reasonably sophisticated and flexible approach. Cypher query is parsed by the openCypher Frontend and translated to an internal representation by the Cypher for Gremlin. The internal representation is transformed by a set of rewriters to adapt the query for system specifics of different Gremlin implementations (JanusGraph, Cosmos DB, AWS Neptune), then converted to one of Gremlin representations (Gremlin Groovy string, Traversal object or Gremlin bytecode).
See also How to implement new Cypher feature?
To build and run Cypher for Gremlin you need Java 8. The project is built using Gradle or the provided wrapper.
To build and run unit and integration tests:
./gradlew build
To automatically fix formatting errors in your changes:
./gradlew spotlessApply
We would love to find out about any issues you encounter and are happy to accept contributions following a Contributors License Agreement (CLA) signature as per the process outlined in our contribution guidelines.
The project is licensed under the Apache Software License, Version 2.0
© Copyright 2018-2019 Neo4j, Inc.
Apache TinkerPop™, TinkerPop, and Apache are registered trademarks of the Apache Software Foundation.