Archimedes provides functions to work with Tinkerpop/Blueprint objects.
Ogre provides functions to work with the Gremlin graph query language.
Built on top of Archimedes and Ogre, Titanium provides functions for working with the Titan graph database.
Archimedes and Ogre have been decoupled and don’t depend on one another.
Archimedes should work with any database that follows the tinkerpop interfaces.
Ogre doesn’t compile Gremlin pipelines until the last minute. The java api for Gremlin is such that you can’t reuse objects for multiple queries and so it is possible to get some unexpected results if you aren’t careful. Lazy compilation of pipelines was added in and the tests pass, but this is mostly undocumented and would be confusing for newcomers.
In addition, the pipelines in Ogre are represented as vectors of anonymous functions until they are compiled into a GremlinPipeline object. Giving unique names to all the anonymous functions (like in-anon or dedup-anon) would make debugging queries easier.
Because most of the methods for GremlinPipelines are fairly simplistic and don’t need much wrapping, I wrote two macros that creates functions based off signatures for the method. The above suggestion, about naming anonymous functions, would be a two line change for about 30 functions.
Titanium currently depends on Archimedes. Titanium uses ztellman/potemkin to import functions into the appropriate namespaces and so users only need to think about interacting with Titanium when using Titan (instead of messing with Archimedes and Titanium at the same time).
No documentation exists for Archimedes.
jonase/eastwood has found a bunch of mistakes in the test suites for all libraries such as tests not running or not doing what is commonly expected. Having the tests pass the eastwood test would be smart.
Ogre’s lazy compilation is undocumented.
Gremlin Side effects are mostly unexplored beyond some basic functions in Ogre. Unsure of how to go about integrating them or when they would even be needed.
Ogre is missing tests for random, simple-path, optional, and the emit step of loop.
Archimedes and Titanium uses dynamic vars to hold onto a single graph object at a time. This is not smart and makes it hard to do various things without much gain. The humbled branch on archimedes started work on refactoring.
Titanium needs to be updated to 0.4.0. The documentation for Titan isn’t great and so a fine line must be walked between making up for the lack of good documentation and doing Think Aurelius job.
What I'm aiming for is to get the 'humbled' branch into a state where we think it might be the next release, then get titanium working against that version. I'll move to latest version of Titan and Blueprints libraries as part of that work.