There are currently three issues open with Rexster at the moment that
relate to language specific adapters, binary protocols and other very
general functionality around those concepts:
https://github.com/tinkerpop/rexster/issues/105
https://github.com/tinkerpop/rexster/issues/32
https://github.com/tinkerpop/rexster/issues/10
Despite each of these issues being different, they are related in an
overriding general goal: to provide language specific client APIs
utilizing Gremlin as the core query language. It would make Rexster
akin to MySql, SQL Server, etc on the server providing access to
different databases and allowing developers to work with concrete
classes in their language of choice without concerning themselves with
REST and JSON parsing.
Here's the basics of what Marko and I have discussed so far:
1. Use MsgPack to serialize data coming from Rexster. Seems like
there is good language support there.
2. Allow Gremlin state to be maintained by keeping the script engine
bindings available. The client will pass a reference to the bindings
with requests to have them loaded to the script engine.
3. There is some challenge in what Gremlin returns as output. MySQL
is closed over tables. Gremlin is closed over a universe of things.
4. There is some question as to where the service should live in
Rexster. The current GremlinExtension has its context specific to a
graph, vertex or edge, but that's not what is in mind for the client
APIs.
In this last item, GremlinExtension (and this is not to say that
GremlinExtension is the mechanism by which Rexster will expose this
functionality) is exposed as:
http://localhost/somegraphihave/tp/gremlin
That doesn't make sense in scenarios where one issues a Gremlin
statement like:
g = new TinkerGraph();
It occurred to us that statements like these are kind of like a DDL
for Rexster. Of course, Rexster is statically configured by
rexster.xml, so new graphs have no way of being exposed through
Rexster the way they would if someone issued a SQL Server DDL script
like:
CREATE DATABASE MyDb;
CREATE TABLE MyTable (MyTableID INT NOT NULL PRIMARY KEY, MyTableText
VARCHAR(32) NOT NULL);
Perhaps there needs to be a way to expose the newly created graph,
"g", in Rexster when that command is issued. Perhaps a
RexsterConfigurationContext could be made available in the script
engine bindings so that the following could be done:
g = new TinkerGraph();
rexsterConfigContext.addGraph(g, configurationOptions);
Or perhaps, there needs to be a gremlin+rexster extension language
that handles DDL and Rexster configuration? Our collective minds
broke down at this point (or perhaps earlier) and I thought it would
be good point to summarize, reflect and take stock of what we had
discussed so far. Any thoughts or feedback on the approach, design,
functionality, etc. would be appreciated.
Best regards,
Stephen