The Benefits of Graph Computing
A graph is a structure composed of vertices and edges.
Both vertices and edges can have an arbitrary number of key/value-pairs called properties.
Vertices denote discrete objects such as a person, a place, or an event. Edges denote relationships between vertices. For instance, a person may know
another person, have been involved in an event, and/or was recently at a particular place. Properties express non-relational information about the
vertices and edges. Example properties include a vertex having a name, an age and an edge having a timestamp and/or a weight. Together, the aforementioned
graph is known as a property graph and it is the foundational data structure of Apache TinkerPop.
If a user's domain is composed of a heterogenous set of objects (vertices) that can be related to one another in a multitude of ways (edges),
then a graph may be the right representation to use. In a graph, each vertex is seen as an atomic entity (not simply a "row in a table") that
can be linked to any other vertex or have properties added or removed at will. This empowers the data modeler to think in terms of actors within
a world of complex relations as opposed to, in relational databases, statically-typed tables joined in aggregate. Once a domain is modeled, that
model must then be exploited in order to yield novel, differentiating information. Graph computing has a rich history that includes not only query
languages devoid of table-join semantics, but also algorithms that support complex reasoning: path analysis, vertex clustering and ranking, subgraph
identification, and more. The world of applied graph computing offers a flexible, intuitive data structure along with a host of algorithms able to
effectively leverage that structure.
Apache TinkerPop™ is an open source, vendor-agnostic, graph computing framework distributed under the commercial friendly Apache2 license.
When a data system is TinkerPop-enabled, its users are able to model their domain as a graph and analyze that graph using the Gremlin graph traversal language.
Furthermore, all TinkerPop-enabled systems integrate with one another allowing them to easily expand their offerings as well as allowing users to choose the appropriate graph
technology for their application. Sometimes an application is best served by an in-memory, transactional graph database. Sometimes a multi-machine distributed graph database will do the job.
Or perhaps the application requires both a distributed graph database for real-time queries and, in parallel, a Big(Graph)Data processor for batch analytics. Whatever the application's
requirements, there exists a TinkerPop-enabled graph system out there to meet its needs.
TinkerPop is an open source project that welcomes contributions
. There are many ways to get involved:
Join the Gremlin-Users public mailing list.
- Help users by answering questions and demonstrating your expertise in TinkerPop and graphs.
Join the TinkerPop Developer public mailing list.
- Contribute ideas on how to make the TinkerPop code- and documentation-base better.
- Submit bug and feature issues to TinkerPop JIRA.
Clone the TinkerPop Git repository and provide a pull-request.
- Provide easily reproducible bug reports and well articulated feature requests.
Make significant, long lasting contributions over time.
- Focus on a particular area of the codebase and take responsibility for your contribution.
- Become a TinkerPop Committer and help determine the evolution of The TinkerPop.
To build TinkerPop from source, please review the developer documentation.
TinkerPop is at the center of a larger development ecosystem that extends on its core interfaces, integration points, and ideas. The graph systems and libraries below represent both
TinkerPop-maintained reference implementations as well as third-party managed projects. The TinkerPop community is always interested in hearing about projects like these and aiding
in their support. Please read our provider listing policy
and feel free to promote such projects on the user and developer mailing lists. Information on
how to build implementations of the various interfaces that TinkerPop exposes can be found in the Provider Documentation
- Blazegraph - RDF graph database with OLTP support.
- Hadoop (Giraph) - OLAP graph processor using Giraph.
- Hadoop (Spark) - OLAP graph processor using Spark.
- IBM Graph - OLTP graph database as a service.
- Neo4j - OLTP graph database.
- Sqlg - RDBMS OLTP implementation with HSQLDB and Postresql support.
- Stardog - RDF graph database with OLTP and OLAP support.
- TinkerGraph - In-memory OLTP and OLAP reference implementation.
- Titan - Distributed OLTP and OLAP graph database with BerkeleyDB, Cassandra and HBase support.
- Titan (Amazon) - The Amazon DynamoDB storage backend for Titan.
- Titan (Tupl) - The Tupl storage backend for Titan.
- Unipop - OLTP Elasticsearch and JDBC backed graph.
- gremlin-py (python/variant) - Write pure Python Gremlin that can be sent to Gremlin Server.
- gremlin-python (python/variant) - Allows usage of Python syntax when traversing property graphs.
- gremlin-scala (scala/variant) - A Scala language wrapper for TinkerPop3.
- gremlin-template-string (js/variant) - A Gremlin language builder.
- ipython-gremlin (python/variant) - Gremlin in IPython and Jupyter.
- ogre (clojure/variant) - A Clojure language wrapper for TinkerPop3.
- Peapod (java/dsl) - An object-graph-wrapper.
- sparql-gremlin (sparql/distinct) - A SPARQL to Gremlin traversal compiler.
- sql-gremlin (sql/distinct) - An SQL to Gremlin traversal compiler.
- aiogremlin (python) - A Python 3 library based on asyncio and aiohttp that uses websockets to communicate with the Gremlin Server.
- gremlinclient (python) - An asynchronous Python 2/3 client for Gremlin Server that allows for flexible coroutine syntax - Trollius, Tornado, Asyncio.
- gremlin-driver (java) - A Gremlin Server driver for Java.
- gremgo (go) - A Gremlin Server driver for Go.
- gremlinrestclient (python) - Python 2/3 library that uses HTTP to communicate with the Gremlin Server over REST.
- gremlin-php (php) - A Gremlin Server driver for PHP.
- python-gremlin-rest (python) - A REST-based client for Gremlin Server.
- reactive-gremlin (scala) - An Akka HTTP Websocket Connector.
- scalajs-gremlin-client (scala) - A Gremlin-Server client with ad-hoc extensible, reactive, typeclass based API.
- Teva Gremlin (.NET - C#) - A Gremlin Server driver for .NET.
- ts-tinkerpop (typescript) - A helper library for Typescript applications via node-java.
- Rodriguez, M.A., "The Mechanics of Gremlin OLAP," DataStax Engineering Blog, April 2016.
- Rodriguez, M.A., "Quantum Processes in Graph Computing," GraphDay '16 Presentation, Austin Texas, January 2016. [video presentation]
- Rodriguez, M.A., Watkins, J.H., "Quantum Walks with Gremlin," GraphDay '16 Proceedings, Austin Texas, January 2016.
- Rodriguez, M.A., "(Keynote): The Gremlin Graph Traversal Machine and Language," ACM Database Programming Language Conference Presentation, October 2015.
- Rodriguez, M.A., "The Gremlin Graph Traversal Machine and Language," ACM Database Programming Languages Conference Proceedings, October 2015.
- Mallette, S.P., "What's New In Apache TinkerPop?," Cassandra Summit, September 2015.
- Rodriguez, M.A., Kuppitz, D., "The Benefits of the Gremlin Graph Traversal Machine," DataStax Engineering Blog, September 2015.
- Rodriguez, M.A., Kuppitz, D., "The Gremlin Graph Traversal Language," 2015 NoSQLNow Conference, August 2015.
- Rodriguez, M.A., Kuppitz, D., Yim, K., "Tales from the TinkerPop," DataStax Engineering Blog, July 2015.
Apache TinkerPop Committers
TinkerPop seeks committers dedicated to the art of graph computing. TinkerPop committers bring solid theoretical,
development, testing, documentation, etc. skills to the group. Committers contribute to TinkerPop beyond the everchanging requirements of their day-to-day jobs and maintain
responsibility for their contributions through time.
- Marko A. Rodriguez (2009 - PMC): Gremlin language, Gremlin OLAP, documentation.
- Ketrina Yim (2009 - Committer): Illustrator, creator of Gremlin and his merry band of robots.
- Stephen Mallette (2011 - PMC Chair): Gremlin Console/Server/Driver, Graph I/O, testing, documentation, mailing list support.
- James Thornton (2013 - PMC): Promotions, evangelism.
- Daniel Kuppitz (2014 - PMC): Gremlin language design, benchmarking, testing, documentation, mailing list support.
- Hadrian Zbarcea (2015 - PMC): Project mentor, provider liason.
- Daniel Gruno (2015 - PMC): Project mentor, infrastructure liason.
- Matt Frantz (2015 - Committer): Gremlin language design, ts-tinkerpop.
- Jason Plurad (2015 - Committer): Gremlin Console/Server, mailing list support.
- Dylan Millikin (2015 - PMC): Gremlin Server/Driver, gremlin-php, GremlinBin, mailing list support.
- Ted Wilmes (2015 - PMC): Promotions, mailing list support, benchmarking, sql-gremlin.
- Pieter Martin (2016 - Committer): Gremlin language, Sqlg.
- Michael Pollmeier (2016 - Committer): Gremlin language, Gremlin-Scala.