Hi Stephen,
I agree with the short-comings of our web site. What can I say in a public
forum? I will continue to suggest improvements and I am confident the changes
are in the works and there's no need for me to keep bringing it up every month
or so.
I don't want to bore you with a sales pitch, but in terms of what we do with
Gremlin and what we add.....
Between Gremlin and Neo4j, we have our own graph API. It's how we both protect
against vendor lockin as well as add value.
On top of Gremlin we have a graphical query builder that exposes a subset of
the query language - options for starting step that expose all kinds of fuzzy
matching, traversals steps with various conditions, options for allowing
circular and/or partial traversals, and (cool part) a way to map each step in
the query to a path in a tree, which makes integration with our ETL dataflow
nice and easy. Of course you can drop down to the actual Gremlin that it
generates and edit it using any of the Gremlin (OLTP) features.
Our integration between Gremlin and Neo4j is cool. The current Neo-provided
driver supports labels and table scans and that's it. In addition to supporting
equals, and, or, within, gt/lt/gte/lte/between, we added some of our own
BiPredicates to support startsWith, endsWith, contains, wildcard, and fuzzy,
and support combining multiple has() steps with multiple properties and
generating a Lucene Query that we pass to Neo's legacy indexing. Much more
powerful than even Cypher for matching initial starting nodes.
Like what you described with Grakn.ai, we also have our own NLP-like (or
Facebook Graph Search inspired) search, where a user can type a query (assisted
by auto-complete) like: "Actor name Arnold Schwarzenegger ActedIn Film ActedIn
Actor name Contains Ventura" (real query), which generates this Gremlin:
if (data['name'] == null) return []
graph.traversal().
V().has('name', data['name']).has('_stp_type',
within('Actor')).as('Actor/Actor').
outE('ActedIn').simplePath().as('Actor/ActorToActedIn/ActorToActedIn').
inV().has('_stp_type',
within('Film')).simplePath().as('Actor/ActorToActedIn/ActedInToFilm/ActedInToFilm').
inE('ActedIn').simplePath().as('Actor/ActorToActedIn/ActedInToFilm/FilmToActedIn/FilmToActedIn').
outV().has('_stp_type',
within('Actor')).filter{it.get().property('name').orElse(null) != null &&
it.get().property('name').orElse(null).toString().toUpperCase().contains(String.valueOf(data['name2']).toUpperCase())}.simplePath().as('Actor/ActorToActedIn/ActedInToFilm/FilmToActedIn/ActedInToActor/ActedInToActor').
select('Actor/Actor','Actor/ActorToActedIn/ActorToActedIn','Actor/ActorToActedIn/ActedInToFilm/ActedInToFilm','Actor/ActorToActedIn/ActedInToFilm/FilmToActedIn/FilmToActedIn','Actor/ActorToActedIn/ActedInToFilm/FilmToActedIn/ActedInToActor/ActedInToActor')
...and brings back Arnold Schwarzenegger->ActedIn->Running Man<-ActedIn<-Jesse
Ventura and Arnold Schwarzenegger->ActedIn-> Predator <-ActedIn<-Jesse Ventura.
This query can be saved and parameterized allowing the names be passed into a
web service as arguments and returning movies that any two actors acted in.
(All with clicks, no code.) (All those slashes in the as() steps are how we
indicate how to map the output to a hierarchical list of maps.)
There's other cool stuffs that has less to do with Gremlin like security,
federation (augmenting a graph with "virtual" JDBC data, in a way that looks
like one big graph to the Gremlin user), graph history, ETL steps for import,
update, read, query, split, merge, etc. Blah, blah, blah.
Anywho, yeah, our web site sucks.
-Paul
-----Original Message-----
From: Stephen Mallette [mailto:[email protected]]
Sent: Friday, March 17, 2017 1:18 PM
To: [email protected]
Subject: Re: Requirements for listing as a vendor
Hi Paul, Grakn seems different from your case, at least based on what I've
understood of your product. Grakn actually has the Graql language which
compiles down to the Gremlin. It is an interesting level of integration and
promotes the idea of the Gremlin Virtual Machine in a very public way. As I
understand your product, it seems like you've built an application that uses
TinkerPop, but doesn't expand it with additional libraries/tooling that would
qualify it as a "Provider". I'm pretty sure that all "Providers"
thus far would fit that definition though the visualization providers might be
a bit on the edge there of that definition (are they really "Powered By"
now that we're talking about it?). Not sure if that makes any sense as a
distinction or if that's our definition for our distinction as this is "new"
but it's what's on my mind as one right now.
You mentioned your web site not being developer driven - still might be nice if
it mentioned something about it using "Apache TinkerPop" as a core component of
what it does. I don't think I saw that anywhere. If we were to use our Provider
Policy as a guide for Powered By then I think having such a mention there would
likely be a requirement for listing on the TinkerPop site. Not sure how others
feel about that, but again just throwing ideas out there as we develop this.
On Fri, Mar 17, 2017 at 12:41 PM, Paul A. Jackson <[email protected]>
wrote:
> This sounds great.
>
> At the same time, though, I was looking at other providers and judging
> from architecture diagrams (eg.
> https://grakn.ai/pages/documentation/the-
> fundamentals/grakn-architecture.html) some look similar to ours.
>
> It may be the case that our web site is directed more towards business
> types than developers, is available through direct sales only, etc,
> rather than architectural differences?
>
> -Paul
>
>
> -----Original Message-----
> From: Marko Rodriguez [mailto:[email protected]]
> Sent: Thursday, March 16, 2017 4:13 PM
> To: [email protected]
> Subject: Re: Requirements for listing as a vendor
>
> I say we add a “Powered By” section to the website and list
> “leveraging systems” as I wouldn’t call this a “TinkerPop Provider”
> like I would a more “low level” graph database system….
>
> If we open up “Powered By” it would allow us to show people the types
> of products, projects, nick nacks and doo dads that are out there
> leveraging TinkerPizzzop.
>
> Marko.
>
>
> > On Mar 16, 2017, at 1:56 PM, Paul A. Jackson <[email protected]>
> wrote:
> >
> > I agree that the last bullet is not met. We bundle the Tinkerpop
> > stack,
> so the idea of version compatibility doesn't make sense. Instead, we
> offer a platform that builds an ecosystem around the graph (ETL, fuzzy
> matching, rich analysis client, etc). One feature is graph query. The
> users can supply their own Gremlin queries, or they can use our
> graphical query builder, which generates Gremlin.
> >
> > Anywho, what do you think? I concur we do not fit in the provider
> bucket. But we have been around for 5 years. The offering is pretty
> mature at this point.
> >
> > -Paul
> >
> >
> >
> > -----Original Message-----
> > From: Robert Dale [mailto:[email protected]]
> > Sent: Thursday, March 16, 2017 1:50 PM
> > To: [email protected]
> > Subject: Re: Requirements for listing as a vendor
> >
> > You should start here: http://tinkerpop.apache.org/policy.html
> >
> > It's not obvious to me that the last 3 bullets are met.
> >
> > Robert Dale
> >
> > On Thu, Mar 16, 2017 at 12:56 PM, Paul A. Jackson
> > <[email protected]>
> > wrote:
> >
> >> Hi,
> >>
> >> What are the requirements for being lists as a Gremlin provider? We
> >> (Pitney Bowes) have an integrated product offering called Spectrum
> >> Data Hub (you'll also see it listed as part of the Spectrum MDM
> >> solution). The product is its own application server and we embed
> >> Gremlin on top of embedded Neo4j using our own "blueprints" adapter.
> >> So, access to the graph is from our own apps, rather that via a
> >> Gremlin
> console or server.
> >>
> >> I don't know if this makes us a special case or not. Can you let us
> >> know if we qualify and/or if there's anything we would need to do so?
> >>
> >> Here's a link to the product literature:
> >> http://www.pitneybowes.com/us/
> >> customer-information-management/data-integration-
> >> management/spectrum-data-hub-module.html
> >>
> >> Thanks,
> >> -Paul
> >>
> >> ________________________________
> >>
> >>
> >
> > ________________________________
> >
>
>
> ________________________________
>
>
________________________________