That is a really nice rundown. 

Thanks for doing that.

Marko.

http://markorodriguez.com

On Mar 22, 2016, at 11:45 AM, Damien Seguy <damien.se...@gmail.com> wrote:

> A few notes before the list : I bring this list in the hope it may help 
> others to get orientation when moving from Gremlin 2 to 3. I have made 
> Gremlin works for me, but I have still to gain a lot of experience. 
> Hopefully, anyone with better knowledge will correct this humble article.
> 
> Gremlin 3 has been around for quite some time, and gremlin 2 is dead. Time to 
> move code. Since this is a major version change, migration is rather steep. 
> It requires a lot of modifications, not just a few API names. I scanned 
> Gremlin 2 queries in my code, and here are the first directions that I found.
> 
> 
> My context : I use Gremlin via HTTP API. The underlying database is Neo4j, 
> and Gremlin is running as a plug-in. The guide focuses on query building.
> 
> g.idx('index')
> g.idx('index')[['key' :'value']] is gone. The index have moved from Gremlin 
> to the underlying graph engine, and any index has to be created with the 
> engine's language. For for TitanDB, it is with Titan API ManagementSystem, 
> and for Neo4j, it will be Cypher. 
> Once the index is build, gremlin attempts to use the good indices if the 
> query starts with : g.V().has(). Besides that, there is nothing special do 
> to, nor to note. 
> An interesting alternative to indexing is the Subgraph() step : it creates a 
> partition of the graph, that may be used later as a basis for another query. 
> That may be a good way to prepare nodes with a large sieve, then run more 
> complex queries on smaller set of nodes : it's always a good strategy. Now, 
> if subgraphs have to be used several times, where can they be stored ? Graph 
> variables() or Sack() ?
> Back() doesn't exist
> The As() step is available, and may be coupled with Select() to access 
> previously named steps. Given some weird behaviors of back(), this looks 
> interesting. It is also useful to collect several nodes during the query and 
> finally return them as an array.
> Lambda steps sideEffect() and Filter() are to be avoided
> They are still available, though, so it makes an easy migration. At first 
> glance, Filter() may be replaced by WHERE() step. SideEffect() will have to 
> be replaced by a mix of other steps. This will require some work, and may 
> eventually make the queries a lot cleaner : nothing like a big string of code 
> inside a step to decay quickly.
> The Loop() step is now called Repeat()
> It comes along with modulators, Emit(), Times() and Until(). That will help 
> readability, and there is no more use of it.object or it.loops inside the 
> closures.
> The GroupBy() step has been recalled Group()
> It has now a named modulator called By(). This is the same evolution than 
> Loop().
> The Transform() step is gone. 
> The queries makes some usage of this step when it needs to apply some 
> transformation during the traversal. It may be to follow an optional link ( 
> transform{ if (it.out('METHOD').any()) { it.out('METHOD').next(); } else { 
> it; }} ) or replacing current step by an arbitrary element stored in an index 
> (transform{g.idx("classes")[["path":it.fullnspath]].next(); }}). Those steps 
> may need the most rethinking, besides replacing Transform() by sideEffect() 
> for the time being.
> SetProperty() and RemoveProperty() are gone, and have been replaced by 
> Property(). I can't find explicitly the other CRUD operations, so I guess 
> that removing property is making it NULL ; replacing property is just adding 
> it again. Getting the list of properties is using valuesMap() step.
> Map() is now valueMap(), with the possibility to get the all the properties, 
> a sub-selection of them.
> More goodness
> While reading the docs, Match() and TimeLimit() looks very interesting : 
> Match() will check that some condition applies to several sub-searches at the 
> same time. When searching has a path that looks like a star, it is going to 
> be great. 
> Timelimit() is a step that limits the amount of time spend on a query, and 
> reports any data found during that time. This looks very interesting to keep 
> a system reactive, as long as the user may do something with a partial 
> results.
> 
> Thanks for reading : do not hesitate to correct any misconception. 
> I'll begin experimenting quickly with this new version of Gremlin and gain 
> experience.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Gremlin-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to gremlin-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/gremlin-users/40aac944-993e-4046-9d4d-1794f957f9c1%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

Reply via email to