orientdb-gremlin
orientdb-gremlin copied to clipboard
TinkerPop3 Graph Structure Implementation for OrientDB
orientdb-gremlin
Apache TinkerPop 3 graph structure implementation for OrientDB. This started off as just a proof of concept, but thanks to a lot of help it's now in a really good shape and it has been officially adopted by the OrientDB team to be part of OrientDB v3.x and should eventually replace OrientDB's graphdb implementation that is still on TinkerPop 2.
The main area that need some more work is index lookups - currently it does find the right index for a simple case, e.g. g.V.hasLabel("myLabel").has("someKey", "someValue"). However if there are multiple indexes on the same property, or if there the traversal should better use a composite index, that's not handled well yet. If you feel inclined you can add these cases to the OrientGraphIndexTest.java. The function that looks up indexes is OrientGraphStep.findIndex.
Tests
- you can run the standard tinkerpop test suite with
mvn install -P release - there are some additional tests that you can run independently with
mvn test - additionally there is a separate suite of tests in the
tests-scaladirectory which you can run usingsbt test - to automatically format the code (travis CI enforces a format check), just run
mvn clean install
Usage
Have a look at the tests-scala which demonstrates the usage. There's also an orientdb example project in gremlin-scala-examples.
Labels and classes
Vertices and Edges are stored as classes based on their label. In order to allow vertices and edges to use the same label, the implementation prepends V_ or E_ in the class name:
- vertex with label
user-> classnameV_user - edge with label
user-> classnameE_user
Migrations
You might want to use orientdb-migrations to create a schema with indexes etc.
Release
- upgrade version: remove SNAPSHOT (driver/pom.xml and tests-scala/build.sbt)
- commit on branch, push, create PR on github
- await green light from travis
- merge PR on github
- then execute
* mvn pull
* mvn clean deploy -Prelease
* git tag VERSION
- bump versions to next SNAPSHOT (pom.xml, build.sbt)
- then
* git push
* git push --tags